対話システム

# デモ

https://youtu.be/DSf8nlzQxq0

# デモ + 動作付き

東京大学制作展 2022 の作品の一部です。

https://iiiexhibition.com/#works

##### ノンバーバルコミュニケーションデモ

https://qiita.com/KayaTakashiro/items/8a212b11a78fab3bba0c

https://youtu.be/-zwLpmPswac

# システム概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/65ebe602-5abc-dcd4-8f7b-b9674117cf49.png)

キャラクター対話システムで使用した対話システムの中身になります。

## 説明

内容としては,
1. 入力された文章に対して、それがキャラクターに対する質問だった場合、それに解答するテンプレート応答の生成を行います。
2. 入力された文章が、知識を必要とする天気や言葉の意味に対する質問だった場合、それに解答するように Google Assistantで応答を生成します。
2. それ以外の質問の場合には Transformerで応答を生成します。
2. 生成した応答に対して、その感情、動作意図を fastTextにより生成します。

## システム参考

本システムは, XioaIce と　Blenderbot を参考にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/da137843-4293-28f5-29a5-b3651124d2dc.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/03eefa53-ae34-b8a1-9b42-f9cc3b4abec4.png)


### テンプレートマッチング

テンプレートマッチングとは当てはまる単語や文章があったときにそれに関連する応答を返すものです。

キャラクターに名前や趣味、好みなどの固有の質問が来た場合に答えるシステムです。

**Example**

```
おはよう -> おはようございます！

好きな食べ物 -> ビスケットですっ！

住んでる？ -> 電脳世界です！
```

テンプレートマッチングの代表例として、AIMLが存在し、日本語版のAIMLとして Sunabaが存在します。

手法としては、他に固有表現抽出を行い、似たような文章に対して、応答を返すシステムがあり、Dialog Flow　が存在します。

当初は、NTT Transformer を Fine-tuningし、それにより、キャラクターに応じた応答を生成を行おうとしていたのですが、微調整が大変だったため、単純なテンプレートマッチングを自作でスクリプトを組み行っています。

##### AIML

https://www.tutorialspoint.com/aiml/index.htm

##### SUNABA

https://docs.xaiml.docomo-dialog.com/docs/xaiml/2-6/aiml/

##### Dialog Flow

https://cloud.google.com/dialogflow?hl=ja

### Google Assistant 

言わずと知れた、Google Assistantです。　知識ベースの質問が来た時に応答します。

参考はこちら。

##### Google Assistant

https://developers.google.com/assistant/sdk


Google Assistant は通常の方法では、テキストでテキストでは完全には応答できません。なので、whisperを使って、テキストから音声からテキストへの応答を行っています。

##### Google Assistant on Windows

https://qiita.com/KayaTakashiro/items/fb0f0c38863eaa80c204


### Transformer 

キャラクターに対する質問でもなく、知識ベースの質問でもない場合に、応答を生成します。

##### NTT Transfomer

https://github.com/nttcslab/japanese-dialog-transformers

ちなみにあまりないので、japanese-dialog-transformersのfairseqによる、訓練用のコマンドです。

```
fairseq-train data/perchat/bin/ \
 --arch transformer \
 --finetune-from-model data/pretrained/japanese-dialog-transformer-1.6B.pt \
 --task translation \
 --save-dir result/perchat/ \
 --criterion cross_entropy \
 --source-lang src \
 --target-lang dst \
 --tokenizer space \
 --bpe sentencepiece \
 --sentencepiece-model data/sentencepiece/sp_oall_32k.model \
 --batch-size 4 \
 --update-freq 16\
 --encoder-embed-dim 1920 --decoder-embed-dim 1920 \
 --encoder-attention-heads 32 --decoder-attention-heads 32 \
 --encoder-ffn-embed-dim 7680 --decoder-ffn-embed-dim 7680 \
 --encoder-layers 2 --decoder-layers 24 \
 --encoder-normalize-before --decoder-normalize-before \
 --save-interval 5 \
 --lr 0.000001 \
 --max-epoch 20 \
 --optimizer adafactor \

```


### fastTextによる感情・動作意図の判別

fastTextを使って、キャラクターの応答文に対して、感情と動作意図を推定しています。

##### fastText

高速かつ軽量な単語ベクトルの推定により、文章の類似度を計算し、文章のクラス分類を行っています。

https://fasttext.cc/

##### empathetic dialog

感情については、empathetic dialogを参考にし、32種類の感情を推定しています。

https://arxiv.org/abs/1811.00207

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/c22be5e3-effd-382e-e119-b666e757fe1b.png)


特に日本語では NTT Transformerで、これを参考にしたデータセットが出ていたので、それを用いて分類機を作成しました。

https://www.dropbox.com/s/rkzyeu58p48ndz3/japanese_empathetic_dialogues.xlsx?dl=0

##### Japanese dialog act dataset

https://github.com/CZFuChason/JPS-daprinfo

```
ssi:self-subjective information
osi:others-subjective information
soi:self-objective information
ooi/kn:others-bjective information
op:other-plan
sp:self-plan
qu:question
ap:apology
th:thanking
cc:topic changing/closing
ag:agreement
ds:disagreement
re:request
pr:proposal
su:summarize/reformulate
ot:other
```