[NLP] Seq2Seq(Sequence-to-Sequence)

2023. 11. 6. 17:04ML&DL/NLP

자연어 처리

- 자연어 처리는 크게 자연어 이해(NLU)와 자연어 생성(NLG)의 영역이 있음

- 자연어 생성은 기계가 텍스트를 스스로 생성하는 영역을 말함

 

 

 Seq2Seq(Sequence-to-Sequence)

- 입력된 시퀀스로 부터 다른 도메인의 시퀀스를 출력

- 인코더와 디코더로 구성되어있음.

- 인코더는 NLU, 디코더는 NLG에 유리함.

 

ex) 챗봇, 기계 번역, 텍스트 요약

 

 

 

번역 예시

- Seq2seq 는 인코더와 디코더 모듈로 구성

- 입력 데이터를 인코더에 입력 받고 컨텍스트 벡터라는 단어 정보들의 압축한 벡터를 만듦

- 디코더는 컨텍스트 벡터를 받아 번역된 단어 출력

 

Seq2seq 의 알고리즘

* Greedy Decoding

- seq2seq의 디코더는 기본적으로 RNN 언어 모델 => 가장 높은 확률을 가진 단어를 선택한다.

- 매 시점 가장 확률이 높은 것을 선택하는 것이 Greedy Decoding

- 최적의 선택이 아닐 수 있음

- 잘못된 선택이라도 취소 못함

 

* Beam Search 

- 매 시점마다 가장 확률이 높은 k개의 다음 단어를 선택하고, 다음 시점 단어들의 확률 예측

- Greedy Decoding 이 놓칠 수 있는  최적의 해를 구할 수 있음.

 

 

- 디코더는 매 스텝마다 정답일 확률이 높은 k개의 선택지를 추적 (가설)

- k는 보통 5 ~ 10 크기를 가짐.

- <eos> 만난 경우가 k개가 될 때 까지 반복함.

 

Subword Tokenization

- bert 같은 pre-trained 모델이 사용하는 토큰화 방식

* BPE(Byte Pair Encoding)

- OOV 문제(vocab에 없는 단어가 나타날 때 생기는 문제)를 완화하는 대표적인 subword 분리 알고리즘.

- 자주 등장하는 Byte Pair는 새로운 Byte가 된다. => 새로운 단어를 대처하는 방법

 

Seq2seq 의 문제점

- 고정된 크기의 벡터에 모든 정보를 압축하다보니 정보 손실이 발생

- RNN의 고질적인 문제 기울기 소실 (vanishing gradient) 문제 발생

 

Attention

- Seq2seq의 문제점을 보완해줌.

- 번역 문장을 만들 때 기존 문장에서 중요한 부분에 가중치를 두는 것

- 디코더에서 출력 단어를 예측하는 매 시점마다. 인코더의 입력 문장을 참고하는 것

- 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분에 중점을 두는 것

 

 

- Attention(Q, K, V) = Attention Value

- key -value 

- Attention 함수는 주어진 쿼리에 대해서 모든 key와의 유사도를 구함. 그리고 키와 맵핑되어있는 value에 유사도를 반영해줌.

=> 이를 Attetion value 라고 함