많은 한글 형태소 분석기가 존재하는데 그중에 우리 프로젝트에 맞고 성능이 좋은 형태소 분석기를 고르기 위해 6가지의 형태소 분석기를 가지고 실험을 진행 하였다 6가지 형태소 분석기는 konlpy에서 제공하는 한나눔 꼬꼬마 코모란 okt mecab와 요번에 새로 나온 khaiii를 가지고 진행하였다.
실험 환경
memory 4G
ubuntu 18.04
python 3.6.8
konlpy 0.5.1
형태소 분석기 정확도 비교
형태소 분석기는 정확도가 무엇보다 중요하다고 생각해서 정확도를 먼저 분석해보았다 분석 유형은4가지이며 첫 번째로 긴 문장 문장이 길기 때문에 어떻게 이 문장에 대해 반응하는지 보기 위해 선택하였고 악플 방지를 피하기 위해 중간에 숫자나 알파벳을 넣는 경우도 있으므로 그때는 어떻게 반응하는지 보기 위해서 단어 중간에 숫자 있을 때 또 띄어쓰기가 틀린 경우도 많기 때문에 띄어쓰기가 없을 때 어떻게 되는지 마지막으로 저번에 웹크롤링을 실습할 때 마블과 같이 형태소가 고유명사에서 많이 사용해서 명사로 바뀐 경우가 있는데 이럴 때 잘 구별하는지를 보았다
1.긴 문장
2. 중간에 숫자나 알파벳이 있을 경우
3. 띄어쓰기가
4.고유 명사가 명사로 바뀐 경우
1긴 문장
문장 : 내년도 최저임금을 기존 방식대로 전체 업종에 동일하게 적용하기로 결정했다.
최저임금의 업종별 차등 적용을 요구해온 사용자 위원들은 이에 반발해 전원회의에서 퇴장했다.
긴 문장을 분석할 경우 다른 것에 비해 좀 걸리네 라고 느낄 정도의 시간의 차이는 있었으나 대체로 형태소 분석이 잘된 것을 확인할 수 있었다.
2. 중간에 숫자나 알파벳이 있을 경우
주의 악플 석할때 사용하려고 형태소 분석기를 찾고 있으므로 욕설이 있는 문장을 분석하였습니다 숫자나 알파벳이 들어간 문장 분석에서 욕설이 들어간 문장이 있으니 불쾌감을 느끼시는 분들은 이 부분을 넘어가 주세요 |
문장: 씨1발아 병 a신a 같은 놈 씨발 병신
우리 프로젝트의 가장 중요한 욕설 중간에 숫자나 알파벳이 있을 때 형태소 분석이 잘되는지 진행해 봤는데 한나눔을 제외하고는 전혀 되지 않았다 한나눔만 둘 다 N으로 분석하였고 다른 형태소 분석기는 숫자나 알파벳을 기준으로 나뉘어서 따로 분석되는 모습을 볼 수 있었다.
3.띄어쓰기가 없을 경우
문장: 집에가고싶다이제쉬고싶다
한나눔과제외하고는 형태소 분석이 대체로 잘되고 있다는 것을 알 수 있다 한나눔은 ‘집에가고싶다쉬’‘집에 가고 싶다 쉬’를 명사로 보았고 khaiii는 ‘이제 쉬고 싶다’에서 제쉬라고 분석해버렸다
4. 고유
문장: 마블 3000만큼 사랑합니다.
komoran은 마블을 NNP로 고유명사로 구별했지만 그 외에 다른 khaiii 꼬꼬마 mecab는 NNG 일반명사로 구별이 잘 되었다 다른 okt와 한나눔은 명사라고 구별하고 그 이상 구별하지 않았다.
형태소 분석기 시간 분석 결과
좀 긴 문장을 해서 시간의 차이가 좀 더 잘 보일 수 있도록 분석해보았다 이때 사용한 문장은 기사에 실린 긴 문장을 가져와서 사용해 보았다
‘ 내년도 최저임금을 기존 방식대로 전체 업종에 동일하게 적용하기로 결정했다. 최저임금의 업종별 차등 적용을 요구해온 사용자 위원들은 이에 반발해 전원회의에서 퇴장했다. 최저임금위원회 사용자위원들은 이날 오후 정부 세종청사에서 열린 최저임금위원회 제5차 전원회의 도중 퇴장해 기자들과 만나 "금일 최저임금위원회는 최저임금 고시에 월 환산액을 병기하고 2020년 최저임금을 모든 업종에 동일하게 적용하기로 결정했다"라고" 밝혔다.'
이 문장을 1,10,100,1000 반복해 1,10,100,10001,10,100,1000 문장일 때 형태소 분석 시간을 계산해보았다 이때 시간은 5회 반복해서 제일 낮은 시간을 측정했다
|
1 |
10 |
100 |
1000 |
hannanum |
1.44507 |
1.66621 |
5.25361 |
18.77751 |
kkma |
11.80016 |
14.43480 |
29.63884 |
170.76234 |
komoran |
0.08969 |
0.33671 |
1.83922 |
15.05882 |
okt |
5.09221 |
5.79224 |
7.93883 |
37.38386 |
mecab |
0.00335 |
0.01212 |
0.10388 |
0.57210 |
khaiii |
0.00569 |
0.11792 |
0.72923 |
7.11792 |
꼬꼬마 형태소 분석기가 문장이 늘어날수록 기하급수적으로 시간이 늘어나 다른 형태소 분석기와 차이가 많이 난다는 것을 알 수 있다 따라서 꼬꼬마 형태소를 제외하고 만부터 다시 시간을 측정하였다
|
10 |
100 |
1000 |
10000 |
hannanum |
1.66621 |
5.25361 |
18.77751 |
146.22653 |
komoran |
0.33671 |
1.83922 |
15.05882 |
144.60418 |
okt |
5.79224 |
7.93883 |
37.38386 |
154.84640 |
mecab |
0.01212 |
0.10388 |
0.57210 |
5.58000 |
khaiii |
0.11792 |
0.72923 |
7.11792 |
71.19120 |
10만 문장부터는 시간이 너무 오래 걸리거나 파이썬이 강제로 죽는 경우가 발생하여 만 문장까지 측정하였다 전체적으로 봤을 때 mecab가 가장 빠르게 분석을 하였고 그다음이 khaiii 나머지는 비슷한 시간대를 보여주었다.
결론
전체적으로 봤을 때 한나눔과khaiii는 띄어쓰기를 잘 지키지 않는 문장을 형태소 분석할 때 오류가 있다는 것을 알 수 있었다
시간적으로 봤을 때 mecab가 가장 빨랐으며 그다음이 khaiii였다 mecab는 연산속도가 중요할 때 사용하면 좋을 거 같고 심지어 분석능력 또한 좋았다
okt, 한나눔은 다른 형태소 분석기와 달리 명사를 고유명사 일반명사 같이 세세하게 들어가지 않고 그냥 명사로 구별하고 있었다. 세세한 분석이 필요하면 한나눔과okt 대신 다른 형태소 분석기가 적합할 거 같다.
지금 프로젝트는 많은 댓글을 분석할 때 사용하므로 연산속도가 중요하다고 생각한다. 또한 댓글을 다는 사람이 띄어쓰기를 잘 지키지 않을 수도 있기 때문에 띄어쓰기가 없었던 문장 분석을 할 때 약했던 khaiii와 한나눔은 적합하지 않았던 거 같다 따라서 처음 생각한 khaiii 대신 mecab를 사용하는 것이 프로젝트에 더 적합하다고 느껴져 mecab 형태소 분석기를 사용하기로 하였다. 중간에 숫자와 영문이 들어갔을 때 형태소 분석이 잘되지 않았는데 이 부분을 해결하는 방법이 필요하다고 생각한다.
참고 문헌
khaiii 깃헙 https://github.com/kakao/khaiii,
konlpy 홈페이지 https://konlpy-ko.readthedocs.io/ko/v0.4.3/
Almost Baseball, CSE and Diary블로그 https://iostream.tistory.com/144
'개인 공부' 카테고리의 다른 글
intellij 사용시 깃 계정 여러개 사용 (0) | 2024.05.10 |
---|---|
NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException 오류 (0) | 2022.05.26 |
면접 준비하면서 공부(1) (0) | 2020.12.05 |