【論文メモ】Simulated Chats for Building Dialog Systems: Learning to GenerateConversations from Instructions (EMNLP 2021)

Findings of EMNLP 2021 で紹介された[Simulated Chats for Building Dialog Systems: Learning to GenerateConversations from Instructions](https://arxiv.org/abs/2010.10216)を読んだ際のメモです。以下、画像に関しては特に断りがない場合論文中の図・表を引用しています。

# Introduction
対話システムを構築するためには、モデルを学習するための大規模な会話データが必要となるが、データが不足している場合が多い。そこで、以下の役割を持つUser BotとAgent Botを構築した。
**User Bot**
対話からもとに応答を生成するGeneratorとコンテキストの関係性を考慮し、応答の尤度を返すSelector
**Agent Bot**
Uset Bot+Knowledgeベースで、User Botからの応答を基に、それに対する応答を返す

それにより少量のデータで訓練しても意味のある対話を返すモデルを訓練できるようになった。原理的にはNoisy Teacher Studentに似ており、汎用性もあることから様々なモデルで応用可能である。

# Model
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580108/9c6f56cb-40c9-49a1-3c4e-3c8cbcbc2b75.png)

## Overview

* ユーザとエージェントの発話：  $D=(u_1,a_1,...,u_n,a_n)$
* $m$ターン目の過去の対話シーケンス（対話履歴） ： $c_m=(u_1,a_1,...,u_{m-1},a_{m-1})$
* 指示文セット ： $I$ (Fig.2のInstruction)
* Knowledge base ： $KB$

とすると、以下のモデル$p(D|I,KB)$=ユーザシュミレータ*エージェントシュミレーターを作ることを目的とする

```math
p(D|I,KB)=\prod_{i=1}^{n}p(u_i|c_i,I)p(a_i|c_i,u_i,KB)
```

具体的なインタラクションは以下の図のようになり、このモデルで作成されたデータは元のデータセットに足される形となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580108/e4bb1b1e-22a2-a6c0-0085-c005b41882da.png)

各モジュールに関して、説明を行う。

## User Bot
ユーザボットは対話履歴と指示を入力として、発話を生成する$p(u_i|c_i,I)$をモデル化する。Fig.2に示されているように

* 応答候補の生成(Responce Generator)
* 応答候補のスコア割り振り(Responce Selector)

の2パートで構成されている。

### Responce Generator
Fig.3に示すように、指示文$I$と対話履歴が与えられ、対応する発話を返す。GPT-2をfine-tuningするが、学習データが少ないと短い発話を返してしまう傾向があるため、[Nucleus Sampling](https://arxiv.org/abs/1904.09751)(上位K個を選ぶのではなく、確率の合計がpを超えるような最小の候補を決める方法)により訓練を行う。（Nucleus Samplingの説明は[この記事](https://zenn.dev/hellorusk/articles/1c0bef15057b1d)を参考にさせていただきました:bow:）

### Responce Selector
コンテキストの関係性を考慮し、スコアを割り当てるために対話履歴と生成された応答を[CAN]トークンでConcatし、[Longformer](https://arxiv.org/abs/2004.05150)に入力する。これは、GTに近いほど高いスコアを出し、間違ったデータには低いスコアを割り振るように訓練されている。間違ったデータは以下の3つの方法で作成をしている(データ比は5:2:3)。

* ランダムな応答
* 履歴の1部（履歴から文章を選択しないようにするため）
* ランダムな応答をConcatしたもの（モデルが長すぎる文章を生成しないようにするため）

モデルは以下の式で表されるTriplet lossで訓練される。

```math
L(c,u_p,u_n)=max(0,s(c,u_n)-s(c,u_p)+\alpha)
```

($c$:履歴, $s(○,○)$:score, $u_n$:GT, $u_p$:間違ったデータ, $\alpha$:0.05)

## Agent Bot
対話履歴・ユーザの発話・知識を入力とし、応答を行うモデル$p(a|,c,u,KB)$を作ることを目的とする。Fig.2に示されているように

* 発話履歴と最後のユーザの発話から、それらの発話意図(Belief State)をクエリとして生成する
* クエリから知識ベースにおいてクエリがマッチしていた数を示すエンティティ$e$を生成
* 対話履歴・ユーザの発話・エンティティ・クエリを入力として、応答を行う
* その応答のスコアを計算

の4パートで構成されている。また、このモデルはUser Botとは重みを共有していない。

### Belief State(query) Generator
GPT-2を用いて、発話履歴と最後のユーザの発話から現在のドメインとそれに続くキーとvalueのペアとなるものをトークンのシーケンスとして生成する。推論の際は貪欲法でサンプリング。

### Response Generator, Response Selector
入力は異なるが、モデル・訓練方法としてはUser Botのと同一。

## Experiments
* [MultiWOZ 2.0 Dataset](https://aclanthology.org/D18-1547/)
* [PersonaChat Dataset](https://aclanthology.org/P18-1205/)

の2つのデータセットに関して検証。
使用モデルは、WOZに関しては[SOLOIST](https://arxiv.org/pdf/2005.05298.pdf)と、[MinTL-T5](https://aclanthology.org/2020.emnlp-main.273/)、[DAMD](https://ojs.aaai.org//index.php/AAAI/article/view/6507)で、PersonaChatに関しては、GPT2-small。
本手法の比較対象として、データを増やす関連手法である[DAMD-MADA](https://ojs.aaai.org//index.php/AAAI/article/view/6507)、[PARG-TSCP](https://arxiv.org/abs/2003.02245)、[Lost in Conversation](https://aclanthology.org/D19-1112/)を用いて調査。
評価指標はBLEU(B), Inform(I), Sucess(S), Combined(C BLEU+0.5*Inform+Sucess)。それぞれにおいて高精度を達成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580108/16e0b442-89b4-44af-1305-dffc28212d7e.png)

## 感想
データセットを増やす手法として、UserとAgentを定義し、擬似的に対話させることでデータを増やせる考えはとてもおもしろかったです。損失関数・モデルの設定など、どうしたらモデル同士の対話ができるかといったところも読めて自然言語だけではなくモデル間でのインタラクションの参考になりそうだと思いました。