bab2min / Kiwi

Kiwi(지능형 한국어 형태소 분석기)
https://lab.bab2min.pe.kr/kiwi
Other
396 stars 46 forks source link

[질문] 태그 커스텀 관련 #136

Closed DevJunghun closed 11 months ago

DevJunghun commented 11 months ago

안녕하세요. 먼저 뛰어난 한국어 형태소 분석기를 개발해주심에 감사드립니다. 한국어 텍스트 처리에 아주 잘 사용하고 있습니다..!

현재 Kiwi를 이용해 특정 도메인에서 작은 범위의 NER Task를 수행할 수 있을 것 같아 구현을 시도 중에 있는데, 기존 태그 목록 (https://bab2min.github.io/kiwipiepy/v0.15.1/kr/#_9) 외에 다른 태그를 추가하여 사용자 단어 사전을 이용하는 방법이 존재하는지 문의드립니다.

예를 들면, 포켓몬이라는 단어를 다음과 같이 SPE 태그(기존 태그 목록에 존재하지 않는 태그)로 태깅할 수 있는지에 대한 것입니다.

kiwi.add_user_word('포켓몬', 'SPE', 1)

감사합니다!

DevJunghun commented 11 months ago

이미 등록된 형태소의 태그를 바꿀 수 있는지에 대해서도 문의드립니다. 예를 들어, 포켓몬이라는 단어가 NNP 태그로 태깅되어 있을때, 기 등록된 점수보다 더 높은 점수로 사용자 단어 사전에 추가하여 NNG 태그로 재태깅할 수 있는지에 대한 것입니다.

kiwi.add_user_word('포켓몬', 'NNG', 100)
bab2min commented 11 months ago

안녕하세요 @DevJunghun 현재 키위 시스템에서는 단어의 형태와 품사를 묶어서 키로 관리하고 있습니다. 즉 형태와 품사가 동일한 형태소는 오직 사전에 하나만 등재될 수 있는 구조입니다. 반대로 얘기하면 형태가 동일해도 품사가 다르면 별개의 형태소로 처리되어 사전에 각각 등재될 수 있구요. 그래서 이미 포켓몬/NNP이 등재되어 있는 상태라고 할지라도 포켓몬/NNG이 등재되지 않은 상태라면 add_user_word를 통해 포켓몬/NNG을 등록할 수 있습니다. score를 100처럼 큰 값으로 주면 '포켓몬'이라는 텍스트가 당연히 우선적으로 NNG로 분류될 것이구요. 그래서 두번째 질문에 대한 답은 '가능하다'가 되겠습니다.

>>> import kiwipiepy
>>> kiwi = kiwipiepy.Kiwi()
>>> kiwi.tokenize('포켓몬재밌다')
[Token(form='포켓몬', tag='NNP', start=0, len=3), Token(form='재밌', tag='VA', start=3, len=2), Token(form='다', tag='EF', start=5, len=1)]
>> kiwi.add_user_word('포켓몬', 'NNG', 100)
True
# 만약 add_user_word의 리턴값이 True가 아니면 이미 등재되어있는 형태소라서 다시 추가되지 않은 것입니다.
>>> kiwi.tokenize('포켓몬재밌다')
[Token(form='포켓몬', tag='NNG', start=0, len=3), Token(form='재밌', tag='VA', start=3, len=2), Token(form='다', tag='EF', start=5, len=1)]

커스텀 태그 기능은 내부적인 구조 변경이 필요하여 현재 키위에서 지원하고 있지는 않은데요, 개발 계획에 추가해두도록 하겠습니다.

DevJunghun commented 11 months ago

상세한 답변 감사드립니다. 자주 사용하며 키위의 발전을 응원하고 좋은 방향으로 발전할 수 있도록 기여하겠습니다.

해당 이슈는 닫도록 하겠습니다.