Towards a Human-like Open-Domain Chatbot
05 Oct 2020제목: Towards a Human-like Open-Domain Chatbot
저자: Google Research Brain Team
발행년도: 2020
챗봇은 대화 주제의 범위에 따라 분류하면 closed domain과 open domain으로 분류할 수 있다. 그 중 closed domain은 특정 영역에 대해서만 응답을 하는 챗봇이고, open domain은 다양한 주제를 탐색할 수 있는 챗봇이다[1].
Open domain 챗봇은 아직도 문맥상 말이 안되는 답을 하거나 매우 모호하게 응답을 하는 등의 한계가 있다.
해당 논문에서는 evolved transformer 모델을 사용한 seq2seq 모델에 public domain social media conversation에서 긁어온 40B words로 학습시킨 범용적 챗봇 모델인 Meena를 소개하고 있다.
meena를 소개하기에 앞서 챗봇의 성능을 평가하는 새로운 방법을 소개하는데, 사람이 평가할 수 있는 방식 중에서 static의 경우 정해진 multi-turn context를 가지고 어떤 응답을 생성하는지 확인 하는 방식이고, interactive의 경우 사람과 자유롭게 얘기하면서 평가를 하는 방식이다. 그래서 먼저 문맥에 맞고 논리적으로 일관되게 대답을 하는지 보고, 답변이 말이 되면 문맥에 대해서 specific하게 대답을 하는지 확인을 한다. specific한지 확인하는 이유는 i don’t know처럼 대답하는 경우 sensible하다고 판단은 되지만 실질적으로 question을 해결했다고는 볼 수 없기 때문이다. 또한 문맥에 specific하다는 것은 예를 들어 I love tennis라는 말에 대해 That’s nice라고 대답하면 not specific으로 분류되는데 that’s nice는 I love tennis 말고도 다양한 문맥에 사용될 수 있기 때문이다.
이러한 방식을 사용하는 evaluation metric을 SSA(sensibleness and specificity average)라고 부르고, 한 대화당 몇명의 worker가 label한 값들을 기반으로 한 확률을 사용한다. worker들에게 SSA 측정 이후 챗봇이 얼마나 human-like한지 다시 한 번 측정해 보았을 때 결과가 유사하게 나오는 것을 볼 수 있다.
static evaluation은 앞에서 말했듯 말을 주고받는 대화 데이터를 만들어서 모델에 입력으로 넣어준 결과로 나온 (context, response)쌍을 보고 이 것이 sensible하고 specific한지 평가하는 방식이고, interactive evaluation의 경우 “Hi”라고 worker가 말하는 것으로 대화를 시작하여 아무 주제로 14턴~28턴동안 대화를 한다. 이러한 대화 데이터를 100개정도 생성하여 이를 기반으로 sensibility와 specificity를 평가한다. 이 때, worker들에게 챗봇과 대화하는 것이라 명시함으로써 worker들이 대화상대가 챗봇인지 아닌지를 구분하는 것이 아니라 이 챗봇이 얼마나 사람같은지에 집중하여 평가할 수 있게 한다.
해당 논문에서는 meena의 성능 평가를 위해 Cleverbot, DialoGPT, 그리고 Mitsuku와 XiaoIce에 대한 성능평가도 실시하였다. 이 중 Mitsuku와 XiaoIce는 공개된 코드가 없는 관계로 interactive evaluation만 수행하였고, 그 중에서도 XiaoIce는 state를 매 번 초기화 하기 어려워서 각각의 대화에 최대한 간격을 두고 진행되었다.
SSA 외에도 빠르게 성능 평가를 하는 perplexity를 활용하여 meena의 성능을 평가하기도 하였는데, 여기서 perplexity는 모델이 다음 나올 수 있는 것을 얼마나 잘 예측하는지를 보여준다.
Meena 챗봇
최근의 end-to-end dialog model은 크게 두 가지로 분류된다.
- 사람이 직접 요소들을 디자인한 복잡한 모델
- 커다란 신경망 모델
그래서 high-quality multi-turn conversation을 처리하기 위해서 모델을 만들 때 두 가지 방법이 있는데, 먼저 기존의 end-to-end 모델에 더 많은 데이터와 파라미터를 가지고 학습을 시키는 방법이 있고, 기존의 모델에 다른 요소들을 결합시키는 방법이 있다. 이 중 meena는 open-domain 셋팅엣 거의 사람과 유사할 정도의 대답을 생성할 수 있는 end-to-end 모델이다. (앞서 말한 학습 방법 중 전자를 택한 것 같다.)
데이터셋은 public domain social media conversations를 정제하여 사용했는데, 각각의 대화를 트리 형태로 표현하여 (context, response)를 구한다. 그리고 이후 generation process의 성능을 높이기 위해 단어의 수가 2보다 작거나 텍스트엣 알파벳의 빈도가 낮거나, url이 포함되어있는 등의 조건을 만족하는 데이터들은 제거해주었고, 편의성을 위해 sub tree도 전부 버렸다. 그 결과 867M 사이즈의 데이터를 구했고, 이를 byte-pair-encoding(BPE)를 사용하여 토큰화하였다(bpe는 트랜스포머 모델에서도 쓰임). 그렇게 해서 Meena르 학습시킨 데이터의 총 크기는 341GB text인데, 이는 GPT-2의 40GB text와 비교해보면 상당히 많은 양의 데이터로 보인다.
meena의 모델 구조를 보면 evolved transformer 모델을 활용하는데, 1개의 et encoder block과 13개의 et decoder block을 사용한다. 임베딩은 encoder와 decoder, 그리고 softmax layer 사이에 공유하며, 최대 길이 128토큰, 최적의 hyperparameter는 manual coordinate-descent search로 찾았다.
학습은 tpu로 돌렸고, Adafactor optimizer, 그리고 tensor2tensor code를 활용하였다.
명확한 답변 생성을 위해 decoder에서는 sample-and-rank 방식을 사용하였는데, 이는 먼저 n개의 독립적인 답변을 샘플링하여 이 중에서 가장 높은 확률의 후보를 선택하는 것이다. 여기서 랜덤 샘플링을 할 때 temperature T라는 것을 사용하는데, T값은 높을 수록 rare한 단어들에 더 높은 점수를 주고, 작을수록 더 자주 사용되는, 안전하지만 모호한 단어들에 더 높은 점수를 준다.
beam search는 반복적이고 dull한 답변을 내는데에 반해 sample-and-rank 방식은 다양하고 풍부한 답변을 하는데, 이를 가능하게 하는 것은 모델의 perplexity를 낮추어 샘플링 할 때의 temperature 값을 높게 잡는 것이다.
출처:
[1] 아무튼 워라밸, 챗봇이란 ( http://hleecaster.com/what-are-chatbots/ )