본 내용은 '김기현의 자연어 처리 딥러닝 캠프(한빛미디어)'를 정리한 내용입니다.

 

"기계 번역의 성능을 어떻게 향상 시킬 수 있을까?"

 

* 학습 목표 : 기계번역의 성능을 높이기 위한 기법들(제로샷, 단일 언어 코퍼스 활용, 트랜스포머)


1. 다국어 신경망 번역

1) 제로샷 학습

- 제로샷 학습 : 전이학습(Transfer Learning)에서 발전된 기계학습의 한 종류

  *제로샷 학습 : 데이터 간 관계와 공통점을 통해 정답 발견. 예를 들어, 문제 A의 정답이 B,C,D 문제에도 존재할 경우, 인공지능이 문제들의 관계를 분석해 공통점을 파악하고 그것을 중심으로 문제의 정답을 찾는 것. 데이터가 풍부하지 않은 분야에서 유용

기존에 오카피를 본 적 없는 신경망이라도, 얼룩말/사슴 문제에서 학습된 특징으로 오카피를 분류할 수 있다https://m.blog.naver.com/with_msip/221886769247 과학기술정보통신부 블로그

  • 훈련 데이터에서 상당히 누락될 수 있는 드물고, 익숙하지 않고, 보이지 않는 객체의 즉각적인 인식
  • 매우 높은 수준의 전문 지식으로 분류된 훈련 데이터를 얻기 어려운 패턴 인식
  • 세분화된 카테고리의 확산으로 인해 통계적으로 다양한 분류된 훈련 데이터를 충분한 양으로 획득하기 어렵거나 엄청나게 비싼 객체 클래스의 인스턴스를 탐지하는 것

제로 샷 학습을 가능하게 하는 것은 통계적 또는 의미적 접근법을 통해 발견하고 용도를 변경할 수 있는 사전 지식의 존재다. 제로 샷 방법은 이 지식을 사용해(훈련해) 본 인스턴스(훈련 데이터에 있는 인스턴스)와 보이지 않는 인스턴스(훈련 데이터에 없는 인스턴스)를 모두 포함하는 특징(feature)을 예측

(ITworld 20.03.04 http://www.itworld.co.kr/news/145802#csidx4add731da3359c2b96936c9de33177a )

 

- 구글 번역 시스템에 제로샷 활용

'구글 다중 인공신경망 기계번역 시스템:제로샷 번역 활용

(Google’s Multilingual Neural Machine Translation system:Enabling Zero-Shot Translation Enabling Zero-Shot Translation)'

 

"다중 언어들 사이 번역을 위한 단일한 NMT 모델을 사용하면서 모델 아키텍처를 변경할 필요없이 인공 토큰을 입력한 문장을 붙이는 방법으로 필요한 언어로 번역할 수 있게 했다

 

구글 인공신경망 기계번역(GNMT)에 제로샷 활용. 이전에 학습하지 않았던 언어쌍도 번역 가능https://zdnet.co.kr/view/?no=20170302163740

 

영-한, 영-일 언어쌍에 대한 번역 기술을 갖춘 상태에서 한국어를 일본어로 바꾸기 위해 한국어에 특별한 꼬리표를 달면 알아서 한국어를 영어로 번역한 뒤 다시 일본어로 번역해주는 과정을 거친다.

 

제로샷 번역은 이 덕분에 여러 언어가 섞여 있는 경우에도 번역을 해낸다.

 

  • Japanese: 私は東京大?の?生です。 → I am a student at Tokyo University.
  • Korean: 나는 도쿄대학의 학생입니다. → I am a student at Tokyo University.
  • Mixed Japanese/Korean: 私は東京大?학생입니다. → I am a student of Tokyo University.

 

- 여러 언어쌍의 병렬 코퍼스를 하나의 모델에 훈련하면, 학습에 참여했지만 코퍼스에 존재하지 않는 언어쌍도 번역이 가능

- 구현 방법 : 기존 병렬 코퍼스의 앞에 특수 토큰 삽입하고 훈련! 

  ex> 기존 : Hello -> Hola / 제로샷 : <2es> Hello -> Hola

 

<실험 목표>

1) 다국어 신경망 머신러닝의 end2end 모델 구현할 수 있는가?

2) 서로 다른 언어쌍의 코퍼스를 활용해 번역기의 모든 언어쌍에 대해 전체적인 성능을 올릴 수 있는가?

 

Many to One : 전체적으로 성능 향상

- 다수 언어에서 하나의 언어로. 다수 언어를 인코더에 넣고 훈련

- 동시에 훈련된 다른 언어의 데이터셋을 통해 해당 언어의 번역성능을 높일 수 있음

 

One to Many : 향상되었다고 보기 어려움

- 하나의 언어에서 다수 언어로. 다수 언어를 디코더에 넣고 훈련

 

Many to Many : 대부분 성능 하락

- 다수 언어에서 다수 언어로. 다수 언어를 인코더, 디코더에 모두 넣고 훈련

- 다양한 언어쌍을 하나에 몰아 넣고 훈련한 것치고는 절대적 BLEU 수치는 쓸만하지만 하락

 

