【実施例1】
【0014】
<1.実施例のシステム全体構成>
図1は、本実施例における対話システムの構成を示すブロック図である。
対話システム100は、具体的な例としては、コンピュータ等の情報処理装置により構成される。通常の情報処理装置と同様に、対話システム100は、中央処理装置(CPU)101、キーボードや画像モニタなどの入出力装置103、磁気ディスク装置や半導体記憶素装置からなるメモリ107を備える。また、外部とデータをやり取りするためのインターフェースとして、データ通信部102を備えていてもよい。データ通信部102は、例えば外部のネットワーク110と接続される。なお、入出力装置という場合、入出力両機能を備える装置のみを意味するのではなく、入力機能のみを備える装置、出力機能のみを備える装置、さらには入出力の両方を備える装置のいずれも意味するものとする。
【0015】
本実施例では計算や制御等の機能は、メモリ107に格納されたプログラムがCPU101によって実行されることで、定められた処理を他のハードウェアと協働して実現される。CPU101が実行するプログラム、その機能、あるいはその機能を実現する手段を、「機能」、「手段」、「部」、「ユニット」、「モジュール」等と呼ぶ場合がある。
【0016】
図1では、概念的にCPU101が、ソフトウェアに基づいて実行する機能を、意図解析部104、対話制御部105、メンテナンス部106、入力処理部108、出力処理部109として示している。これらの機能を実現するためのプログラムはメモリ107に格納される。また、メモリ107にはデータとして、対話データ1071、候補データ(ユーザ発話言い換え候補データ)1072、言い換え確認結果データ1073、対話ログデータ1074等が格納される。
【0017】
なお、上記プログラムは、ROM等に予め組み込まれて提供されたり、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録して提供したり、配布してもよい。さらには、そのプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供したり、配布してもよい。
【0018】
メモリ107に格納する、対話データ1071、対話ログデータ1074は、データ通信部102や入出力装置103を介して入力することができる。また、候補データ1072や言い換え確認結果データ1073は、データ通信部102や入出力装置103を介して出力することができる。なお、本例では、候補データ1072や言い換え確認結果データ1073を対話システム100から出力する前提で説明しているが、例えば、対話システム100の外部に設けられたディスプレイ、スクリーン、スピーカ等の出力装置からこれらのデータを出力し、その内容を確認したユーザが対話システム100に対してさらに質問を入力するような場合も同様に適用することができる。
【0019】
意図解析部104は、ユーザから入力された質問文の意図を解析する処理部である。対話制御部105は、ユーザから入力された質問文と対話システム100からの回答文や確認文による対話を制御する処理部である。
【0020】
メンテナンス部106は、システム管理者がメモリ107に格納されているデータを管理するために、対話データ1071、候補データ1072、言い換え確認結果データ1073、対話ログデータ1074の入出力を行う。
【0021】
入力処理部108は、ユーザから入力された質問文をテキストに変換する等、本システムで必要な入力処理を行う処理部である。出力処理部109は、上記質問文に対する回答文や確認文を出力する等、本システムで必要な出力処理を行う処理部である。
【0022】
以上の構成は、
図1に示したように単体のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。また、本実施例中、ソフトウェアで構成した機能と同等の機能は、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)などのハードウェアでも実現できる。
【0023】
<2.対話システムの処理の説明>
対話システム100の処理について説明する。
【0024】
<2−1.対話システムの処理の概要>
対話制御部105は、対話データ1071、候補データ1072、言い換え確認結果データ1073、対話ログデータ1074を用いて、ユーザとの対話における質問文に対する回答文や確認文を生成する処理を行う。
【0025】
図2は言い換え確認処理を含む対話システム100の処理のフローを示している。
処理S201は、入力処理部108にて、ユーザから入力された質問文をテキストに変換する入力処理を行う。例えば、ユーザからの質問文が音声で入力された場合は、その音声をテキストに変換し、正規化を行う。正規化では、大文字と小文字の統一や数値を漢数字と数字の統一など表記の統一を行ってもよい。また、ユーザからの質問文がテキストで入力された場合も表記の統一を行ってもよい。
【0026】
処理S202は、意図解析部104にて、処理S201によって正規化されたユーザの入力の意図解析を行う。例えば、意図解析部104は、対話データ1071に登録されている質問文と回答文の対の中からユーザから入力された質問文に近い質問文を見つけだし、その質問文をユーザから入力された質問文の意図とする。また、ユーザから入力された質問文と登録されている質問文との間の類似度を、ユーザから入力された質問文の意図をあらわす確からしさを示す確信度として算出してもよい。例えば、意図解析部104は、ユーザから入力された質問文を構成する文字列と、対話データ1071に登録されている質問文を構成する文字列との一致度が80%である場合には、上記確信度を80%として算出する。
【0027】
処理S203は、対話制御部105にて、処理S202によって得られた結果である質問文や対話ログデータ1074(ユーザ発話の言い換えの確認状況、聞き返しの連続回数、対話回数等)に基づいて、対話データ1071に登録されている回答文の中から出力すべき回答文を生成する。ユーザ発話の言い換えの確認状況とは、ユーザの「営業時間を教えて?」という質問に対し、「それは「開いている時間を教えて。」という意味ですか?」と、質問を言い換えてその意図を確認する確認文を出力しているか否かである。また、聞き返しとは、何らかの理由で音声認識精度が低い場合やユーザから入力された質問文に近い質問文が対話データ1071に登録されていない時に「もう一度言って下さい。」のような聞き返し文を出力して回答することである。さらに、聞き返しの連続回数は連続して何回聞き返したかである。
【0028】
処理S204は、出力処理部109にて、処理S203によって生成された回答文を出力するために必要な処理を行う。例えば、出力処理部109は、回答文を音声で出力する場合は回答文のテキストを任意の音声合成技術により音声に変換する処理を行う。また、回答文をテキストで出力する場合であれば、処理S201で正規化したものを元の表記(ユーザが使用している表記)に戻すといった処理を行ってもよい。また、次の対話が続く場合は、上記の言い換えの確認状況、確認中の質問を識別するID、聞き返しの連続回数、対話回数を対話ログデータ1074に記憶し、引継ぎを行ってもよい。
【0029】
<2−2.対話制御処理>
図3は対話制御処理S203の詳細を示すフロー図である。
図3では、処理S202により得られた結果である質問文や対話ログ1074から得られる3つの情報(上記の類似度、確認状況、対話回数)に基づいて、対話制御部105が、3種類の処理(確認処理、回答処理、聞き返し処理)から1つを選択する例を示している。
【0030】
処理S301では、対話制御部105は、確信度により分岐処理を行う。具体的には、対話制御部105は、処理S202において意図解析部104により判定された上記確信度が所定の閾値(例えば、80%)以上であるか否かを判定し、確信度が当該閾値以上であると判定した場合(S301;Yes)、処理S302に進む。対話制御部105は、確信度が閾値未満であると判定した場合(S301;No)、処理S307に進む。上記閾値は任意の値をシステム管理者が設定してもよいし、任意の手法により自動的に設定するようにしてもよい。
【0031】
処理S302では、対話制御部105は、確認状況により分岐処理を行う。具体的には、対話制御部105は、S305の確認処理を実行中、すなわち、上記確認文を出力している状態であるか否かを判定し、確認処理を実行中であると判定した場合(S302;Yes)、処理S305に進む。対話制御部105は、確認処理を実行していないと判定した場合(S302;No)、処理S303に進む。
【0032】
処理S303では、対話制御部105は、確認が必要な候補データ1072の有無により分岐処理を行う。具体的には、対話制御部105は、対話データ1071の中から確信度が閾値以上であると判定された質問文の言い換えの候補が候補データ1072にあるか否かを判定する。上記質問文の候補の判定は、例えば、
図4に示す対話データ1071に記憶されている対話IDと同じ値の候補IDの有無を判定し、上記同じ値の候補IDがあると判定した場合、その候補IDに対応する言い換えが候補データとして登録されていると判定する。
【0033】
対話制御部105は、候補データがあると判定した場合(S303;Yes)、処理S304に進み、候補データがないと判定した場合(S303;No)、処理S306に進む。
【0034】
処理S304では、対話制御部105は、対話回数により分岐処理を行う。具体的には、対話制御部105は、あるユーザとの間で対話の回数が、あらかじめ定められた閾値回数(例えば、N=3)の対話であるか否かを判定する。対話制御部105は、対話回数が上記閾値回数であると判定した場合(S304;Yes)、処理S305に進み、それ以外の場合(S304;No)、処理S306に進む。上記閾値回数Nは任意の数であり、例えば任意の値をシステム管理者が設定してもよい。この例では3回の対話に対して1回の頻度で、次のS305の確認処理が実行されることとなる。このような閾値を設けることにより、頻繁に確認処理が実行されることによるユーザの不快感を抑えることができる。
【0035】
処理S305では、対話制御部105は、確認が必要な候補データの中から1つを選択し、その候補データがユーザにより発話された質問文の言い換えの適否を確認する確認処理を行う。確認処理については後述する。
【0036】
処理S306では、対話制御部105は、ユーザにより発話された質問文に回答する回答処理を行う。具体的には、対話制御部105は、S301で確信度が閾値以上と判定された質問文に対応する回答文を対話データ1071の中から読み出し、読み出した回答文を出力する。
【0037】
処理S307では、対話制御部105は、「もう一度言ってください。」といったような聞き返し文を出力する聞き返し処理を行う。聞き返し文はあらかじめメモリ107に記憶しておけばよい。
【0038】
<2−3.対話制御処理における確認処理>
図4は、対話制御処理S203における確認処理S305の例を示す。確認処理S305では、対話データ1071と候補データ1072を用いる。
図4に示すように、対話データ1071は、ユーザとの対話を識別するために対話IDと、その対話IDで識別される対話における質問文(Q)と、その質問文に対する回答を示す回答文(A)とが対応付けて記憶されている。例えば、対話データ1071には、対話IDが「1」で識別される「営業時間は?」という質問文に対し、「営業時間は10:00から18:00です。」という回答文が登録されていることを示している。また、同じ対話IDで識別される「いつ開いているの?」という質問文に対しても同様の回答文が登録されていることを示している。対話IDは質問文の意図毎(回答毎)に付与されるため、任意の質問文とその言い換えは同一の対話IDとなる。
【0039】
また、
図4に示すように、候補データ1072は、質問文の候補を識別するための候補IDと、その候補IDで識別される言い換えの候補となる質問文(Q)と、ユーザからの質問文がその質問文の意図であることが言い換えにより確認できた回数を示す適切フラグと、ユーザからの質問文がその質問文の意図であることが言い換えにより確認できなかった回数を示す不適切フラグと、その言い換えの候補が既に対話データの質問文として登録されているか否かを示す登録フラグとが対応付けて記憶されている。適切フラグとは、ユーザに確認した際に、言い換えが適切であると回答された回数である。同様に、不適切フラグとは、言い換えが不適切であると回答された回数である。この例では、候補IDが1である「開いている時間を教えて。」という質問文が、その確認結果(適切と判断された回数、不適切と判断された回数)と登録状況と共に登録されている。また確認結果には、適切フラグの値と不適切フラグの値の他に、適否を判断できないと判断された回数を示す不明フラグの値を入れてもよい。
【0040】
また、
図4に示すように、ユーザから「営業時間は?」と質問文が入力された場合、処理S303では、まず、対話制御部105は、その質問文が対話データ1071の質問文(Q)に登録されているか否かを確認する。対話制御部105は、その質問文が対話データ1071に登録されていると判定した場合、その質問文に対応する対話IDを取得する。
【0041】
次に、対話制御部105は、取得した対話IDと同じ値の候補IDの質問文が候補データ1072に存在するかを確認する。処理S305では、対話制御部105は、候補データから1つの質問(Q)を選択し、ユーザ発話の言い換えの適切さを確認する質問を行う。候補データが複数ある場合の選び方については以降で述べる。この例では、「開いている時間を教えて。」という質問が選択され、「今のは「開いている時間を教えて。」という意味ですか?」という確認文を出力してユーザに尋ねている。それに対し、ユーザはその確認文による言い換えが適切であることを示す返事「はい。」と答え、対話システム100は確認処理S305においてその返事を受け取っている。
【0042】
また、
図4に示すように、最初から最後までの一連の対話のシーケンスに含まれる対話の履歴が、対話ログデータ1074に記憶されている。対話ログデータ1074は、ユーザと本システムとの間で1回の対話が行われる都度、対話制御部105により記録される。
図4では、対話ログデータ1074には、質問文や確認文または回答文を識別するためのログIDと、そのログIDにより識別される質問文または回答文の内容とが対応付けて記憶されていることがわかる。
【0043】
図5は確認処理S305の詳細を示すフロー図である。
図5では、ユーザ発話の言い換えの適切さを確認する確認処理に関する回答文を生成する例を示している。
【0044】
処理S501では、対話制御部105は、言い換えの確認状況により分岐処理を行う。具体的には、対話制御部105は、ユーザ発話の言い換えを確認中であるか否か(例えば、
図4に示したログID2の確認文により確認処理を実行中であるか否か)を判定し、確認中であると判定した場合(S501;Yes)、処理S502に進み、確認中でないと判定した場合(S510;No)、処理S512に進む。
【0045】
処理S502では、対話制御部105は、言い換えの適切性により分岐処理を行う。具体的には、対話制御部105は、確認処理で本システムが出力した確認文に対するユーザの返事が「はい。」等の言い換えが正しい旨を示す内容であるか否かを判定することにより、言い換えが適切であったか否かを判定する。対話制御部105は、ユーザから上記正しい旨を示す返事を受け取り、言い換えが適切であったと判定した場合(S502;Yes)、処理S503に進み、不適切であったと判定した場合(S502;No)、処理S504に進む。
【0046】
処理S503では、対話制御部105は、候補データ1072の適切フラグの値に1を追加する。
処理S504では、対話制御部105は、候補データ1072の不適切フラグの値に1を追加する。
【0047】
図6は、処理S503と処理S504の言い換え確認前後の対話データ1071と候補データ1072の例を示している。(1)には確認処理前の状態が示されており、(2)には確認処理後の状態が示されている。(2−1)のように、対話制御部105により確認結果が適切であると判定された場合は候補データ1072の適切フラグの値が1追加される。一方、(2−2)のように、対話制御部105により確認結果が不適切であると判定された場合は候補データ1072の不適切フラグの値が1追加される。
図6では、「開いている時間はいつ?」との言い換えは適切であると判定される一方、「休憩時間はいつ?」との言い換えは不適切であると判定されたことがわかる。
【0048】
処理S505〜S511は、候補データ1072が1つの候補IDについて複数登録されている場合には、各データ(本例では、「開いている時間はいつ?」および「休憩時間はいつ?」)に対して繰り返し行い、その後処理S306に進む。
【0049】
処理S506では、対話制御部105は、適切フラグの値と不適切フラグの値により分岐処理を行う。具体的には、対話制御部105は、適切フラグの値と不適切フラグの値との間の関係が所定の条件を満たすか否かを判定する。例えば、対話制御部105は、候補データ1072に記憶されている各データのうち、適切フラグの値よりも不適切フラグの値が閾値となる一定数以上大きい値であると判定した場合、そのデータは候補データ1072として不適切であると判断する一方、適切フラグの値よりも不適切フラグの値が閾値となる一定数以上大きい値でないと判定した場合、そのデータは候補データ1072として適切であると判断する。
【0050】
対話制御部105は、候補データ1072の各データについて候補データ1072として適切であると判定した場合(S506;Yes)、処理S507に進む。また、対話制御部105は、候補データ1072の各データについて候補データ1072として不適切であると判定した場合(S506;No)、処理S508に進む。適切か否かの判定方法には、上記のほか任意の方法を用いることができる。
【0051】
例えば、上記のような適切フラグの値と不適切フラグの値との間の相対的な関係ではなく、適切フラグの値がある閾値A以上であり、不適切フラグの値が別の閾値B以下である場合には言い換えが適切と判断し、それ以外を不適切と判断するというように、適切フラグの値、不適切フラグの値それぞれあらかじめ定められた値を用いてもよい。また、適切の値/(適切の値+不適切な値)がある閾値C以上の場合に適切、それ以外を不適切と判断してもよい。この場合、閾値Aと閾値Bはシステム管理者が決定してよいし、言い換え確認のログに基づいて自動的に調整してもよい。
【0052】
処理S507では、対話制御部105は、対話データ1071に、上記関係を判定した候補データ1072のデータが含まれているか否かにより分岐処理を行う。具体的には、対話制御部105は、上記候補データ1072のデータが対話データ1071に含まれているか否かを判定し、上記候補データ1072のデータが対話データ1071に含まれていると判定した場合(S507;Yes)、処理S511に進む。一方、対話制御部105は、上記候補データ1072のデータが対話データ1071に含まれていないと判定した場合(S507;No)、処理S509に進む。
【0053】
処理S508では、S507と同様、対話データ1071に、上記関係を判定した候補データ1072のデータが含まれているか否かにより分岐処理を行う。対話制御部105は、対話データ1071に、上記関係を判定した候補データ1072のデータが含まれていると判定した場合(S508;Yes)、処理S510に進み、対話データ1071に、上記関係を判定した候補データ1072のデータが含まれていないと判定した場合(S508;No)、処理S511に進む。
【0054】
処理S509では、対話制御部105は、対話データ1071に、上記関係を判定した候補データ1072のデータ(言い換えが適切と判定されたデータ)を追加する。
【0055】
処理S510では、対話制御部105は、対話データ1071から、上記関係を判定した候補データ1072のデータ(言い換えが不適切と判定されたデータ)を削除する。
【0056】
図7は、処理S505〜S511の更新前後の対話データ1071と候補データ1072の例を示している。(1)には更新前の状態が示されており、(2)には更新後の状態が示されている。(2−1)のように、対話制御部105により言い換えが適切であると判定された場合は候補データ1072の登録フラグの値が「済」となり、対話データ1071に追加される。一方、(2−2)のように、対話制御部105により言い換えが不適切であると判定された場合は候補データ1072の登録フラグの値が「未」となり、対話データ1071に追加されない。
【0057】
図7(2−1)では、「開いている時間はいつ?」との言い換えは10回のすべての対話で適切であると判定されたため登録フラグに「済」が設定され、「開いている時間はいつ?」との言い換えが対話データ1071に登録されることを示している。一方、「休憩時間はいつ?」との言い換えは10回の対話のうち9回不適切であると判定されたため登録フラグに「未」が設定され、「開いている時間はいつ?」との言い換えが対話データ1071に登録されず、既に登録されている場合は対話データ1071に登録されていないことがわかる。
【0058】
なお、メンテナンス部106は、システム管理者がメモリ107に格納されているデータを管理するために、
図6や
図7に示す対話データ1071、候補データ1072を含む画面データを言い換え確認結果データ1073として出力するインターフェースを備えていてもよい。例えば、対話システム100を実現する情報処理装置の入出力装置103がその情報処理装置の裏面に備えられ、当該装置に、管理者により操作される上記言い換え確認結果データ1073を管理者画面として出力されてもよい。
【0059】
図11は、言い換え確認結果データ1073の例を示す図である。
図11に示すように、言い換え確認結果データ1073は、対話データ1071と同様の結果IDと質問文(Q)と回答文(A)と、候補データ1072と同様の適切フラグと不適切フラグと登録フラグと、判定された確認文を手動で上記質問文に登録するか否かを示すマニュアル登録フラグとが対応付けて記憶されている。
図11では、例えば、ユーザに対する確認文「開いている時間はいつ?」と「どこから出れるの?」のシステム結果登録フラグが「済」となっているため、それらが各質問の言い換えとして適切であると判定され、候補データ1072から対話データ1071に登録されていることを示している。
【0060】
一方、確認文「休憩時間は?」のシステム結果登録フラグは「未」となっているため、質問の言い換えとして不適切と判断され、対話データ1071に登録されていないことを示している。また、確認文「開いている時間はいつ?」はマニュアル登録フラグがチェックされている。これは管理者が対話データ1071に登録を指示していることを示している。一方、確認文「休憩時間は?」と「どこから出れるの?」はマニュアル登録フラグがチェックされていない。これは管理者が対話データ1071に登録を指示していないことを示している。これらの管理者からのマニュアル登録フラグの入力に基づき、メンテナンス部106は対話データ1071を更新する。
【0061】
すなわち、対話システム100では、上記のとおり、言い換えが適切であると判定された場合に自動的に候補データ1072から対話データ1071に登録することも可能であるが、上記言い換えの確認結果を言い換え確認結果データ1073として画面に出力し、管理者が目視でその結果を確認した上で所望の候補データ1072を選択して対話データ1071に登録する候補データ1072を選択してもよい。ユーザにとっては適切であると判断された言い換えであっても、ユーザごとに言い換えの許容度が異なるため、様々な言い換え表現が対話データ1071に登録される場合がある。したがって、上記のように管理者が言い換え確認結果データ1073を確認して登録すべきか否かを判断した上で、候補データ1072を対話データ1071に登録することにより、対話データ1071で保持するデータ量を抑えることができる。
【0062】
処理S512では、対話制御部105は、ユーザ発話と対話データ1701と候補データ1702に基づいて分岐処理を行う。具体的には、対話制御部105は、ユーザ発話に対応する言い換えが候補データ1702の中に登録フラグが未登録、すなわち対話データ1071には未登録として記憶されているデータがあるか否かを判定する。対話制御部105は、上記候補が対話データ1701に未登録として記憶されていると判定した場合(S512;Yes)、処理S513に進み、上記候補が対話データ1701に未登録として記憶されていないと判定した場合(S512;No)、回答処理S306に進む。
【0063】
処理S513では、対話制御部105は、上記言い換えの候補の数により分岐処理を行う。具体的には、対話制御部105は、対話データ1701に未登録として記憶されている上記候補が複数あるか否かを判定し、対話データ1701に未登録として記憶されている上記候補が複数あると判定した場合(S513;Yes)、処理S514に進み、対話データ1701に未登録として記憶されている上記候補が複数ないと判定した場合(S513;No)、処理S515に進む。
【0064】
処理S514では、対話制御部105は、複数の上記候補からユーザに確認するデータを1つ選択する。例えば、ランダムに選択してもよいし、言い換えが候補データ1072のデータとして登録された順に選択してもよい。
【0065】
処理S515では、対話制御部105は、候補データ1072のデータから確認文を生成し、ユーザへの回答文とする。
【0066】
なお、上記の例では、ユーザから「営業時間は?」という質問文が入力された場合、処理S305では、まずその質問文に近い質問文を対話データ1071の中から探し、その結果を元に候補データを用いてユーザにその質問の意図を確認する処理を行い、回答文を出力している。しかし、質問文に対する回答文の適合率を重視する場合は、閾値を設定し、検索結果のスコアが閾値以上でないと回答しないようにしてもよい。
【0067】
<2−4.対話制御処理における回答処理>
図8は、対話制御処理S203における回答処理S306の例を示す。対話制御部105は、回答処理S306において対話データ1071を用いる。この例では、対話データ1071には、
図4に示したように、対話IDと質問文と回答文とが対応付けて記憶されている。したがって、S306では、対話制御部105は、例えば、対話IDが1である「営業時間は?」という質問文に対し、「営業時間は10:00から18:00です。」という回答文を出力する。回答処理S306には上記のように対話データ1071の他に対話ログデータ1074を用いて、これまでの対話に基づいた回答文を出力してもよい。
【0068】
<2−5.対話制御処理における聞き返し処理>
図9は、対話制御処理S203における聞き返し処理S307の例を示す。対話制御部105は、例えば、「営業時間は?」というユーザからの質問文に対し、「よく聞き取れませんでした。もう一度言って下さい。」という回答文を出力している。この処理は、周りの雑音の影響で音声をテキストに変換する際の認識結果の確信度が低い場合や、意図解析処理が失敗した場合(意図解析結果の確信度が閾値以下の場合)に実行される。S307で出力する回答文については、あらかじめメモリ107に記憶しておけばよい。
【0069】
このように、本システムによれば、大規模な言い換えコーパスが事前に用意できない場合であっても、ユーザとの間の一連の対話の中で、言い換えの適否を確認しつつ、対話を行うことができ、自動生成された言い換え文の精度を向上させることができる。