前回、対話システムには「質問応答」「シナリオ対話」「自由対話」という3つの機能があることを説明しました。今回はそのなかから「自由対話」について掘り下げていきたいと思います。

自由対話を実現する方法

自由対話とは、ある程度ユーザーからの発話内容を想定している質問応答やシナリオ対話とは違い、どんな発話に対しても応答することができる機能のことです。もちろんシナリオ対話でも、「どんな発話に対しても『そうなんだー』と応答する」などと設定しておけば、どんな発話にも応答すると言えますが、ここで言う自由対話はそうではなく、”ユーザーの発話に応じて多様な応答をするもの”と定義させてください。つまり、自由対話の目指している究極の姿は、人と人との普段の会話をコンピュータで実現することだと言えるでしょう。

ただし、今の技術では自由対話を完璧に行うことはできません。

自由対話を実現する手法としてはさまざまなものが提案されていますが、本当に多種多様であるため、質問応答やシナリオ対話のように「こうすれば良い」という説明をできないのが現状です。そこで、ここでは自由対話を実現するために「比較的よく使われる方法」をご紹介しましょう。

以降では、自由対話を実現する方法を「選択型」と「生成型」の2つに大別して説明していきたいと思います。

        
応答文 応答方法
選択型 あらかじめ保持する あらかじめ保持した複数の応答文から、何らかの方法で1つ選択する
生成型 保持しない ユーザーの発話を受けた後、何らかの方法で応答文を生成する

※ 応答文を生成するために必要な情報は保持することもある

選択型とは、あらかじめ大量の応答文を準備してコンピュータに持たせておき、ユーザーから発話があった際には、何らかの方法で保持している応答文から1つ選択して出力する方法です。

一方、生成型は、ユーザーの発話があるたびに応答文を逐一生成する方法です。選択型との違いは、「応答文をあらかじめ文として保持しているかどうか」になります。

自由対話を行う際に多いのは、このいずれか、または両方の方法を複合的に利用し、応答文を生成するパターンです。

選択型と生成型について、もう少し詳しく見ていきましょう。

選択型の自由対話

先述の通り、選択型ではあらかじめ大量の応答文を保有しておく必要があります。そこで重要なのは「応答文をどのように準備するか」ということです。方法は、大きく2つに分けられます。1つは人手で作成する方法で、もう1つは大量のテキストデータから統計的に自動生成する方法です。

人手で作成すれば応答の質は高いでしょうが、量を集めるのは至難です。反対に、統計的な手法では応答の質には多少問題があるでしょうが、量を集めるのはたやすいでしょう。これはどちらが良いということではなく、どのような対話システムを作りたいかによって使い分けるべきところです。

応答の作り方 質   量  
人力 ×
統計 ×

例えば、「できるだけたくさんの回答パターンがあったほうがいいから」と統計的に自動生成することを選んだとします。そもそもこちらの方法の主な目的は量産することですから、出来上がった大量の応答文を人手で全部チェックするというのは現実的ではありません。そのため、もし元データに道徳的・倫理的に問題のある言葉が混入していて、それを使った応答文が作られていた場合、対話システムが問題発言をしてしまう可能性があります。自由対話が可能な製品を世の中に出す場合は、こういったリスクがあることも加味して、「どのような対話システムをどのように開発するか」を検討することが大切です。

応答文の準備が終わったら、次はその中からどのように1つ選択するかを決めなくてはなりません。よく使われるのは、応答文を保持する際に発話文もセットで保持しておき、ユーザーの発話(入力文)と似た発話文にセットされている応答文を出力するという方法です。こういった対話システムは「用例ベース対話システム」と呼ばれることもあります。

例えば、次のような発話文と応答文のペアを保持している対話システムの場合、ユーザーの発話(入力文)が「ロンドンに行ってみたいな。」であれば、これと「ロンドン旅行楽しかったなあ。」「フランスで飲むワインは美味しいよ。」「アイスランドでオーロラが見たい。」をそれぞれ比較し、最も似ている「ロンドン旅行楽しかったなあ。」に対する応答文「大英博物館は1日いても飽きないよね。」を応答として出力する、という具合です。

発話文 応答文
ロンドン旅行楽しかったなあ。 大英博物館は1日いても飽きないよね。
フランスで飲むワインは美味しいよ。 しかも安いんだよね!
アイスランドでオーロラが見たい。 暖かい格好で行かないとね。

生成型の自由対話

生成型は、あらかじめ応答文を保持するのではなく、ユーザーから発話があるたびに応答文を生成して出力する手法です。とはいえ、何もない状態から応答文を生成することはできません。通常は、応答を生成するための何らかの情報(データ)は保持しています。情報を何も保持していない場合は、リアルタイムにWeb上に応答文の元となる情報を取得しに行くようなパターンもあります。

生成型にもさまざまなやり方がありますが、最も単純なものは文のテンプレートを保持し、ユーザーの発話を受けた後、テンプレートに穴埋めする形で文を生成・出力する方法でしょう。この方法は、そもそもほぼ文に近い形でデータを保持しているため、生成型と言うよりもむしろ選択型に近いイメージになります。

最近の生成型の対話システムは、ディープラーニングを用いて実現されていることが多いです。以前、「ディープラーニングは機械翻訳と相性が良い」と説明しましたが、対話システムにおいては、日本語を英語に翻訳する代わりに、入力文を応答文に翻訳するようなイメージです。学習データは異なりますが、同じ方法で学習することができます。

学習データの違いから応答文のパターンが変わるだけで、やっていることは同じ

ただ、翻訳とは異なり、対話には非常に多くの応答が考えられますから、これだけで自由に対話ができるということはありません。また、ディープラーニングを行うためには大量の学習データが必要です。人手で作成できない場合はWebなどから取得したデータを統計的に使用することになると思いますが、その場合は前述の選択型の統計と同様、道徳的・倫理的に問題のある発言をする可能性を対話システムに混入することになります。

* * *

対話システムにおいて、最も難しい自由対話。現在、自由対話らしく振舞っている対話システムの多くは、今回紹介したような方法を複合的に用いています。今後、本当の自由対話を可能にするためには、さらに大きな技術革新が必要でしょう。

著者紹介


国立研究開発法人 情報通信研究機構
ユニバーサルコミュニケーション研究所
データ駆動知能システム研究センター 研究員
大西可奈子

2012年お茶の水女子大学大学院博士後期課程修了。 博士(理学)。同年、大手通信会社に入社。2016年より現職。
一貫して自然言語処理、特に対話に関する研究開発に従事。
人工知能(主に対話技術)に関する講演や記事執筆も行う。
twitter:@WHotChocolate