신경망 한영 번역기 코드 공개

딥러닝으로 구축한 한영 번역기 코드를 공개한다.

대부분 fixed length로 인코더 디코더를 구현하는 seq2seq 예제모형에서 좀더 나아가서 variable length를 인식해 학습이 되게끔 구현했다. 아마도 Gluon으로 해당 코드는 처음이지 않을까 한다.
모든 코드를 Symbol로 구현해 hybridize 모드로 학습이 될 수 있게끔 했고, 기본적으로 teacher forcing 방식으로 학습을 구성했다. 임베딩 학습도 다소 특이하게 한,영 단어를 모두 하나의 임베딩 매트릭스로 구성해 빠른 학습이 될 수 있도록 했다.

약 9만건의 학습셋은 기계번역기를 만들기 위한 학습셋으로 턱없이 부족하나, 어느정도 모형의 시작포인트는 만들었다고 자평하고 있다. 운이 좋아 수백만건의 학습 데이터를 확보할 수 있다면 좀더 발전시킬 수 있을 거라 예상한다.

이번 작업을 통해서 기계번역 모델링을 과거에 한번도 해보지 않았던 필자같은 사람도 딥러닝을 이용해서 한달여의 고군분투 끝에 만들어내게 하는 세상이 도래했다는데 개인적으로 큰 의미를 둔다. 딥러닝 덕분에 각 도메인 영역의 진입장벽이 낮아지고 있는건 어쩌면 기존 기술/경험을 가지고 있는 나같은 사람에게 불안감(본전생각)을 안겨줄 수 있으나 그런 생각 떨치고 항상 배우고 연마하는 자세로 살아야 된다고 생각한다.

번역 모형에 대한 코드레벨의 설명은 앞으로 출간될 마이크로소프트웨어에 수록하였으며, 출간 후 어느정도 시간이 지나면 블로그에 공개할 생각이다(항상 그래왔듯이…).  번역 모델링 한다고 몇주 주말동안 좋아하는 게임도 못하고 전기세만 축내면서 수도없이 GPU를 고문했는데 개인적으로도 상당히 좋은 경험이었다.

이정도 구현체라면 Keras에서 Gluon으로 넘어온 보람이 있다고 생각한다. 특히나 Attention 및 Variable Length 기반의 학습은 Keras로 구현하는건 상당한 난이도가 있는 작업이라는 생각을 해본다.

한달여 동안 퇴근 후 개발을 하면서 몇가지 경험적으로 얻은 부분을 정리하자면…

  1. 완성된 코드로부터 쓸만한 모형을 학습/도출하는데 전체 30% 이상의 리소스가 들어갔다.
  2. 실제 모델링 자체의 코드가 늘어나니 모델 개발이라는말이 과거처럼 학습 라이브러리에 정제된 속성/데이터만 넣는 작업과는 다른 차원의 의미로 다가온다. 이건 모델 알고리즘 개발인것이다.
  3. 이 다음부터는 양질의 데이터를 얼마나 많이 확보하느냐가 품질을 판가름할 것이다.
  4. 모델이 복잡해지니 모형에 대한 디버깅 경험/능력이 중요해진다. Tensor 기반의 코딩 능력에 대한 경험을 많이 쌓는것이 중요하다. 많이 고민하고 만들어보고 학습해보자!

 

 

 

 

CC BY-NC 4.0 신경망 한영 번역기 코드 공개 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.