제로샷 번역 : 제로샷 모델 + 기존 모델 시 성능 우수

- 병렬 코퍼스의 양이 얼마 되지 않는 언어쌍의 번역기를 훈련할 대는 이러한 방법을 통해 성능을 끌어올릴 수 있음

 

-> 다국어 기계번역 모델로서는 의의가 있지만, 성능 측면에서는 큰 이득이 없어 실제 사용에는 한계가 있음

 

- 단, 합성 토큰을 추가하는 방식 응용 가능

  ex> 번역문의 말투 변경(뉴스기사 코퍼스/미드 자막 코퍼스, 문어체/대화체로 도메인을 나누고 특수 토큰을 추가)

        의료용/법률용 등

 

2. 단일 언어 코퍼스 활용하기

- 병렬코퍼스보다 단일 언어 코퍼스를 얻는 것이 훨씬 쉬움
- 단일 언어 코퍼스의 양이 많기 때문에 우리가 사용하는 언어의 확률 분포에 더 가까울 수 있음

 

1) 언어 모델 앙상블(by. Yoshua Bengio)

- shallow fusion : 두개의 서로 다른 모델 사용
- deep fusion : 언어 모델을 seq2seq에 포함시켜 end2end 학습을 통해 한 개의 모델로 만듦

 

 

 

2) 더미 문장 활용(by. Rico Sennrich)

- 디코더가 단일 언어 코퍼스를 학습하도록 하는 방법 

  -> 인코더로부터 전달되는 정보들을 없애는 것이 핵심  

      ㅇ 소스 문장인 X를 빈 인력으로 넣기

      ㅇ 어텐션 등을 모두 드롭아웃하여 끊어줌
- 디코더가 단일 언어 코퍼스를 활용하여 언어 모델을 학습하는 것과 같음

 

3) 반대 방향 번역기 활용 Back Translation (by. Rico Sennrich)

- 기존의 훈련된 반대 방향 번역기를 사용해 단일 언어 코퍼스를 기계번역해 합성 병렬 코퍼스를 만든 후, 

  이것을 기존 양방향 병렬 코퍼스에 추가하여 훈련에 사용 

  (ex>  기존에 훈련된 한 -> 영 번역기에 기계번역해, 한영 합성 병렬 코퍼스를 만들고, 기존에 수집한 오리지널 한영 병렬 코퍼스와 합쳐서 영->한 번역기의 훈련에 사용)

- 번역기를 하나 만들면 하나의 병렬 코퍼스로 두 개의 번역 모델을 만들 수 있는데, 이 두개의 모델을 서로 보완하여 성능을 향상

- 단, 합성 병렬 코퍼스가 너무 많아지면 문제가 생길 수 있어 양을 제한해야 함

 

 

*end2end모델이란 중간의 특징 추출 과정없이 인풋과 아웃풋데이터만 넣어주면 알아서 학습하는 것을 말하는데, 하나의 end2end모델에서 여러 언어쌍 번역을 동시에 제공한다는 것은 한국어->영어만 넣어줘도, 한국어->독일어->영어의 효과를 나타낸다는 것을 의미함

 

4) 반대 방향 번역기 활용 없이 단일 언어 코퍼스 활용 Copied Translation

- 더미 문장 활용 방식에서 좀 더 발전
- 소스와 타깃에 동일 데이터를 넣어 훈련하는데 드롭아웃 하지 않아도 되는 장점 
- 보통 back translation과 함께 사용됨

 

-> 최근에는 구현의 용이성과 효율성으로 back translation과 copied translation이 가장 많이 쓰임

 

3. 트랜스포머

- 구글의 [Attention is all you need] 논문에서 제안됨

- (RNN없이) 어텐션 연산만을 활용해 seq2seq를 구현하면서 성능과 속도 두마리 토끼를 잡음

 

- 포지션 임베딩 : 단어의 위치/순서 정보를 부여. 단어 임베딩 벡터 차원과 같음. 포지션 임베딩과 문장 임베딩 행렬을 더하여 인코더/디코더의 입력으로 넘겨줌

   ㅇ RNN은 데이터를 순차적으로 받으며 자동으로 순서에 대한 정보를 기록하지만 트랜스포머는 RNN을 이용하지 않으므로 순서 정보를 단어와 함께 주어야 함

 

4. 마치며

- 데이터가 많을수록 좋겠지만, 병렬코퍼스는 수집이 어렵고 제한적임

  단일 언어 코퍼스를 활용해 번역 성능을 향상 시킬 수 있음

- 트랜스포머는 어텐션만을 사용해 seq2seq을 구현하여 성능과 속도를 모두 높일 수 있었음

 

 

*end2end모델이란 중간의 특징 추출 과정없이 인풋과 아웃풋데이터만 넣어주면 알아서 학습하는 것을 말하는데, 하나의 end2end모델에서 여러 언어쌍 번역을 동시에 제공한다는 것은 한국어->영어만 넣어줘도, 한국어->독일어->영어의 효과를 나타낸다는 것을 의미함

+ Recent posts