スマートスピーカーやチャットボットのような対話で操作するシステムを一般に「対話システム」と呼ぶ。ユーザーの自然言語による発話文(テキストなど)からシステムが意図を推定し、意図に合った処理を実行して応答の発話文を生成する仕組みである。

 この対話システムは、大きく二つのタイプに分かれる。「タスク指向対話」のシステムと「非タスク指向対話」のシステムである。

 両者は目的が異なる。前者のタスク指向対話は、ユーザーが「何かのタスクを実行したい」という目的を持つ対話のこと。例えば「ピザの注文を受ける」「航空券を予約する」などである。顧客対応窓口などの業務に対話システムを採用するようなケースが当てはまる。

 一方、後者の非タスク指向対話は何かのタスクではなく、雑談そのものが目的の対話である。日本マイクロソフトの「女子高生AIりんな」などが該当する。このほか、NTTドコモは非タスク指向対話のシステム構築に利用できる「雑談対話API」を提供している。

 対話の性質の違いから、タスク指向対話と非タスク指向対話では、裏側の処理方法も変わる。

 タスク指向対話では、目的の達成(タスクの実行)に必要な範囲に対話の内容を限定しやすい。「ユーザーがこのような意図の発話文(テキストなど)を送ってきたときは、こう回答する」などと流れを想定してシステムを設計できる。ITエンジニアからすれば、「チャットボットがこのように応答したのは、この発話文の意図をこう推定したからだろう」と解釈しやすい。

 これに対し、非タスク指向対話では、雑談だけにユーザーの発話文の内容の範囲を限定できない。このような状況でもなるべく適切に応答するためのアプローチとして、最近は機械学習の一つであるディープラーニング(深層学習)を採用するケースが目立つ。

 ディープラーニングでは、「このような発話文にはこう返答する」というパターンを、大量のデータを学習したコンピュータ自身が見付ける。学習には人間の神経回路の構造を模したニューラルネットワークという仕組みを使い、途中の処理ロジックはブラックボックス化される。ITエンジニアからすると、「こんな応答だったが、途中の過程が分からない」ということになる。

 業務システムの構築に携わるITエンジニアの場合、タスク指向対話のシステムを扱うケースが多いだろう。そこで以下では、タスク指向対話の対話システムを想定し、裏側の仕組みを解説する。

肝は意図推定と固有表現抽出

 タスク指向対話の対話システムの主な機能は三つある。(1)入力理解、(2)対話管理、(3)出力生成である。

対話システムのアーキテクチャー
対話システムのアーキテクチャー
[画像のクリックで拡大表示]

 (1)入力理解は、ユーザーから受け取った発話文を“解釈”し、その結果の情報を次の対話管理に送る機能だ。少し細かく見ると、入力理解には「意図推定」と「固有表現抽出」という二つの要素が含まれる。前者は発話文からユーザーの意図を推定する要素。後者は人名や地名などの固有名詞のほか、日付や時間などの表現を発話文から抽出する要素である。これら二つの要素は、対話システムにおいては特に重要なので、後で詳しく解説する。

 (2)対話管理は、入力理解から受け取った結果を活用する機能である。こちらも細かく見れば、「内部状態更新」と「行動選択」という二つの要素に分かれる。

 内部状態更新では、入力理解から受け取った結果情報をデータベースに相当する「内部状態」に書き込む。続いて、行動選択が内部状態に書き込まれたユーザー属性情報を参照し、その情報を「対話戦略」と呼ばれる方針に照らし合わせ、システムの振る舞いを判断する。この行動選択が出した指示の結果を受けて、(3)出力生成が応答文を生成し、ユーザーに送る。

 対話システムではこれら三つの主要機能のほかに、「外部連携」を備えていることが多い。外部のデータベースやWebサーバーなどのデータを取得し、それを応答文に反映するための機能である。