본문 바로가기

개인 공부

형태소 분석기 비교

728x90
반응형

많은 한글 형태소 분석기가 존재하는데 그중에 우리 프로젝트에 맞고 성능이 좋은 형태소 분석기를 고르기 위해 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 같은 놈 씨발 병신

순서: 한나눔 , khaiii,  꼬꼬마 , komoran, mecab, okt

우리 프로젝트의 가장 중요한 욕설 중간에 숫자나 알파벳이 있을 때 형태소 분석이 잘되는지 진행해 봤는데 한나눔을 제외하고는 전혀 되지 않았다 한나눔만 둘 다 N으로 분석하였고 다른 형태소 분석기는 숫자나 알파벳을 기준으로 나뉘어서 따로 분석되는 모습을 볼 수 있었다.

3.띄어쓰기가 없을 경우

문장: 집에가고싶다이제쉬고싶다

 

순서: 한나눔, khaiii, 꼬꼬마, komoran, mecab, okt

 

 

한나눔과제외하고는 형태소 분석이 대체로 잘되고 있다는 것을 알 수 있다 한나눔은 ‘집에가고싶다쉬’‘집에 가고 싶다 쉬’를 명사로 보았고 khaiii이제 쉬고 싶다에서 제쉬라고 분석해버렸다

 

4. 고유

문장: 마블 3000만큼 사랑합니다.

순서: 한나눔 , khaiii,  꼬꼬마 , komoran, mecab, okt,

 

komoran은 마블을 NNP로 고유명사로 구별했지만 그 외에 다른 khaiii 꼬꼬마 mecabNNG 일반명사로 구별이 잘 되었다 다른 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

 

1~1000번문장 비교

 

 

꼬꼬마 형태소 분석기가 문장이 늘어날수록 기하급수적으로 시간이 늘어나 다른 형태소 분석기와 차이가 많이 난다는 것을 알 수 있다 따라서 꼬꼬마 형태소를 제외하고 만부터 다시 시간을 측정하였다

 

 

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~10000문장 비교

 

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

728x90
반응형