작성자 : 투빅스 13기 김민정
Contents
- Decoding Algorithm
- Neural Summarization
- Copy Mechanisms
- NLG Using Unpaired Corpus
시작하기 전에 NLG가 무엇인지 살펴보겠습니다.
NLG란 주어진 input x에 대해 새로운 text를 생성해내는 작업입니다.
기계 번역, 요약, 채팅, 스토리텔링, QA 등이 있습니다.
적절성, 유창성, 가독성, 다양성을 골고루 만족하는 경우 자연어를 잘 생성한다고 말할 수 있습니다.
지금까지 공부했던 LM을 학습한 후에 어떻게 NLG에 적용할 수 있냐는 질문의 답변으로 Decoding Algorithm을 제시할 수 있습니다.
이때, 가장 가능성이 높은 출력 시퀀스를 디코딩하는 것이 아니라, 최대한 가능성이 높은 출력 시퀀스를 디코딩하는 것입니다. vocab의 크기가 어마어마하게 큰 경우에는 완전 탐색을 하는 것이 어렵기 때문에 휴리스틱한 탐색 방법인 Decoding Algorithm을 사용하자는 것입니다.
1) Greedy Decoding
첫 번째로, Greedy Decoding입니다. Greedy Decoding은 각 출력을 예측하는데 매 스텝에서 가장 가능성이 높은 단어 한 개를 선택합니다. 이때, argmax를 사용합니다. 매 스탭마다 한 개만 선택하면 되기 때문에 탐색하는데 매우 빠릅니다. 하지만 어떤 스텝에서 실수를 하는 경우에 그 실수가 해당 스텝 이후의 단어를 선택하는데 까지 영향을 미치기 때문에 최종 출력 결과가 좋지 않을 수 있다는 단점이 있습니다.
2) Beam Search
두 번째로, Beam Search입니다. Beam Search는 k개의 가능한 가설들을 두고 가장 높은 확률을 갖는 문장을 찾아 나가는 방식입니다. 이때 k는 beam size를 의미하는 하이퍼 파라미터이며, k=1인 경우 Greedy Decoding과 동일하기 때문에 Greedy Decoding의 확장된 형태라고 볼 수 있습니다.
위의 예시에서는 k=2인 경우로, 각 스텝에서 가장 확률이 높은 2개씩만 고려했습니다. 누적 확률을 크게 하는 단어들을 따라서 문장이 생성됩니다. 파란색 숫자는 확률(0과 1 사이)에 로그 값을 취한 형태이기 때문에 음수 값을 가지며, 절댓값이 작은 단어를 따라서 문장이 생성됩니다.
그렇다면 Beam Search에서는 k(beam size)를 어떻게 고를까요? k(beam size)에 따른 결과를 살펴봅시다.
3) Sampling-based decoding
세 번째로, Sampling-based decoding입니다. Beam Search에서 큰 k(beam size)를 가지더라도 너무 일반적인 답변을 얻지 않기 위한 방법입니다.
Pure Sampling과 Top-n Sampling이 있습니다.
Pure Sampling은 Greedy Decoding과 비슷하지만, argmax 대신 sampling을 사용합니다.
Top-n Sampling은 Pure Sampling처럼 완전하게 랜덤 샘플링을 하는 것이 아니라 확률이 가장 큰 n개의 단어들 중에서 랜덤 샘플링을 하는 것입니다.
요약(Summarization)이란 주어진 input x에 대해, x의 주요 정보를 포함하는 요약된 y를 생성해내는 작업입니다.
크게 Extractive Summarization과 Abstractive Summarization이 있습니다.
Extractive Summarization이란 문서 내에서 핵심이 되는 문장을 추출하는 것으로, 비교적 쉽지만 제한적인 요약 결과를 얻게 됩니다.
Abstractive Summarization이란 문서의 중요한 내용을 담은 새로운 문장을 생성하는 것으로, 보다 유연한 결과를 얻을 수 있지만 비교적 어렵습니다.
이후에 다룰 Neural을 적용한 요약(Summarization)은 Abstractive Summarization입니다.
왼쪽 예시를 보면 원문에서 요약된 결과가 문장 그대로를 추출하는 것이 아닌, 새로운 문장을 생성해냄을 확인할 수 있습니다.
평가 지표인 ROUGE를 BLEU score와 비교하여 살펴보겠습니다.
Neural 이전의 요약 시스템은 대부분 추출(extractive)방식입니다.
Copy Mechanisms을 seq2seq과 함께 사용해서 디테일을 잡아내고자 했습니다. Attention에서 copy를 더 잘할 수 있도록 처리한 것입니다.
지금까지는 input에 대응하는 output을 미리 준비한 후에 학습시키는 지도 학습에 기반하고 있습니다. 예를 들어 '오늘 날씨 알려줘'에 대응한 출력 문장인 '오늘 비가 올 것 같아요'와 같은 쌍을 준비하여 학습합니다.
그러나 이러한 방법의 문제는 입력-출력 쌍의 데이터를 대량으로 요구한다는 것입니다. 고성능의 자연어 생성 시스템을 만들기 위해 그 훈련에 필요한 말뭉치의 확보부터가 현실적으로 매우 어렵습니다.
따라서 이러한 한계점을 돌파하기 위해 Unpaired corpus를 활용한 비지도 학습이 등장합니다.
인공신경망이 반드시 학습해야 하는 핵심적인 포인트들을 정리해보겠습니다.
1) 어떤 스타일의 문장이 들어오더라도 그 스타일에 의존적이지 않는 본질적인 의미를 Latent vectors의 형태로 인코딩해야 한다.
2) 인코딩된 Latent vectors가 주어졌을 때, 각 스타일에 해당되는 디코더는 해당 스타일의 문장을 생성할 수 있어야 한다.
인공 신경망은 Autoencoder loss와 Cycle loss를 최소화하는 방향으로 학습합니다.