네이버 번역기, 어디까지 왔니?

가 +
가 -

번역기를 욕할 때가 많습니다. 보통 영한번역을 많이 활용하고자 하는데 제대로 번역해 준 적이 없기 때문입니다. 그래서 기껏해야 일일이 단어를 찾기 귀찮을 때 한 번에 단어의 의미를 찾아두려고 사용하는 정도입니다. 그마저도 요즘에는 마우스 오버를 하면 단어 뜻을 띄워주는 크롬 웹앱을 쓰기 때문에 사용하지 않습니다. 네이버 번역기를 개발하고 있는 네이버랩스 김준석 부장에게 물었습니다. “번역기는 언제쯤 쓸만해 질 수 있을까요?”

navertranslation3

네이버랩스 김준석 부장

번역기는 어떻게 개발할까?

기본적으로 번역기는 학습데이터를 수집 및 가공해서 이 데이터를 토대로 통계적 모델을 학습함으로써 개발합니다. 공부할 자료를 컴퓨터에게 많이 주고, 스스로 공부하게 한 다음, 공부한 바를 바탕으로 번역기가 새로운 문장을 보더라도 번역할 수 있는 능력을 키워주는 것입니다.

학습데이터란 컴퓨터가 보고 공부할 자료입니다. 최소 300만 문장은 있어야 제대로 된 학습이 가능합니다. 학습데이터는 다양한 방식으로 얻을 수 있습니다. 기본적으로는 업체에 의뢰해서 받는 데이터가 가장 많습니다. 전문 번역 업체에 돈을 주고 사는 거죠. 사전 예문도 큰 부분을 차지합니다. 길진 않지만 깔끔한 번역이라 좋습니다. ‘지식iN’도 활용합니다. 어학·외국어 부분에 사용자들이 올린 번역 관련 질문과 답변을 분석하고 정제해서 학습데이터로 사용할 수 있는 문장을 추출합니다. 지난해부터 시작한 참여번역 서비스도 도움이 됩니다. ‘라인’ 번역봇의 데이터도 활용합니다. 다만 사용자의 사생활 정보를 보호하기 위해서 번역기마다 호출 빈도수가 높은  로그값을 활용하는 방식입니다. 네이버 측은 구체적인 데이터의 양은 번역기 모델의 핵심이기 때문에 말해줄 수 없다고 밝혔습니다. 다만 한국어 DB는 많이 확보하고 있다고 밝혔습니다.

모델을 구성하고 컴퓨터에게 정제된 학습 데이터를 던져줍니다. 그리고 이후 사용자의 피드백을 받고 보완하면서 번역기의 품질을 향상하는 게 기본적인 구조입니다.

통계적 모델 기반 번역(SMT, Statistical Machine Translation)은 지금도 사용하고 있는 방법입니다. 기본적으로는 단위마다 번역해서 조합하는 방식입니다. 단위는 단순히 단어가 아니라 구(Phrase) 형식을 기반으로 합니다. 구를 기반으로 하면 더 나은 번역 품질을 얻을 수 있습니다. 예컨대 ‘eat apple = 사과를 먹다’라고 저장해두는 것입니다. 숙어 등을 번역할 때 유용하달까요? 여기서 조금 더 발전한 방식이 ‘계층적 구 기반 방식’입니다. 기존의 구 기반 방식에서 ‘eat apple=사과를 먹다’, ‘eat banana=바나나를 먹다’, ‘eat grape=포도를 먹다’ 처럼 저장되던 것을 ‘eat X = X를 먹다’로 표현해서 훨씬 더 많은 대역관계를 나타낼 수 있게 만드는 겁니다.

이렇게만 해도 한국어-일본어처럼 어순이 비슷한 언어는 일상생활에 불편함이 없을 정도로 번역할 수 있습니다. 하지만 한국어-영어처럼 어순이 다른 경우에는 올바른 배열 조합을 찾아야 합니다. 구별로 번역은 했는데, 이걸 어떻게 조합해서 멀쩡한 문장을 만들어내는가 또한 문제입니다.

문제를 해결하기 위해서 사전 순서 변경(pre-reordering)을 거칩니다. 번역하고자 하는 언어의 어순과 유사하게 바꾸는 겁니다. 예컨대 ‘나는 사과를 먹는다’라는 문장이 있으면 이를 ‘나는 먹는다 사과를’로 변형한 뒤 ‘I eat apple’로 바꾸는 방식입니다.

NMT란?

NMT(Neural Machine Translation)는 인공 신경망 기계 번역이라는 뜻입니다. 단순하게 이야기하자면 문장 전체를 넣어서 번역하는 방식입니다. 핵심은 단어 표현(워드 임베딩, word embedding)입니다. 단어 표현이란 하나의 단어를 인공신경망을 이용하여 벡터 공간상에 나타낼 수 있는 값으로 변환하는 걸 의미합니다.

