対話分野の研究をしたいときに気をつけたいこと

# 対話システムの研究、人気が出てきましたね
身近なものに対話システムを組み込もうとする流れが来ているのか、機械学習の性能向上や、データの充実などの研究地盤が整ってきたのか、対話システムの研究が暖かみを帯びてきました。
私はここ数年対話系の研究面白そうだなぁとなり、昨年度辺りから(突発的に卒業研究をしなければならないという話もあり)論文読みや実験を行っているのですが、この研究・発表など大変苦労したので、同じ轍を踏まないようにここに色々書いておこうと思います。

尚、この分野は皆さんが**想像している以上に広い**ので、どんなに頑張ってもこの手の解説は一説の域を出ることができないことを補足しておきます。(逆に、これが対話分野の研究のすべてだ！と言っているテキストなんかは注意したほうが良いと思います。自分は大分痛い目を見ました。)

補足や追記・追記依頼はご自由にどうぞ

# 目次
- どのような研究分野なのか
- どのようなデータが必要なのか
- どのような評価をするべきなのか
- どこの研究と接点があるのか
- どのような環境が必要なのか
- 稀に勘違いされること
- これからこの分野の研究をしたい大学生に向けて

登場する参考文献等の bibtex については[ここ](https://gist.github.com/MokkeMeguru/38ec6962859fbe79954fac0f680604bf)にあります。何らかの文書を書く際や、この分野の勉強をする際にご活用下さい。

# どのような研究分野なのか
**大まかには**文字通り対話を行わせることを**主目的**とした分野だと言えます。
大まかには、ということは、この分野の研究者に「はいはい、対話ね、対話するのね」などというと翌日から口を聞いてもらえないということです。

## 対話システム
まず皆さんが簡単に思いつくであろう、Microsoft社のりんな [^1] や Apple の Siri なんかの分野について考えてみましょう。
これらはこの研究分野の中でもほぼ最上位のレイヤーに位置する分野で、対話システムと呼ばれたりします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/147520/1e23b7c2-0e5a-31d7-73a7-92fdb4dd7e53.png" width="30%">
一般にこれは単一の深層学習のモデルなどで表現されることが少なく、(ところがQiitaなどで示されている対話システムの殆どはSeq2Seq[^2]といった単一のモデルが多いですよね。注意しましょう。)複数の小さなシステムの集合で作成されることが多いです。この理由については、[Sounding Board](https://sounding-board.github.io/index_files/Ostendorf_naacl2018.pdf)[^0] という対話システムについてのスライドを読むと良いです。

さて話を戻しますが、この対話システム、暗黙のうちに接頭語が付く場合が多いです。その接頭語は、**タスク指向** **非タスク指向** (+ この混合)です。

- タスク指向
タスク指向というのは、ある目的を達成するための対話システムであり、例えば人狼ゲームなどで自分が勝利することを目的にするための対話システムであり、これは一般に堅い企業の[案内システムなどに応用される](https://www.change-makers.jp/technology/japantripnavigator_eng)ことが多いです。これの目的は**自然な対話で目的を達成する(させる)**ことと言っても良いでしょう。

- 非タスク指向 
非タスク指向というのは、タスク指向のような目的がない場合を示しており、雑談対話システム、と呼ばれたりします。Twitterなんかでりんなに**クソリプ**を飛ばして反応を楽しんだりするのはこちらになるでしょう。これの目的は**自然な対話を(長く？)行う**ことと言っても良いでしょう。

- 融合型
融合型(仮称・海外ではSocial botなどと呼ばれているとかいないとか？)は上の2つの融合型で、雑談もできるし、ついでに何か必要なイベントが起こされれば(例えば電気の消灯命令イベント等)それを実行することがを目指します。最近人気の Gatebox なんかはこれに該当すると言えるでしょう。
そしてこれがおそらく、対話系の研究しています、と合コンなんかで言ったときに相手方が想像するものだと思います。

## その他下レイヤー
その他下レイヤー、と書いたのは実を言うとここでの研究のほとんどは上の対話システムに生かされていることが多く、すなわち上の研究をしているならば下の研究もしていることになる場合があるからです。

下レイヤーとして個人的にピックアップしたいものは、Qiitaなんかで人気のある**一対一対話を行う深層学習**と、**質問回答システム** **カテゴリ分類** の3つです。

- 一対一対話を行う深層学習    
一対一対話、というのはこの手の分野をある程度知っている人に説明するならば、**入力文空間 → 出力文空間 が単射なもの**を指します(或いはマルコフ性がある、とも言えるかもしれません)。知らない人に説明するならば、**同じことを聞かれたら毎回同じことを答えてくれるシステム**、あたりがふさわしいでしょう。     
これは深層学習の割には、モデルサイズやデータサイズをかなり抑えることができるとかできないとかで、はじめての対話、なんて題目で実験をするならばこれを試してみると良いでしょう。(ここの実験についての記事は後で書きます。)    
但し、これが対話システムと言えるかというとやや疑問がある(文脈の考慮やその外部情報との連携など)これができたからと言って就職面接で 「対話システム完全に理解した」とは言わないほうが良いと思います。
- 質問回答システム 
こちらは入力に何らかの質問を受けることを想定しており、それに対して適切な回答を外部情報や内部情報を元に生成・選択する分野です。Webページに簡単なヘルプデスクを設置ししたい場合などではこの分野の研究分野を探すと良いでしょう。

- カテゴリ分類
こちらは対話か？となるかもしれませんが、対話システム分野や(おそらく)りんなのシステムなんかでも使われていそうなのでピックアップしました。入力された文を例えば**スポーツ や グルメ なんかに分類する** ことを指しています。 
個人的な感想ですが、この部分の研究について調べるとほとんどの場合で極性判定(入力された文がポジティブな文かネガティブな文か判定する問題)の内容によってしまい、なかなかデータや研究を調べにくいです。


# どのようなデータが必要なのか
**綺麗な対話データがめっちゃ必要です**

この一言に尽きます。綺麗な、というのはどういうことかということを簡潔に示すために簡単な2つの対話を例に出します。(**※これは創作であり、公開しても問題ないものです**)

- Case 1    

> [User 1] おはようございます。
> [User 2] おはよう！今日は良い天気ですね。
> [User 1] そうですね、洗濯にはちょうど良いですね。

- Case 2

> [User 1] [急募] 古戦場メンバー [期間] 今期間限り
> [User 2] これでも良いですか？ pic.----------.png
> [User 1] OKです(^^)b 招待送りました！


普通に考えて Case 1 の方が機械的に学習しやすそうなのはわかると思います。逆に後者はなんらかの**前処理**を行うのが良いとわかるでしょう(とはいえ**これには諸説あり、情報が落ちるじゃんアゼルバイジャンって言われたりします**が、私は断固として前処理推奨派です)。

またカテゴリ分類を行う際にはそのカテゴリごとのデータ比率が 1:1:・・・:1 になるように集める必要があります。(こうでないと相当の工夫をしない限り学習が上手く行かないです)

質疑応答に関しては手法によりますが、例えばKnowledge Treeを用いるモデルや大規模データベースを用いたモデルを扱いたい際には、Treeやデータベースを構築するためのデータを用意しなければなりません。英語ならば何らかの評価基準となるようなデータがあると思いますが、特に日本語で特別な目的のためのそれを作りたい場合には、企業などの協力が不可欠となるでしょう。



ちなみに私が研究で主に用いたデータ収集法は、1. NTTの雑談対話コーパスを利用する[^3] 2. 明大コーパスを用いる[^4] 3.Twitter を利用する 4.自作する(~~適当に私のレポジトリを探せばあるかも？~~) でした。Twitterのデータを利用するためにはTwitterのAPIの利用申請を通過しなければならず、そのためには良い感じに **研究目的(+プライバシー保護？)** であることをアピールすれば良いでしょう。


またこれらのデータについては倫理的にかなり厳格に扱わなければならず、例えば**写真撮影OKな卒業論文発表**なんかではこれらの発表が極めて難しいものとなります。(写真撮影OKな内部発表ってなんだって思うかもしれませんが、私の所属する大学では普通に写真を取っていて、発表スライドに危ないデータを使った部分が出ていないかと肝が冷えていました)

# どのような評価をするべきなのか

カテゴリ分類はともかく、この分野、更には自然言語処理全体には評価手法に対して様々な議論があります。例えば文生成系の問題(一対一の対話モデル等)は出力された文と正解の文の単語一致度を評価することもあれば、BLEUスコア(Bilingual Evaluation Understudy Score)という指標を用いることもあれば、アンケート調査を用いることもある。コストは後者にいくにつれ高くなります(その分実世界では役に立つ指標と言えるかもしれません)。どれを採択するべきかは非常に難しい問題なので、各人で選択すると良いでしょう。

また対話システムの研究をした場合は・・・**自然な対話という曖昧な目的のため**、何で評価してもケチがつくような気がします。アンケート調査がもっとも妥当ではある気がしますが、アンケートを取る対象の偏り、比較する対話システムとそのシステムの規模的差異などから、正確に評価することは難しいでしょう。(個人研究ならばデモを行って、期待した動作をしているかそれ単体で評価すれば良いと思いますが、これが外部に通用するかは時の運でしょう)

**※大学によってはアンケート調査には特別な試験を受けている必要があります。「そんな話聞いていなかった」では済まされないので、周囲を当てにせず積極的に自分で調べるようにしましょう。**

# どこの研究と接点があるのか
「その研究、他のどの分野に活かせるの？」

修士の研究分野についてとある教員と相談を行った際、このように言われたことがあり、思わず答えに詰まってしまったのでその後思ったことをここにメモしておこうと思います。

正直なところ、あんまり転用先はわかっていません。画像認識や強化学習、ベイズ学習などの技術は寧ろそれらを使う側がほとんどですので、自分の研究分野を切り替えることは容易かもしれませんが、ここで培った研究が逆輸入のようになるビジョンはあまり想像できていません。

しかし接点は非常に多く、例えば人狼ゲームなどの対話が行われるゲームや、画像認識のカテゴリ分類がそれの代表格だと思われます。

ちなみに私はこの質問を受けた際、「この研究分野についてはまだ初心者も良いところなので、修士以降、それについては考えて行こうと思います」と逃げました。

# どのような環境が必要なのか
ここで主に言うべきことは、**金・データ・計算資源** 、以上です。

金、というのはこの分野についての書籍や論文なんかを買う際に必要なお金です。特に日本語の研究を見たいならば、学会の論文をAI書庫辺りから入手する必要があるのですが、これが有料だったりするので、身銭を切る必要があります。(~~買ってもらえなかった顔~~)

データ、というのは先述の通りです。出来れば企業とのコネがあると良いでしょう。そうでなければ、同士を集めて頑張って自作するというのも手です。**一人でやると過労と鬱になります**。

計算資源、というのはこの手の研究において、特に深層学習を土俵にあげる際に必要になるものです。例えば昨年末辺りホットになっていた言語モデルである、BERT[^5] なんかをトレーニングするには GCE (Google Cloud Engine)換算で 10万くらいかかります。これを[研究室などで手に入れられない場合](https://qiita.com/MeguruMokke/items/de3c0665ec2fb5ba2110)には、全て自腹となります。

# 稀に勘違いされること
人工無脳 = Chatbot = チャットボット = 対話システム？　

どこで線引をすべきなのか微妙ですが、恐らく人工無脳と Chatbot 辺りで等号が成立しません。しかしChatbotを翻訳すると人工無脳になってしまうこともあるので、この辺りはどこへ行っても突っ込まれると思ったほうが良いかもしれません・・・

# これからこの分野の研究をしたい大学生に向けて
研究室はきちんと選ぶようにしましょう。
間違ってもその場のノリと雑な事前調査で選んではいけません。


[^0]: \cite{1804.10202}
[^1]: \cite{rinna_article}
[^2]: \cite{Sutskever2014SequenceTS
[^3]: \cite{4002063286}
[^4]: \cite{meidai}
[^5]: \cite{Devlin2018BERTPO}