Skip to content

이용자 사전에 단어 추가시 최적의 스코어 자동 탐지 #38

@bab2min

Description

@bab2min

상황 설명

현재 이용자 사전에 신규 어휘를 추가할 경우 user_score를 직접 입력받도록 하고 있음. 이 값에 따라 동일한 입력에 대해서도 형태소 분석 결과가 달라질 수 있다.

add_word(골리, NNP, 0)
analyze(사람을 골리다)
: [사람/NNG, 을/JKO, 골리/NNP, 다/EC], -31.064453125

analyze(골리는 사람이다)
: [골리/NNP, 는/JX, 사람/NNG, 이/VCP, 다/EC], -25.12841796875
add_word(골리, NNP, -6)
analyze(사람을 골리다)
: [사람/NNG, 을/JKO, 골리/VV, 다/EC], -36.505615234375

analyze(골리는 사람이다)
: [골리/NNP, 는/JX, 사람/NNG, 이/VCP, 다/EC], -31.12841796875

골리라는 고유 명사를 추가할 때 score를 너무 높게 주면 골리다라는 동사를 잘못 분석할 수 있으며, 반대로 score를 너무 낮게 주면 골리라는 명사를 포함하는 분석 결과 자체가 누락될 가능성이 있다. 문제는 어휘에 따라 최적의 점수가 크게 바뀔 수 있기 때문에 이 값을 선택하는데에 어려움이 많다는 것. 이를 개선하기 위해 다음과 같이 자동화된 탐색 방법을 제안한다.

기능

추가하려는 신규 어휘의 품사에 맞춰 탐색 템플릿을 구축하여 둔다. 예를 들어 NNP의 경우 다음과 같다:

그 이름은 ___이다 : 그/MM 이름/NNG 은/JX ___/NNP 이/VCP 다/EF
___의 말을 따르면: ___/NNP 의/JKG 말/NNG 을/JKO 따르/VV 면/EC

위와 같은 템플릿은 학습 데이터에서 NNP가 등장하는 문맥을 모아서 NNP만 빈 칸으로 대체하면 확보가능하다. 마찬가지로 VV가 등장하는 문맥을 모아둔다. 해당 신규 어휘가 NNP로써 제대로 작동하려면 NNP 템플릿에 신규 어휘를 넣었을때 템플릿과 분석되는 사례가 많아야 하고, 반대로 VV 템플릿에 신규 어휘를 넣었을 때 NNP로 잘못 분석되는 사례가 적어야 한다. 따라서 이 둘을 기준 삼아 최적의 user score를 기계적으로 계산하는 것이 가능할 것으로 보인다.

문제는 품사별 양질의 템플릿을 구축하는 것인데 양이 너무 많으면 탐색에 걸리는 시간이 길어질 수 있으므로, 말뭉치 내에서 적당한 양의 데이터를 임의로 추출해보고 크기를 줄여가면서 성능이 나쁘지 않은 지점을 찾아야할 것으로 보인다.

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status

    할 일

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions