딥러닝 한글 자동띄어쓰기 모형 성능 향상 및 API 업데이트

1차 모형과 띄어쓰기 정확도 성능 차이

테스트 셋 1차 모형 2차 모형
세종 코퍼스 94.8% 97.1%
구어체 코퍼스 93.2% 94.3%

성능 측정방식은 코퍼스 내 문장별로 모든 띄어쓰기를 제거하고 넣었을때 올바르게 띄어쓰기가 되는지 여부를 측정한 것이다. 세종 코퍼스 1만 문장, 구어체 코퍼스 3만 문장으로 테스트 했다. 그리고 모형 학습은 박찬엽씨가 공유해준 뉴스 코퍼스 1억 문장 기반으로 했다.

금번 API 업데이트의 핵심은 물론 정확도 향상이다. 몇몇 레이어의 추가가 핵심적인 역할을 수행했다.

딥러닝 아키텍처라는게 일종의 “어떠 어떠한 패턴을 뽑아줄 수 있을 것이다”라는 가능성을 내포하는데, 몇몇 실험을 통해 그 가능성을 크게 해준게 효과적으로 적용되었던 것으로 본다.

GPU 두장을 거의 이틀에 하루꼴로 구동시키며 실험했는데, 이를 통해 얻은 경험치는 아래와 같다.

  1. 될성부른 모형은 초기 epoc 성능부터 다르다.
  2. 데이터를 더 많이 넣을 수 있는 구조는 결국 추가적인 코드 작업을 부른다. 하지만 딥러닝에서 많은 데이터는 축복과 같은것…
  3. 데이터를 버려도 될 정도로 많으니 overfitting 방어는 거의 필요 없게 되네..
  4. 성능 추이에 대한 모니터링은 텔레그램 봇을 통해서 받자. 나중에 잡 kill 명령도 텔레그램 봇으로?
  5. CuDNNGRUmulti_gpu_model이 아직 정식 릴리즈 되지 않았지만 시행착오를 빨리하는데 큰 도움이 되었다.

API의 호출방식은 달라진게 없고, 이 함수패키지를 활용하면 쉽게 가능하다. Python에서 호출하고 싶다면 필자의 포스트를 참고하면 된다.


그동안 이 API를 둘러싸고 많은 흥미로운 일이 있었다.
일단 이 API 호출을 하게 되면 서버에서 로그를 남기게 해두었다. 입력과 출력에 대한 로그이며, 이 로그는 사용자의 요구사항을 엿들어 볼 수 있는 일종의 창구 역할을 하고 있는데, 상당수의 로그가 영화리뷰에 대한 로그였다. 아무래도 네이버 영화 리뷰 분석을 많이들 하시니 그 영향이 아닌가 싶기도 하고…

흥미롭게도 대부분의 리뷰는 띄어쓰기를 별도 하지 않아도 될 리뷰였으나, 몇몇 리뷰의 경우 아래와 같이 필요한 리뷰였다.

sent : 그만해라 야붕이들아ㅠ
corrected : 그만해라 야 붕이 들 아ㅠ

sent : 이게영화냐이게영화냐이게영화냐
corrected : 이게 영화냐이게 영화냐이게 영화냐

위에 보다시피 잘 정제되지 않은 인터넷 은어와 구어체 표현에 엔진이 취약한 것을 알 수 있었다. 물론 이 부분은 당연한 부분이다. 왜냐하면 딥 뉴럴넷 모형은 위와 같은 학습셋을 본적이 없기 때문이다. 따라서 인터넷 용어 및 구어체 표현에 대한 띄어쓰기 성능은 앞으로 개선이 되어야 될 부분이라 생각하는데, 이를 위해서 양질의 학습셋을 어떻게 구하는가 하는 문제가 남아 있다. 사용자가 이러한 전처리를 하는게 뒷단에 형태소 분석기를 구동시키기 위함인데, 올바르게 띄어쓰기를 해주더라도 형태소 분석기가 저러한 문장을 잘 처리할지도 걱정이긴 하다.

필자가 구한 구어체 표현들로 평가해본 결과 문어체에 비해서 약 1%정도의 성능 저하가 나타나는걸 볼 수 있었는데, 아마도 체감으로는 더 클거라 생각한다. 왜냐하면 상대적으로 인터넷에 존재하는 구어체에는 신조어/은어들이 예상보다 많이 등장하기 때문이다.

API 공개 후 이틀만에 이 API를 이용한 kospacing 패키지가 등장했다. 물론 이 패키지 이전에 이미 함수를 만들어 공개한 분도 있었다. 그만큼 자동화된 한글 띄어쓰기 패키지에 대한 열망이 있었다고 생각이 들며, 이번 API 공개를 통해 더 훌륭한 공개 패키지들이 많이 등장했으면 하는 바램이 있다.

초반 구글 클라우드에서 Flask 기반으로 REST API 서버를 구성했는데(python 웹서버 기반), 잦은 서버 다운으로 몇일 고생을 좀 하다가, nginx, uwsgi, flask 조합으로 아무런 문제없이 운영하고 있다. 하지만 클라우드 서버 인스턴스를 가장 저렴한걸로 해놔서 많은 트래픽이 유입될 시 문제가 될 소지는 있다.

이 띄어쓰기 엔진은 keras + tensorflow 기반으로 학습되었다. 이를 R 패키지로 만드는건 아직은 다소 어려운 이슈이다. R 패키지로 만들기 위해서는 keras, tensorflow, Python 등 수많은 필요 외래 패키지가 필요한데, 이런 구조로 공식적인 패키지로 등록이 거의 불가능하기 때문이다. 그래서 찾아보고 있는게 Cpp로 모델을 포팅하는 모듈인데, 아직 쓸만한 모듈을 찾지 못한 상황이다. Model as a Program이 일반화 되기에는 시기상조이지 않을까 하는 생각이 먼저든다.

장기적인 계획은 이 모형을 R, Python 패키지 내에 포함시키는 적절한 방식을 찾아내 REST API가 아닌 stand-alone으로 동작하게 하는것이다. 하지만 그 방식을 빨리 찾을 수 있을것 같지는 않아 보인다.

CC BY-NC 4.0 딥러닝 한글 자동띄어쓰기 모형 성능 향상 및 API 업데이트 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.