관리 메뉴

꿈 많은 사람의 이야기

카카오 형태소 분석기(khaiii) 분석 시간 및 딥러닝 모델 성능 비교 본문

deep learning(딥러닝)

카카오 형태소 분석기(khaiii) 분석 시간 및 딥러닝 모델 성능 비교

이수진의 블로그 이수진의 블로그 2018.12.09 13:37

안녕하세요! 요즘 날씨가 갑자기 추워졌네요. 건강 조심하세요


지난 주에 카카오 형태소 분석기(khaiii)설치 및 은전한닢(mecab)과 비교를 했었습니다.

https://lsjsj92.tistory.com/408

궁금하신 분들은 해당 글 보시면 되겠습니다.


이 글을 올리고 나서 몇몇 분들이 이런 말씀을 해주셨습니다.

'실제 데이터셋 성능 비교'와 '실행 시간 비교'를 해달라고 요청이 조금 있었습니다.

(아무래도 NLP, 자연어 처리에서는 성능이 중요하니까요)

그래서 이번 포스팅은 실제 데이터셋 성능 비교를 할 것입니다.

LSTM 모델을 기반으로 문서 카테고리 분류를 해볼 것입니다. 또한, 형태소 분석기를 돌리면서 성능 시간도 측정해봅니다.

(시간상 mecab과 비교뿐이 못했습니다.)


데이터셋은 몇개 못했습니다. 저는 개인 공부로 하고 있어서.. 많은 데이터셋이 없습니다 ㅠㅠ (서럽..)

데이터 셋은 아래와 같은 2개입니다.

1. 뉴스 기사(약 10만개, 데이터 한 줄당 길이가 길다. 나름(?) 맞춤법 잘 되어 있고 은어 같은 단어가 많이 없다. =정치, 경제, IT, 연예=)

2. 평점 데이터(약 20만개, 데이터 한 줄당 길이가 짧다. 맞춤법 안되어 있는 것이 많고 은어 등이 많다. =긍정 부정=)


이 2개의 데이터 셋으로 각각 형태소 분석 시간 및 모델을 비교해봅니다.


먼저 뉴스 데이터셋입니다.

뉴스 데이터셋은 아래와 같이 있습니다.




이 데이터 셋은 제가 최근 개인적으로 진행한 프로젝트를 위해 수집한 데이터입니다.

https://lsjsj92.tistory.com/409

프로젝트 글은 위 글에 나와있습니다.

근데 이 데이터를 전부 사용하면 50만개 정도이고 한 글당 글자 수가 길어서 시간이 너무 오래 걸리더라구요

그래서 7월달 하나로 해봅니다. 

그래서 데이터 셋이 10만개입니다.



먼저 mecab(은전한닢)으로 7월 데이터를 형태소 분석을 해봅니다.



시간이 712초가 걸렸네요. 짧은 시간이 아닙니다.

아마 이게 vmware상에서 돌려서 더 느릴겁니다



그 다음 카카오 형태소 분석기를 돌려보죠



더 느립니다. 3118초네요.

50분....... 크흠 

(여기서 시간이 조금 오래걸렸습니다.)

시간이 오래걸린 것은 기본적인 형태소 분석 시간도 있지만 뭔가 데이터가 잘 안들어가더라구요.

카카오 형태소 분석기 github를 들어가시면 api.analyze() 메소드가 있는데요.

이게 이상하게 뉴스 데이터 셋에서는 '띄어쓰기'가 안먹히더라구요. 그래서 띄어쓰기 된 글자는 무시되고 뭐 이런 경향이 있었습니다.

근데 웃긴게 뒤에서 할 영화 데이터에서는 띄어쓰기 이상이 없었습니다.

결국 막 이것저것 하다가 replace 등등해서 하긴 했는데 그런 것 때문에 더 느린 것 같아요.

아무튼. 대략 4배 정도 느렸습니다.


자 다음은 평점 데이터입니다.

데이터는 20만개지만 하나당 글이 짧습니다.



