1. 챗봇의 평가 지표
2. Meena chatbot
2.1. 데이터셋
2.2. 모델 구조
2.3. 디코딩
2.4. 추가 후처리
3. 정리
Meena는 Towards a Human-like Open-Domain Chatbot 논문에서 제시된 챗봇입니다.
1. 챗봇의 평가 지표
Meena에 대해 얘기하기 전에 챗봇의 평가지표에 대해 먼저 알아봐야 합니다. 대부분의 task는 정확도와 같이 측정하기 쉬운 확실한 평가지표가 존재합니다. 그러나 챗봇의 경우 정확도와 같은 평가지표를 적용하기 매우 어렵습니다. 대화에는 정답이 존재하지 않기 때문입니다.
그렇기 때문에 챗봇은 '얼마나 정확하게 학습 데이터와 같이 말을 하느냐' 하는 것보다는 '얼마나 사람처럼 말을 하느냐'가 더 중요할 것입니다. (일상 대화를 위한 챗봇이라는 가정 하에) 그러면 '사람처럼 말을 한다'는게 뭘까요? 이는 어떤 기준으로 모델 성능을 평가해야 할까요? 챗봇을 만드는 목표와 의도에 따라서 여러가지 기준을 세울 수 있을 겁니다.
Meena는 챗봇의 성능을 측정하기 위해 2개의 기준을 세웠습니다.
1. Sensibleness : 챗봇의 응답이 얼마나 말이 되는가를 평가합니다. 사람이 챗봇의 응답을 보고 '말이 된다.', '말이 안된다.' 2가지 중 하나를 선택하여 모델의 성능을 평가합니다.
당연히 기본적으로 상대의 질문에 알맞은 응답을 표현하는 것이 가장 중요하겠죠. 대부분의 챗봇에 적용 가능한 기준일 겁니다. 그러나 이 기준만 적용하기엔 문제가 있습니다. 사실 챗봇은 좋은 성능을 달성하려고 하면, 답변을 회피하거나(모른다고 하거나), 추상적이고 일반적인 답변을 하게 되는 문제가 있습니다. 이런 식으로 대답하면 어떤 상황에서도 말이 되는 반응을 할 수 있기 때문이죠. 그러나 사람들이 요구하는 챗봇은 이런 애매한 답변만 늘어놓는 챗봇은 아닐겁니다. 좀 더 자세하고 세밀한 반응을 보일수록 사람들이 챗봇에 흥미를 더 느낄 수 있을 겁니다. 그래서 Meena는 하나의 지표를 더 평가합니다.
2. Speicificty : 챗봇의 답변이 얼마나 세세한가를 평가합니다. 챗봇이 질문에 대해 답변을 회피하거나 일반적인 답변을 하지 않도록 답변이 얼마나 specific한지를 측정합니다.
Meena는 이렇게 2개의 평가 지표를 합쳐 SSA(Sensibleness and Speicificity Average)라는 평가 지표를 제시합니다. 사람들이 직접 평가한 Sensibleness와 Specificity 점수를 합친 뒤 평균을 내 하나의 점수로 내는 방법입니다. SSA는 2가지 방식으로 평가를 진행합니다.
- Static evaluation : 미리 지정된 대화를 수행한 결과를 보여주고 사람이 직접 SSA를 평가하는 방식.
- Interactive evaluation : 사람이 챗봇과 직접 대화를 하며 SSA를 평가하는 방식.
Static 방식의 경우 대화를 미리 뽑을 수 있기 때문에 빠른 평가가 가능합니다. 그러나 주제가 편향적일 수 있기 때문에 Interactive 방식으로 이를 보완합니다.
SSA 지표 자체는 괜찮은 것 같지만, 사람이 직접 평가해야 하니 빠르게 모델의 성능을 확인하기는 어려울 겁니다. 평가할 사람도 모아야 하고, 직접 평가하는데 시간도 오래 걸릴 거고... 정확도나 f1 score같이 컴퓨터로 바로바로 계산할 수 있으면 좋을텐데요. 챗봇의 성능을 자동으로 평가하기 위해서 사용되는 지표도 있습니다. Perplexity, BLEU score, ROUGE 등이 그 예시입니다. 이 지표들은 챗봇의 정확도와 유사한 지표로 컴퓨터로 자동적으로 계산하기 쉽다는 장점을 갖지만, 앞서 말한 '인간처럼 말한다.'와 같은 성능을 평가하기는 어렵다는 단점이 있습니다.
그러나 Meena에서는 perplexity가 SSA 점수와 밀접한 관계가 있단 것을 발견했습니다. Perplexity는 챗봇 모델이 다음 글자나 단어를 예측할 때 얼마나 많은 후보를 고려하는지를 측정하는 지표입니다. 상황에 알맞은 응답을 모델이 바로 알고 있다면 해당 상황에 알맞은 단어 몇 개만 고려하는 것이 더 합리적일 겁니다. 그래서 perplexity가 낮을수록 모델의 성능이 일반적으로 좋다고 생각할 수 있습니다. Perplexity(PPL)는 다음과 같이 쉽게 계산할 수 있습니다.
$$PPL=e^{CrossEntropyLoss}$$
당연히 ppl이 낮다고 무조건 성능이 좋다고 보기는 어렵습니다. 하지만 Meena의 연구 결과에 따르면, ppl이 낮을수록 SSA 점수가 높아지는 경향을 보인다고 합니다.
그렇기 때문에 '빠른 평가가 필요한 경우, ppl도 충분히 좋은 지표가 될 수 있다'라는 것이 Meena에서 제시하는 평가지표에 대한 또 하나의 기여점이라고 볼 수 있습니다.
2. Meena chatbot
2.1. 데이터셋
Meena의 데이터셋은 공개되어 있는 소셜미디어의 대화기록을 수집해 사용했습니다. 대화 기록은 7턴의 대화를 context라고 하고, 그 뒤의 응답은 response로 하여, Meena는 이 context를 보고 알맞은 response를 생성해낼 수 있도록 훈련됩니다. 데이터는 다음과 같은 정제 과정들을 거쳤습니다.
- Subword의 수가 2이하이거나 128이상인 문장.
- 알파벳 비율이 70%가 안되는 문장.
- URL을 포함한 문장.
- 유저 이름에 "bot"이 들어간 경우.
- 중복되는 내용이 100번 이상인 경우의 문장.
- 바로 이전의 발화와 겹치는 단어의 비율이 높은 경우.
- Commercial text classifier를 통해 걸러진 경우.
- 이전 메시지 내용을 그대로 인용한 경우 해당 인용문을 제거.
이런 과정을 거쳐 최종적으로 8억개 이상의 (context, response) 쌍을 확보했다고 합니다. 용량으로 치면 341GB정도라고 합니다. (비교를 위해, GPT-2의 경우 40GB, GPT-3는 570GB의 텍스트로 훈련되었습니다.)
2.2. 모델 구조
Meena 이전까지의 챗봇은 2가지 트렌드로 나눌 수 있습니다.
- 사람이 직접 디자인하는 복잡한 구조의 모델
- End-to-end로 학습하는 거대한 neural network
Meena는 end-to-end 방식으로 챗봇에도 최대한 큰 모델과 최대한 많은 데이터를 적용해보고자 하는 모델입니다.
모델 구조는 Evolved Transformer(Transformer 구조를 일종의 하이퍼 파라미터 탐색을 통해 발전시킨 형태)의 인코더-디코더 구조를 사용한다고 합니다.
인코더 블럭 수 | 1 |
디코더 블럭 수 | 13 |
attention head | 32 |
hidden size | 2560 |
파라미터 수 | 26억 |
2.3. 디코딩
생성 모델에 있어서 디코딩 방식도 양질의 문장을 생성하는데 매우 중요한 요소입니다. 디코딩 방식이란 생성 모델이 문장을 생성할 때 단어들을 선택하는 방식을 말합니다. 가장 간단한 방법은 'Greedy search'라고 하여 가장 probability가 높은 단어만을 선택하는 방식이 있습니다. Greedy search를 개선한 beam search 방식도 있습니다. Beam search는 가장 probability가 높은 상위 k개의 단어를 선택하는 방식입니다. 그러면 문장 길이 n에 따라 k^n개의 후보가 나타날 수 있는데, 이렇게 모든 후보를 보는 것이 아니라, 단어 probability의 합이 가장 큰 k개만 선정합니다.
Meena는 "Sample-and-rank" 방식을 사용합니다. 앞서 본 greedy search나 beam search의 경우, 가장 큰 probability를 갖는 단어 위주로 보기 때문에 문장이 다채롭지 않고 일반적인 답변만을 만들게 되는 문제가 있습니다. 따라서 좀 더 다채로운 표현력을 갖도록 하기 위해 random sampling 방식을 사용합니다. Random sampling 방식은 probability를 토대로 단어를 랜덤으로 선택하는 방식입니다. 그렇기 때문에 probability가 낮은 단어도 선택될 수 있고 따라서 더 다양한 단어를 사용할 수 있게 됩니다.
Sample-and-rank 방식은 우선 temperature T를 적용한 crossentropy를 이용해 N개의 독립적인 response들을 추출합니다.
여기서 temperature T는 다음과 같이 crossentropy에 들어가는 상수로, T가 커질수록 probability가 낮은 단어들을 선택할 확률이 높아지게 되고, 반대로 작아질수록 probability가 높은 단어들을 선택할 확률들이 높아지게 됩니다.
$$p_i={exp(z_i/T)\over\Sigma_jexp(z_j/T)}$$
마지막으로 이렇게 선정된 N개의 문장 중에서 probability가 가장 높은 문장을 최종 output으로 선택하게 됩니다. Meena는 N=20, T=0.88로 설정했습니다.
위 결과를 보면 같은 모델임에도 beam search 결과와 random-and-sampling 방식 간에 결과물의 차이가 큰 것을 확인할 수 있습니다.
2.4. 추가 후처리
Meena가 위험한 발언을 하지 않도록 추가적으로 classification layer를 구성하여 차단하는 방식의 후처리를 추가했습니다.
또, 대화 진행에 따라 같은 말을 반복하는 현상(Cross-turn repetition)이 있어 이를 인위적으로 중단하는 후처리를 해야 했습니다.
3. 정리
Meena의 가장 큰 기여점은 SSA라는 챗봇의 평가 기준 제시와 perplexity로도 충분히 챗봇의 성능을 어느정도 평가할 수 있다는 점인 것 같습니다. 사람을 쓰고 평가하는 것 자체가 매우 비용이 많이 드는 과정이란 것을 생각하면 ppl을 통해 빠르게 모델을 선정할 수 있다는 점은 정말 고무적인 연구결과인 것 같습니다.
또 sensibleness나 specificity 외에도 필요한 기준에 대해서 생각해 볼 필요도 있을 것 같습니다.
'딥러닝 논문리뷰' 카테고리의 다른 글
VQA의 A to X (1) | 2023.09.25 |
---|---|
사전 학습 모델에 대한 공격 - RIPPLe (0) | 2023.07.09 |
Learning Transferable Visual Models From Natural Language Supervision (0) | 2023.06.08 |
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (0) | 2023.05.13 |
Approximate nearest neighbor Negative Contrastive Learning for Dense Text Retrieval (0) | 2023.05.05 |