koNLPy 라이브러리 안에 있는 한국어 형태소 분석기들
1. mecab (속도가 가장 빠름, mac os에서만 사용 가능)
2. komoran
3. kokoma
4. okt(twitter)
koNLPy 라이브러리 특징
미리 한국어 기반의 사전을 정의하여 그 사전을 가지고 형태소를 분석함
-> 이를 해결하기 위해서 사용자 사전에 단어를 등록하는 절차를 거쳐야 한다.
예를 든다면 ?
아이오아이 -> 아이오 / 아이 로 인식
다른 여러 신조어들이 구분되어 인식하거나 명사로 인식하지 못하는 경우 발생
Soynlp의 가장 큰 장점
사전에 등록되어 있지 않은 단어들을 하나하나 사전에 등록하는 번거로움을 해결하기 위해
비지도학습 기반으로 corpus(말뭉치)를 알고리즘 기반으로 학습하고 점수를 매겨 이를 이용해 토큰화를 할 수 있는 기능을 제공함
https://github.com/lovit/soynlp#parameter-naming
-> github에서 example들을 확인할 수 있음
Cohesion Score
예를 든다면 ?
'김'이 100번 등장하고 '김삿갓'이 25번 등장한다면 '김삿갓'의 Cohesion Score는 sqrt(25/100) = 0.25가 된다. 이 값은 [0,1] 범위에 있으며 높을 수록 전체 코퍼스 내에서 해당 문자열은 뭉쳐서 등장할 가능성이 높다고 판단할 수 있다.
https://lovit.github.io/nlp/2018/04/09/cohesion_ltokenizer/
Branching Entropy
이는 문자열의 경계에서 얼마나 다양한 다음 문자가 등장하는지를 계산하는 척도이다.
예를 든다면 ?
'슈'라는 글자 다음에 어떤 글자가 올지는 예측하지 어렵지만, '슈퍼'라는 글자 다음에는 어떤게 올지, '슈퍼컴'이라는 글자 다음에는 어떤게 올지 대충 감이 온다. 이는 맥락이 하나씩 늘어나면서 다음 글자를 점점 정확하게 예측할 수 있기 때문이다.
reference
https://godcode.tistory.com/13
https://bab2min.tistory.com/609
내가 생각했을 때 soynlp의 단점
규모가 작은 한 문장이나 몇 줄 안되는 것들은 단어로 인식하지 못한다.
비지도학습 기반 접근법들은 통계적 패턴을 이용하여 단어를 추출하기 때문에 하나의 문장 혹은 문서에서 보다는 어느 정도 규모가 있는 동일한 집단의 문서 (homogeneous documents) 에서 잘 작동한다.
영화 댓글들이나 하루의 뉴스 기사처럼 같은 단어를 이용하는 집합의 문서만 모아서 Extractors 를 학습해야함. 이질적인 집단의 문서들은 하나로 모아 학습하면 단어가 잘 추출되지 않음.
알고리즘적 기술로 만들어졌기 때문에 띄어쓰기에 민감하다. 띄어쓰기 라이브러리를 먼저 사용하여 띄어쓰기를 보완한 다음에 사용하는 것이 좋음
Example
### 패키지 설치 및 예제 파일 다운로드
!pip3 install soynlp
!wget https://raw.githubusercontent.com/lovit/soynlp/master/tutorials/2016-10-20.txt -O 2016-10-20.txt
### 말 뭉치 생성
from soynlp import DoublespaceLineCorpus
# 문서 단위 말뭉치 생성
corpus = DoublespaceLineCorpus("2016-10-20.txt")
len(corpus) # 문서의 갯수
### 형태소 분리 적용
%%time
from soynlp.word import WordExtractor
word_extractor = WordExtractor()
word_extractor.train(corpus)
word_score = word_extractor.extract()
kiwi는 koNLPy 라이브러리와 동일하게 미리 한국어 기반의 사전을 정의하여 그 사전을 가지고 형태소를 분석한다.
그럼 왜 소개하냐?
kiwi의 함수 중에 extract_add_words라는 함수는 위에 소개한 Soynlp를 참고하여 만든 함수이다.
이 함수를 통해 말뭉치로부터 새로운 단어를 추출하고 새로운 명사에 적합한 결과들만 추려낸다. 그리고 그 결과를 현재 모델에 자동으로 추가한다.
즉, koNLPy 라이브러리에 soynlp의 장점을 가져와 사용한 것이라고 볼 수 있다.
Example
### 설치
$ pip install kiwipiepy
### 테스트 해보기
$ python -m kiwipiepy
reference
https://bab2min.github.io/kiwipiepy/v0.8.0/kr/
-> example 및 함수들을 모두 확인할 수 있는 Page
https://github.com/bab2min/kiwipiepy
-> Github Page