이것 역시 Mecab과 Kakao 형태소 분석기 2개로 나누었습니다.



먼저 mecab입니다. 76초가 걸렸네요



그리고 kakao 형태소 분석기입니다



209초가 걸렸습니다. 

대략 3배? 정도 느립니다.


확실히 카카오 형태소 분석기가 더 느리긴 합니다.


여기까지 형태소 분석기 속도 차이를 살펴보았습니다.

다음은 실제 LSTM 모델을 만들어서 각각 모델의 성능을 비교해봅니다.


여기서도 모델은 2가지입니다.

- 뉴스 데이터

- 평점 데이터


먼저 뉴스 데이터를 보죠



대략 10만개의 데이터가 들어가있습니다.


저는 keras를 주로 이용합니다.

그래서 keras를 이용해 LSTM 모델을 만들어보겠습니다.

10만개 데이터 중 2만개 정도는 test set으로 사용합니다.

그리고 나머지 8만개 중에서 2만개는 validation set으로 사용합니다.


훈련시킨 결과는 아래와 같습니다.



이거는 mecab의 결과인데요. 여러번 해봤는데 95.5%까지 나오더라구요



실제 loss가 떨어지는 모습입니다.



그리고 validation acc가 올라가는 모습입니다.


그럼 카카오 형태소 분석기 기준으로는 어떨까요?



카카오 형태소 분석기(khaiii)도 mecab과 비슷한 성능이 나왔습니다.

띄어쓰기가 잘 되어 있고, 은어 등이 거의 없는 데이터 셋에서는 mecab과 비교했을 떄 비슷비슷하네요!

심지어 제 mecab은 이미 사용자 단어 사전도 구축되어 있는 상태인데요..

그거랑 성능이 비슷하네요




그리고 카카오 형태소 분석기의 loss떨어지는 모습과



validation acc값 올라가는 모습입니다.

아 그리고 ylable이 loss로 나와있는데.. 오타입니다 ㅠㅠ acc입니다.



다음 데이터 셋은 평점 데이터입니다.

train + test셋 합해서 20만개의 데이터입니다



train에 15만개

test에 5만개의 데이터가 있죠



위는 형태소 분석 결과입니다.

mecab 기준 사진입니다.



Tokenizer를 통해서 word_index된 결과를 보니 42251개가 있네요




그리고 train해보니까 84% 정도의 수준이 나옵니다.

높게 나오지 않네요 ㅠ

제가 초보라..


mecab 기준에서는 84% 의 수준으로 나왔습니다. 

그리고 kakao 형태소 분석기를 볼까요?



형태소 분석된 결과입니다.



아까 mecab 기준에서는 Tokenizer를 했을 떄 4만개가 넘었는데요. 여기서는 34388개이네요

여기서도 조금 차이가 있죠?



그리고 같은 모델 모형으로 훈련 시켰는데 72%의 성능이 나오네요


이 데이터 셋은 띄어쓰기도 잘 안되어 있고 은어 등이 많은 데이터 셋입니다.

그리고 음 mecab이 잘 나올 수 밖에 없는게 mecab은 제가 예전에 사용자 정의 사전(user dic)을 만들어 놓은것도 있어서

 성능차이가 있을겁니다.(네티즌들이 사용하는 단어들도 많습니다)

불공평한 싸움이죠. 아마 카카오 형태소 분석기에서도 사용자 정의 사전이 나오게 되면 좀 더 퍼포먼스가 올라가지 않을까? 싶습니다.

(그럼에도 불구하고 뉴스 데이터 셋에서는 성능이 비슷했죠)


그래서 다양한 데이터 셋으로 해보시면 좋을 것 같네요.

아마 case by case이지 않을까 싶습니다.


이번 후기는 여기까지 입니다.

결론은 mecab이 속도가 더 빠르다 입니다.

성능은 검증이 더 필요할 것 같네요. 개인적으로 하다보니 데이터가 많이 없어서 ㅠㅠ

이상으로 간단 후기를 마칩니다.

감사합니다.

0 Comments
댓글쓰기 폼