前回、チャットボットとの対話には「タスク指向」と「非タスク指向」の2種類があることを説明しました。今回は、その対話を可能とする対話システムの種類を機能別に細分化してみましょう。

対話システムの分類

対話システムにはさまざまな分け方がありますが、ここではまず、機能に応じて下記の3つに分類したいと思います。

  • 質問応答
  • シナリオ対話
  • 自由対話

以下、それぞれについて概要を説明します。

質問応答

「質問応答」とは、文字どおり、ユーザーの質問に応答する機能です。質問以外の「いい天気ですね」といった呼びかけなどには応答できません。通常、入力される質問内容はある程度限定されていて、多くの場合「富士山の高さは?」というような、回答が一意に決まるものが対象です。したがって、「男性が好きなものは?」のように回答が一意に決まらないものや、「あなたの年齢は?」のようにシステム自身のプロフィールや好みなどを尋ねる質問は、対象としていない場合もあります。

質問応答を実現するにはさまざまな方法がありますが、代表的なものとしては質問文から「回答タイプ」を推定する方法です。この方法は、「入力された質問文が何に関する質問で、それに関する何を回答すれば良いかがわかれば応答できる」という考え方に基づいています。

言葉だけだとイメージしづらいかもしれないので、もう少し具体的に見ていきましょう。

以下のように、富士山の標高や所在地などの情報(回答タイプ)がインプットされた質問応答システムに、「富士山の高さは?」と質問したとします。

回答タイプ 回答
標高 3,776m
所在地 静岡および山梨
山系 独立峰
初登頂 663年

するとシステムは、まず「この質問文は何に関する質問なのか」を考え、何らかの手法によって「富士山」に関する質問だということを導き出します。

次に、システムはユーザーが富士山の何について知りたいのかを特定します。つまり、「富士山の高さは?」という質問が、インプットされている情報(回答タイプ)のうちのどれについて質問しているのかを推定するわけです。

「高さ」という言葉を基に、質問が「標高」を問うものだと推定されれば、自身にインプットされた情報のなかから「3,776mです」のように回答します。このとき「富士山」や「標高」を推定するための手法としては機械学習を用いることが多いのですが、ここでは詳細は割愛します。

ちなみに、もし質問文と応答のペアを大量に保持しているのであれば、回答タイプを特定する方法ではなく、その組み合わせデータ自体をディープラーニングで学習してしまう方法もあります。

シナリオ対話

「シナリオ対話」とは、あらかじめ人間が与えたルールにのっとって対話をする機能のことです。例えば、あらかじめ次のようなシナリオをシステムに与えておきます。

システムに与えておくシナリオの例。青色がシステム、黄色がユーザーの発話

青色がシステムの発話、黄色はユーザーの発話を表しており、対話は左から右へと流れるものとします。

システムがこのようなシナリオを保持していれば、システムからユーザーに「趣味は何ですか?」と質問した際、ユーザーが「ゲーム」と答えれば「友達と一緒にやりたいね」と応答できますし、「読書」と答えれば「ゆっくり本を読みましょう」と応答できます。また、ユーザーから想定外の回答が来たときの対策としては、例のように「それは素敵な趣味ですね」といった汎用的な応答を設定しておくことが多いです。

シナリオ対話では、システムの発話だけでなくユーザーの発話もあらかじめ想定してシナリオ中に記述しますが、多少の融通はきくようにしておきます。つまり、このシナリオでは「ゲーム」や「読書」というユーザー発話を想定して記述していますが、「ゲームです」「ゲームだよ」といったような表現のブレにはある程度対応できるように設定しておくわけです。

このようにシナリオ対話は、あらかじめユーザーの発話も想定するので、多くの場合、システムが主体となって対話を進めることになります。ユーザーに自由に話をさせてしまうと、どんな発話が来るかわからず対話が破綻してしまうため、システム側で発話内容をコントロールするのです。

したがって、シナリオ対話では「いかにシナリオを上手く作るか」が重要になります。ユーザーはシステムがシナリオに沿って会話をしている、または自分の発話がコントロールされていると感付けば、落胆してしまいます。ユーザーにシナリオっぽさを感じさせずに、自由に話せているかのように錯覚させることができれば、シナリオ対話でもユーザーの満足度は高まるでしょう。

また、シナリオに記述する応答文も非常に重要です。さまざまなユーザーの発話に緩やかにフィットする応答を記述しておけば、実際にはシステムがユーザーの発話を理解しているわけではなくても、ユーザーが「システムは自分の発話を理解して応答してくれたのだ」と感じやすくなります。

これは、AIや機械学習のテクニックではありませんが、対話技術においてはまだこういったアナログな努力が必要な場面も存在しているのです。

自由対話

「自由対話」とは、あらゆる発話に対して応答する機能です。どんな発話が来ても応答することができなくてはなりません。また通常、自由対話を名乗る場合は応答の種類も多岐にわたっていることが必要です。すなわち、シナリオ対話のように、どんな発話にもフィットするような応答を多用することは望ましくありません。

自由対話の実現方法にはさまざまなものがあり、「一般的にはこう実現する」と説明することはできません。そして今現在、どんな仕組みをもってしても、人と対話するように自由かつ自然に対話ができるシステムは実現できていません。対話システムは第1次AIブームのころから存在していますが、いまだ技術革新が求められている分野なのです。

この自由対話を行うシステムについては、次回、詳細に説明したいと思います。

著者紹介


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

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