본문 바로가기

자연어처리

Seq2Seq - 입력과 출력

Seq2Seq(Sequence to Sequence)

seq2seq 모델은 입력으로 받은 시퀀스를 출력으로 다른 시퀀스를 보여줍니다.

특히, 입력 시퀀스와 출력 시퀀스가 1:1이 아니더라도 가능합니다.

RNN 계열을 활용하여 설계된 아키텍처입니다.

 

그래서 아래 기계번역 예시처럼 불어 3어절이 영어 4어절로 번역되는 것을 볼 수 있습니다.

기계번역 태스크 뿐만 아니라 챗봇, 요약, 음성인식 등 여러 자연어 처리 태스크에서 좋은 성능을 보여줬습니다.

 

jalammar_blog

인코더와 디코더

seq2seq는 크게 인코더와 디코더로 구성됩니다.

아래 예시에서 인코더는 영어 문장의 표상을 불어 문장의 디코더로 나타나는 것을 볼 수 있습니다.

인코더는 문장의 각 토큰들을 순서대로 입력으로 받고 이를 총 합쳐서 context-vector를 만듭니다.

이렇게 압축된 context-vector를 디코더로 넘어갑니다.

디코더는 압축된 벡터를 받아서 불어로 번역하면서 결과를 출력합니다.

greedy inference

이때, 디코더는 greedy inference로 출력을 예측할 때, 스텝에서 가장 높은 가능성을 가진 단어를 선택합니다.

탐색의 속도가 빠르나 최종 출력의 정확도가 떨어집니다.

반면에, beam search는 정확도가 높으나 가능한 모든 스텝들의 가능성을 계산하다보니 속도가 느립니다.

 

seq2seq 한계

인코더에서 문장을 context vector로 압축하지만, 문장이 길어지면 성능이 떨어집니다.

이전 time step을 가지고 있어 보이지만 손실이 일어나기 때문입니다.

그리고 디코더의 time step은 이러한 인코더의 임베딩에 의존되는 것이 한계입니다.

 

 

Seq2seq 모델을 이용한 한국어 의존 구문분석 파서와 자연어 생성 관련 페이퍼입니다.

민진우, 나승훈(2016)은 seq2seq와 포인터 네크워크를 한국어 의존 파서에 적용하기 위해 입력열과 출력열을 모델에 맞추어 설계했습니다.

 

민진우, 나승훈(2016), Sequence to Sequence 모델을 이용한 한국어 의존 파싱

민진우, 나승훈(2016)
포인터 네트워크

 

seq2seq 모델의 인코더에서 입력 문장을 2개의 GRU를 이용하여 양방향으로 문장을 읽습니다.

RNN을 활용했던 seq2seq 모델과 다르게 LSTM, GRU를 이용한 seq2seq 아키텍처도 가능함을 알 수 있습니다.

 

또한, 포인터 네트워크(pointer network)는 어텐션 매커니즘을 이용하여 입력열에 해당하는 위치를 출력하는 RNN 계열의 확장 모델로 seq2seq 변형이라고 볼 수 있습니다.

 

정리하면, seq2seq 모델이 입력으로 형태분석 시퀀스를 받아서 구문 분석 트리 시퀀스를 출력합니다.

그리고 포인터 네트워크가 트리 시퀀스에 의존 관계 레이블을 결정하게 됩니다. 

 

어텐션을 아직 다루지 않았지만, seq2seq가 RNN을 기반으로 많은 변형과 활용이 되는 것을 알 수 있었습니다.

 

Reference

http://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

 

Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

Translations: Chinese (Simplified), Japanese, Korean, Russian, Turkish Watch: MIT’s Deep Learning State of the Art lecture referencing this post May 25th update: New graphics (RNN animation, word embedding graph), color coding, elaborated on the final at

jalammar.github.io

김기현의 자연어처리 딥러닝 캠프(2019)