입체의 공간이 있다고 가정해 보겠습니다. 먼저 ‘먹다’라는 단어를 공간에 띄워둡니다. 그리고 그 근처에 ‘먹었다’, ‘먹을 거다’, ‘먹고 싶다’ 등 ‘먹다’라는 단어와 관계가 있는 단어들을 유사한 공간에 두는 것입니다. ‘먹다’라는 단어에는 다양한 차원이 있을 수 있습니다. 이 차원에 따라 또 다른 단어들과 관계를 맺을 수 있습니다. 예컨대 치킨, 피자, 케이크 등 ‘먹다’와 함께 쓰일 수 있는 단어들이 또 ‘먹다’와 나름의 관계를 맺고 공간 상에 위치할 수 있다는 의미입니다. 이렇게 단어나 구 등이 공간에서 관계를 맺으며 매핑이 됩니다. 이때 가지는 벡터값을 ‘단어표현’이라고 합니다. 번역기에 사용되는 단어는 200차원의 단어표현 값으로 변환됩니다.

단어표현의 기본 개념을 가지고 다음 그림을 보겠습니다.

 navertranslator

‘나는’, ‘사과를’, ‘먹는다’, ‘I’, ‘eat’, ‘apple’은 각각 단어표현값으로 변환됩니다. 그리고 이 단어표현들을 이어가며 번역하려는 문장에서 결과문장으로 이어주는 최적의 가중치(weight parameter)들을 찾아 행렬 곱으로 이어가며 벡터를 구해가는 방식입니다. 여기서 번역하려는 문장과 결과 문장을 컴퓨터에게 주고, 결과문장이 나오게 하는 값을 찾아내는 최적의 가중치(WP)를 반복적인 기계학습을 통해 자동으로 학습하는 방식입니다. 번역은 EOS(문장의 끝, end of sentence)값이 가장 높아지면 끝납니다. 번역 언어가 달라질 때마다 가중치 값이 바뀝니다.

더 읽어보세요!

NMT 방식은 SMT에 비해서 번역 시스템이 단순하다는 장점을 가집니다. 입력문장과 출력문장만 있으면 알아서 학습하게 만들기 때문에 구조 자체가 그렇게 어렵진 않습니다. 다만 학습 시간이 다소 오래 걸릴 수는 있는데 이 문제를 해결하기 위해 병렬 처리 등의 방식을 사용합니다. 번역기에서 NMT방식을 활용하는 것은 거의 테스트가 끝났습니다. 서비스에의 적용을 고민하는 단계입니다.

기본적인 구조는 어떤 언어든지 같습니다. 다른 언어로의 번역을 지원하기 위해서는 해당 언어의학습 데이터로 사용될 번역 데이터만 있으면 됩니다. 여기에 언어별 특성을 반영하기 위해 추가적인 조작이 들어가는 수준입니다. 김준석 부장은 “언어 전문가를 채용해서 도움을 받고 있다”라고 밝혔습니다.

이런 복잡한 구조를 가진 번역기의 성능은 현재 어느 정도이고, 언제쯤 쓸만해질까요? 언어에 따라 번역 수준이 다릅니다. 어순이나 구조의 영향이 있기 때문입니다. 김준석 부장은 “일본어 번역은 짧든 길든 충분히 실생활에서 사용할 수 있는 수준이고, 중국어도 짧은 경우는 쓸만하다”라고 밝혔습니다. 다만 영어 같은 경우는 아직 짧은 것도 품질이 좀 아쉬운 상황입니다. 그중에서 한영번역은 영한번역보다 좀 더 나은 성능을 가지고 있습니다. 네이버의 한영번역은 꽤 높은 품질을 보여줍니다. 꾸준히 데이터를 확보해서 번역품질을 올리겠다는 게 네이버의 계획입니다.

navertranslator111

저번에 쓴 기사를 번역해 봤습니다. 생각보다 괜찮습니다.

네이버가 번역기의 성능을 높이려는 이유는?

꾸준한 기술 경쟁력 제고의 결과로 네이버 번역기는 ‘2015 아시아 번역 품질 평가 대회’(Workshop on Asian Translation) 한국어-일본어 번역기 분야에서 1등, 영어-일본어 번역기 분야에서는 3등을 차지하는 성과를 기록했습니다. 단순히 번역기의 성능만 높이는 데 초점을 두고 있지 않습니다. 라인 번역봇, 라인 딕셔너리 등 서비스의 다양화는 물론, 지원하는 언어 수도 늘려가고 있습니다. 네이버 관계자는 “연말까지 15개의 언어를 지원하는 게 목표”라고 밝혔습니다. 포털 사이트인 네이버는 왜 번역기의 성능을 끌어올리려고 할까요? 네이버의 향후 성장 전략이 ‘글로벌’에 맞춰져 있기 때문입니다.

김준석 부장은 “우리나라 쇼핑몰을 중국에 소개할 때도 번역이 필요하다”라며 “빠르게 웹번역을 통해 보여줄 수 있어야 한다”라고 밝혔습니다. 또한 “라인의 번역봇 같은 경우도 좀 더 글로벌한 서비스로 발전시키기 위해 필요하다”라고 밝혔습니다.