NLP 한국어 형태소 분석기 분석해보기

seunghoking.·2020년 8월 25일
6
post-thumbnail

잘 알려져 있는 한국어 형태소 분석기 - koNLPy라이브러리

koNLPy 라이브러리 안에 있는 한국어 형태소 분석기들
1. mecab (속도가 가장 빠름, mac os에서만 사용 가능)
2. komoran
3. kokoma
4. okt(twitter)

koNLPy 라이브러리 특징
미리 한국어 기반의 사전을 정의하여 그 사전을 가지고 형태소를 분석함
-> 이를 해결하기 위해서 사용자 사전에 단어를 등록하는 절차를 거쳐야 한다.

예를 든다면 ?
아이오아이 -> 아이오 / 아이 로 인식
다른 여러 신조어들이 구분되어 인식하거나 명사로 인식하지 못하는 경우 발생

Soynlp

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

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

0개의 댓글