以下、対話装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態1)
本実施の形態において、対話構造情報、対話行為タグに対応する文の情報を用いて、対話を実行する対話装置1について説明する。また、本実施の形態において、対話の中で出現している主題に合致した対話文を出力できる対話装置について説明する。また、本実施の形態において説明する対話構造情報は、例えば、有限状態トランスデューサ(FST)、重み付き有限状態トランスデューサ(WFST)の構造を有している。また、本実施の形態において、行った対話の情報である履歴情報を覚えておくことにより、例えば、ユーザが否定的に考えている対象や一度対話の中で出現した対象についての文が、対話文として出力されないような対話装置についても説明する。なお、主題とは、後述するキーワードであり、例えば、文中の名詞(名詞句を含む)、文中の主語や目的語となる名詞などである。
図1は、本実施の形態における対話装置1のブロック図である。対話装置1は、対話構造情報格納部101、出力文情報格納部102、動作手段格納部103、カレントノード識別子格納部104、履歴情報格納部105、受付部106、第一対話行為タグ取得部107、第二対話行為タグ取得部108、文取得部109、文出力部110、カレントノード識別子更新部111、実行部112、履歴情報取得部113、履歴情報蓄積部114を具備する。文取得部109は、用語取得手段1091、文取得手段1092を具備する。
対話構造情報格納部101は、対話構造情報を格納し得る。対話構造情報とは、対話の繋がりを示す情報である。対話構造情報は、対話連結情報を1以上有する。対話連結情報は、第一話者(通常、ユーザ)の出力文を抽象する第一対話行為タグと、第二話者(通常、対話装置1)の出力文を抽象する第二対話行為タグとを有する。ここで、第一話者は、例えば、対話装置1のユーザを示す。第二話者は、対話装置1内の仮想的な話者を示す。また、第一対話行為タグと第二対話行為タグのどちらかは空(後述する「eps」)でも良い。また、出力文の抽象とは、出力文の意義、意味などから、出力文を種類に分類することをいう。そして、出力文を抽象した対話行為タグは、対話行為の種類を示す情報であり、例えば、Ack(肯定的)、Ack(否定的)、Confirm、Decide、Explain、Filler、Greeting、Ask(Open−end Question)、Ask(Yes/No Question)などがある。Ackは、応答を示す対話行為タグであり、ここでのAckは、肯定的なAck、否定的なAckを有する。つまり、対話行為タグは、階層的なものでも良い。Confirmは、確認を示す対話行為タグである。Decideは決定、Explainは説明、Fillerは〜、Greetingはあいさつ、Ask(Open−end Question)は一般的な質問、Ask(Yes/No Question)は「Yes/No」のいずれかで答えることができる質問を、ぞれぞれ示す対話行為タグである。対話行為タグの詳細については、後述する。第二話者の出力文は、通常、第一話者の出力文に対応する応答の文などである。対話連結情報は、始端ノード識別子と終端ノード識別子と第一対話行為タグと第二対話行為タグとを有しても良い。また、対話連結情報は、始端ノード識別子で識別されるノードから終端ノード識別子で識別されるノードへの遷移の確率を示す情報である重み情報をも有することは好適である。対話連結情報は、動作を示す情報である動作識別子をもさらに有することは好適である。また、対話連結情報は、始端ノード識別子と終端ノード識別子を有し、第一対話行為タグ、第二対話行為タグ、動作識別子のうちの1以上の情報とを有しても良い。動作識別子とは、例えば、関数名、メソッド名、実行モジュール名などである。ここで、ノードは、概念的な対話の状態を示すものである。なお、始端ノード識別子とは、対話の始端を示すノードを識別する情報である。また、終端ノード識別子とは、対話の終端を示すノードを識別する情報である。始端ノード識別子と、終端ノード識別子とにより、1回の対話のキャッチボール(質問と回答など)が実現していることとなる。なお、対話の繋がりを示す情報とは、対話連結情報に含まれる始端ノード識別子と、対話連結情報に含まれる終端ノード識別子とにより繋がりが示されている情報でも良いし、対話連結情報間を有向リンクにより繋げることにより、繋がりが示されている情報でも良い。また、動作識別子は、第一話者が入力した文に対する処理を行う前処理の動作識別子、第二話者の出力文に対する処理を行う後処理の動作識別子、その他の一般的な処理を行う動作識別子など、いくつかの種類があり、適用される文や情報が異なっても良い。
対話構造情報格納部101は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。対話構造情報格納部101に対話構造情報が記憶される過程は問わない。例えば、記録媒体を介して対話構造情報が対話構造情報格納部101で記憶されるようになってもよく、通信回線等を介して送信された対話構造情報が対話構造情報格納部101で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された対話構造情報が対話構造情報格納部101で記憶されるようになってもよい。
出力文情報格納部102は、出力文情報を格納し得る。出力文情報とは、第二対話行為タグと1以上の文とを有する。また、出力文情報は、第二対話行為タグと、用語と、1以上の文とを有しても良い。出力文情報格納部102は、後述するキーワード管理表を保持していても良い。キーワード管理表は、出力文を検索したり、構成したりするための情報の集合であり、詳細については、後述する。出力文情報格納部102は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。出力文情報格納部102に出力文情報が記憶される過程は問わない。例えば、記録媒体を介して出力文情報が出力文情報格納部102で記憶されるようになってもよく、通信回線等を介して送信された出力文情報が出力文情報格納部102で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された出力文情報が出力文情報格納部102で記憶されるようになってもよい。
動作手段格納部103は、動作手段を1以上格納している。動作手段は、動作識別子に対応する動作を行う。動作手段とは、プログラム、実行モジュール、関数、メソッド、ハードウェアで実現された処理回路などである。動作手段は、例えば、音声認識、音声合成、機械翻訳、履歴蓄積、観光案内検索、スケジューラー、WWW検索、天気予報検索、レストラン検索、チケット予約などの動作を行う。動作手段が行える動作は問わない。動作手段格納部103は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。動作手段格納部103に動作手段が記憶される過程は問わない。例えば、記録媒体を介して動作手段が動作手段格納部103で記憶されるようになってもよく、通信回線等を介して送信された動作手段が動作手段格納部103で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された動作手段が動作手段格納部103で記憶されるようになってもよい。
カレントノード識別子格納部104は、現在の対話の状態を示すノードを識別するカレントノード識別子を格納し得る。カレントノード識別子格納部104は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。カレントノード識別子格納部104には、通常、最初は、対話のスタートポイントを示すノード識別子(例えば、「0」)が記憶されている。
履歴情報格納部105は、対話の履歴に関する情報である履歴情報を格納し得る。履歴情報とは、例えば、既に出現した対話文の中の情報であり、例えば、話題に挙がった用語である既出用語、第一話者が否定的である対象を示す否定用語、第一話者が肯定的である対象を示す肯定用語、話題に挙がった用語とユーザの評価(否定的または肯定的)を示すフラグ(例えば、肯定的な場合「1」、否定的な場合「2」など)、第一話者が保留した対象を示す保留用語などである。なお、「第一話者が否定的である対象」には、第一話者が既に行ったことがある場所、経験したことがある事象など、今後、話題に挙げて欲しいとは思わないであろう対象も含まれる。つまり、否定用語は、第一話者が否定した場所(「この場所は行きたくない。」「この場所は嫌いだ。」など)等だけではなく、第一話者が既に行ったことがある場所、経験したことがある事象などが含まれる。また、「第一話者が肯定的である対象」には、第一話者が「それに決めます。」「はい。」など、完全に肯定した対象だけではなく、「いいですね。」などの曖昧な、否定的でない対象も含まれる。つまり、肯定用語は、第一話者が完全に肯定した対象だけではなく、第一話者が曖昧に肯定したであろうと推認できる対象も含まれる。また、保留用語とは、いくつかの対象が含まれるリストのうち、一の対象が提示された場合、第一話者が「次」または「次にいってください」などの文を入力した場合、当該提示された対象が保留用語とされる。この保留用語をキーワードとして検索された文が後に、出力される可能性がある。つまり、履歴情報取得部113は、第一話者が「次」または「次にいってください」などの文を入力した場合、対話装置1が出力した文に含まれるキーワード(例えば、名詞)を取得し、当該キーワードを保留用語として、取得する。そして、履歴情報蓄積部114は、履歴情報格納部105に保留用語と保留用語であることを示すフラグを対応付けて蓄積する。なお、例えば、肯定用語を示すフラグは「1」、否定用語を示すフラグは「2」、保留用語を示すフラグは「3」などである。履歴情報格納部105は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
受付部106は、第一話者の出力文を受け付ける。第一話者(例えば、対話装置1のユーザ)は、出力文を音声により入力しても良い。また、第一話者は、出力文を、キーボードなどの入力手段により、テキストで入力しても良い。なお、出力文とは、ユーザが発声した文や入力した文等、ユーザにより出力された文、または、対話装置が出力する文などを言う。受付部106は、通常、2以上の出力文を受け付ける。受付部106は、出力文以外の命令や情報(例えば、対話装置1の起動指示など)を受け付けても良い。出力文の入力手段は、マイクやテンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。受付部106は、マイクやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
第一対話行為タグ取得部107は、受付部106が受け付けた出力文から、当該出力文に対応する第一対話行為タグを取得する。第一対話行為タグ取得部107は、第一話者から入力され、受付部106が受け付けた出力文に対して、通常、自然言語処理し、第一対話行為タグを取得する。受付部106が受け付けた出力文が音声である場合、例えば、第一対話行為タグ取得部107は、実行部112が出力文を音声認識処理して得たテキストの出力文を取得し、当該テキストの出力文に対して自然言語処理し、第一対話行為タグを取得しても良い。第一対話行為タグ取得部107は、文対話行為情報群を検索し、例えば、受付部106が受け付けた出力文と対になる対話行為タグを取得する。また、第一対話行為タグ取得部107は、例えば、受付部106が受け付けた出力文を形態素解析し、一部の形態素(例えば、文「京都でよろしいでしょうか?」の一部の形態素である「よろしいですか?」)が含まれる文と対になる対話行為タグを取得する。また、第一対話行為タグ取得部107は、例えば、受付部106が受け付けた出力文の一部と、文対話行為情報をパターンマッチングし、マッチした(部分一致も含む)文対話行為情報に含まれる対話行為タグを取得する。この取得された対話行為タグが第一対話行為タグである。なお、文対話行為情報群は、1以上の文対話行為情報の集合である。文対話行為情報は、第一対話行為タグと文、または第一対話行為タグと句、または第一対話行為タグと文の構造を示す情報などを含む情報である。なお、第一対話行為タグ取得部107は、文対話行為情報群を格納している文対話行為情報群格納手段1071を保持している、とする。
第一対話行為タグ取得部107は、通常、MPUやメモリ等から実現され得る。第一対話行為タグ取得部107の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
第二対話行為タグ取得部108は、第一対話行為タグ取得部107が取得した第一対話行為タグに対応する一の第二対話行為タグを取得する。また、第二対話行為タグ取得部108は、カレントノード識別子格納部104に格納されているカレントノード識別子と一致する始端ノード識別子に対応し、かつ、第一対話行為タグ取得部107が取得した第一対話行為タグに対応する一の第二対話行為タグを取得することは好適である。第二対話行為タグ取得部108は、取得の候補となる第二対話行為タグが2以上、存在する場合、重み情報を用いて、より高い遷移確率を示す重み情報と対になる第二対話行為タグを選択することは好適である。第二対話行為タグ取得部108は、取得の候補となる第二対話行為タグが2以上、存在する場合、例えば、カレントノード識別子で識別されるノードより2以上先の始端ノード識別子に対応する重み情報を用いて、DP(動的プログラミング)アルゴリズムを適用し、ルート内で累積された重み情報の合計である累積重み情報を用いて、最も高い遷移確率を示す累積重み情報に対応するルートに含まれる第二対話行為タグを取得しても良い。さらに、第二対話行為タグ取得部108は、対話の初めに、初期ノード(例えば、後述する始端ノード識別子「0」に対応するノード)に対応する第二対話行為タグを取得しても良い。第二対話行為タグ取得部108は、通常、MPUやメモリ等から実現され得る。第二対話行為タグ取得部108の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
文取得部109は、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得する。また、文取得部109は、履歴情報を用いて、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得することは好適である。例えば、文取得部109は、否定用語に対応する文以外の文であり、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得しても良い。また、例えば、文取得部109は、既出用語に対応する文以外の文であり、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得する。ここで、取得とは、第二対話行為タグに対応する文をすべて取得する必要はない。文取得部109は、複数の文のうちの1以上を選択して、取得しても良いし、2以上の文をすべて取得しても良い。また、「履歴情報を用いて」とは、過去に現われた用語である既出用語についての文(用語が含まれる文)は抽出しない、ユーザが否定的な評価をした用語である否定用語についての文は抽出しない、ユーザが肯定的な評価をした用語である肯定用語についての文は抽出する、1以上の保留用語をキーとして検索し、取得できた文を抽出する、などである。つまり、上記の「否定用語に対応する文」とは、例えば、否定用語が含まれる文、否定用語と対になる文、否定用語を主語に含む文などである。また、「既出用語に対応する対応する文」とは、例えば、既出用語が含まれる文、既出用語と対になる文、既出用語を主語に含む文などである。文取得部109は、通常、MPUやメモリ等から実現され得る。文取得部109の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
用語取得手段1091は、受付部106が受け付けた出力文から用語を取得する。用語取得手段1091は、例えば、出力文を形態素解析し、出力文を構成する名詞や、出力文の主語を構成する名詞、目的語となる名詞などを取得する。また、用語取得手段1091は、例えば、評価の良し悪しを示す単語や句や文の一部を格納しており、当該単語等を出力文から抽出しても良い。なお、肯定的な評価を示す単語等は、例えば、「好き」「いい」「良い」「すばらしい」などである。また、否定的な評価を示す単語等は、例えば、「嫌い」「行った」「ダメ」「いや」などである。なお、否定的な評価を示す単語等には、例えば、既に行った行動を示す用語(「行った」「やった」など)も含まれても良い。また、用語取得手段1091は、保留用語に対応する文「次」「次にいってください」などを格納しており、当該保留用語に対応する文が第一話者から入力された場合、当該第一話者からの入力前に対話装置1が出力した文や句や単語などから、保留用語を取得する。保留用語に対応する文「次」「次にいってください」などは、出力文情報格納部102に格納されている出力文情報内の文でも良い。用語取得手段1091は、通常、MPUやメモリ等から実現され得る。用語取得手段1091の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
文取得手段1092は、用語取得手段1091が取得した用語に対応し、かつ、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得する。文取得手段1092は、履歴情報を用いて、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得することは好適である。文取得手段1092は、通常、MPUやメモリ等から実現され得る。文取得手段1092の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
文出力部110は、文取得部109が取得した文を出力する。ここで、出力とは、すべて出力する必要はない意図である。また、出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、音声出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラム等への処理結果の引渡し等を含む概念である。文出力部110は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。文出力部110は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
カレントノード識別子更新部111は、文出力部110が出力した文に対応する第二対話行為タグと対になる終端ノード識別子を、カレントノード識別子格納部104のカレントノード識別子に書き換える。カレントノード識別子更新部111は、通常、MPUやメモリ等から実現され得る。カレントノード識別子更新部111の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
実行部112は、第二対話行為タグ取得部108が選択した第二対話行為タグに対応する動作識別子を取得し、当該動作識別子に対応する動作手段を実行する。実行部112は、受付部106が受け付けた出力文に対して、予め決められた動作識別子に対応する動作手段を実行しても良い。かかる処理を、適宜、前処理という。実行部112は、例えば、関数の呼び出し処理、メソッドの実行処理、実行モジュールの起動処理などの処理を行う。実行部112は、通常、MPUやメモリ等から実現され得る。実行部112の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
履歴情報取得部113は、受付部106が受け付けた出力文から、履歴情報を取得する。履歴情報取得部113は、例えば、出力文から主語や目的語となる名詞を取得し、履歴情報とする。また、履歴情報取得部113は、例えば、出力文から主語や目的語となる名詞、および評価語(「好き」「いや」など)を取得し、当該名詞と評価の結果(肯定的または否定的)を示すフラグなどを、履歴情報として取得する。履歴情報取得部113は、通常、MPUやメモリ等から実現され得る。履歴情報取得部113の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
履歴情報蓄積部114は、履歴情報取得部113が取得した履歴情報を履歴情報格納部105に蓄積する。履歴情報蓄積部114は、通常、MPUやメモリ等から実現され得る。履歴情報蓄積部114の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、対話装置1の動作について図2のフローチャートを用いて説明する。
(ステップS201)受付部106は、ユーザから、出力文を受け付けたか否かを判断する。出力文を受け付ければステップS202に行き、出力文を受け付けなければステップS201に戻る。
(ステップS202)実行部112は、前処理を行う。前処理とは、ステップS201で受け付けられた出力文に対して、予め決められた動作識別子に対応する動作手段を実行することである。なお、ここでは、例えば、実行部112は、音声認識処理を実行し、出力文のテキスト列を得る。
(ステップS203)第一対話行為タグ取得部107は、第一話者から入力され、ステップS201で受け付けられた出力文に対して自然言語処理し、第一対話行為タグを取得する。かかる処理を第一対話行為タグ取得処理という。第一対話行為タグ取得処理の詳細について、図3のフローチャートを用いて説明する。
(ステップS204)第二対話行為タグ取得部108は、ステップS203で取得された第一対話行為タグに対応する一の第二対話行為タグを取得する。かかる処理を第二対話行為タグ取得処理という。第二対話行為タグ取得処理の詳細について、図4のフローチャートを用いて説明する。なお、本ステップで、第二対話行為タグが取得できない場合もあり得る。
(ステップS205)文取得部109は、ステップS204で取得された第二対話行為タグに対応する文を、出力文情報格納部102から取得する。かかる処理を文取得処理という。文取得処理の詳細について、図5のフローチャートを用いて説明する。なお、ステップS204で第二対話行為タグが取得できなかった場合、本ステップで、文取得部109は、文を取得しない。
(ステップS206)文出力部110は、ステップS205で取得された文を出力する。ここでの出力は、対話装置1の画面への表示でも良いし、音声合成を行う動作手段へ文を渡す処理などでも良い。なお、ステップS204で第二対話行為タグが取得できなかった場合、本ステップで、文出力部110は、文を出力しない。
(ステップS207)実行部112は、いわゆる後処理を行う。後処理の詳細について、図6のフローチャートを用いて説明する。ステップS201に戻る。なお、ステップS201に戻ることにより、ユーザと対話装置1との対話が次々と進んでいく。
なお、図2のフローチャートにおいて、前処理が無い場合がある。
また、図2のフローチャートにおいて、ステップS207の後処理の後、ステップS201に戻った。しかし、ユーザからの出力文を受け付けるノード(状態)に行くまで(ユーザからの出力文を受け付ける対話連結情報に進むまで)、対話構造情報格納部101の繋がっている対話連結情報を処理しても良い。かかる処理は、ステップS202からステップS207までの処理である。その詳細は、後述する具体例において説明する。
また、図2のフローチャートにおいて、ステップS204から処理を開始しても良い。
さらに、図2のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
次に、ステップS203の第一対話行為タグ取得処理の詳細の具体例について、図3のフローチャートを用いて説明する。
(ステップS301)第一対話行為タグ取得部107は、受付部106が受け付けた出力文を形態素解析し、1以上の形態素の集合を得る。
(ステップS302)第一対話行為タグ取得部107は、カウンタiに1を代入する。
(ステップS303)第一対話行為タグ取得部107は、ステップS301で得た形態素の集合の中に、i番目の形態素が存在するか否かを判断する。i番目の形態素が存在すればステップS304に行き、i番目の形態素が存在しなければ上位処理にリターンする。なお、上位処理にリターンする前に、対話行為タグが付与されていない形態素には、対話行為タグ「eps」を付与することは好適である。
(ステップS304)第一対話行為タグ取得部107は、i番目の形態素を取得する。
(ステップS305)第一対話行為タグ取得部107は、i番目の形態素または2以上の形態素をキーとして、文対話行為情報群を検索する。
(ステップS306)第一対話行為タグ取得部107は、文対話行為情報群の中のいずれかの文対話行為情報が、キーとなる1以上の形態素に合致するか否かを判断する。合致すればステップS307に行き、合致しなければステップS308に行く。なお、合致とは、一致でも良いし、部分一致でも良い。また、表現のゆらぎや類義語などでも合致する、と看做すように処理することは好適である。表現のゆらぎや類義語などの処理は公知技術であるので、詳細な説明を省略する。
(ステップS307)第一対話行為タグ取得部107は、ステップS306で合致した文対話行為情報に含まれる対話行為タグを取得する。上位処理にリターンする。
(ステップS308)第一対話行為タグ取得部107は、次の順番の形態素が存在するか否かを判断する。次の形態素が存在すればステップS309に行き、次の形態素が存在しなければステップS310に行く。
(ステップS309)第一対話行為タグ取得部107は、検索キーとなっている1以上の形態素に次の形態素を連結する。ステップS305に戻る。
(ステップS310)第一対話行為タグ取得部107は、i番目の形態素に対話行為タグ「eps」を付与する。
(ステップS311)第一対話行為タグ取得部107は、カウンタiを1、インクリメントする。ステップS303に戻る。
次に、ステップS204の第二対話行為タグ取得処理の詳細について、図4のフローチャートを用いて説明する。
(ステップS401)第二対話行為タグ取得部108は、カレントノード識別子格納部104に格納されているカレントノード識別子を読み出し、メモリ上に配置する。
(ステップS402)第二対話行為タグ取得部108は、ステップS401で取得されたカレントノード識別子と一致する始端ノード識別子に対応し、かつ、第一対話行為タグ取得部107が取得した第一対話行為タグに対応する1以上の第二対話行為タグを、対話構造情報格納部101から取得する。本ステップにより、最終的に第二対話行為タグの候補となる1以上の第二対話行為タグが取得されることとなる。
(ステップS403)第二対話行為タグ取得部108は、カウンタiに1を代入する。
(ステップS404)第二対話行為タグ取得部108は、ステップS402で取得された1以上の第二対話行為タグの中に、i番目の高い遷移確率を示す重み情報と対になる第二対話行為タグが存在するか否かを判断する。かかる第二対話行為タグが存在すればステップS405に行き、存在しなければステップS408に行く。なお、かかる判断は、対話構造情報格納部101の対話構造情報を参照することにより行われる。
(ステップS405)第二対話行為タグ取得部108は、ステップS402で取得された1以上の第二対話行為タグの中から、i番目の高い遷移確率を示す重み情報と対になる第二対話行為タグを取得し、メモリ上に配置する。
(ステップS406)第二対話行為タグ取得部108は、i番目の高い遷移確率を示す重み情報と対になる第二対話行為タグに対応する文を出力したか否か(i番目の高い遷移確率を示す重み情報と対になる第二対話行為タグを処理済みか否か)を判断する。処理済みであればステップS407に行き、処理済みでなければステップS409に行く。
(ステップS407)第二対話行為タグ取得部108は、カウンタiを1、インクリメントする。ステップS404に戻る。
(ステップS408)第二対話行為タグ取得部108は、デフォルトの第二対話行為タグを、最終的な第二対話行為タグに決定する。デフォルトの第二対話行為タグとは、例えば、Confirm等である。上位処理にリターンする。なお、ステップS408を経由することが無い場合には、デフォルトの第二対話行為タグを予め格納する必要は無い。
(ステップS409)第二対話行為タグ取得部108は、i番目の高い遷移確率を示す重み情報と対になる第二対話行為タグを、最終的な第二対話行為タグに決定する。上位処理にリターンする。
なお、図4のフローチャートにおいて、例えば、既に処理された第二対話行為タグには、フラグが付されている、とする。
次に、ステップS205の文取得処理の詳細について、図5のフローチャートを用いて説明する。
(ステップS501)文取得部109は、第二対話行為タグ取得部108が、最終的に決定した第二対話行為タグを取得する。
(ステップS502)用語取得手段1091は、受付部106が受け付けた出力文から用語を取得する。ここでの用語は、例えば、出力文を構成する名詞、出力文を構成する名詞と評価語等である。用語取得手段1091は、出力文を形態素解析し、出力文を構成する名詞等を抽出する。なお、文から名詞や評価語を取得する技術は公知技術であるので、詳細な説明を省略する。
(ステップS503)文取得手段1092は、用語取得手段1091が取得した用語に対応し、かつ、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する1以上の文を、出力文情報格納部102から取得する。
(ステップS504)文取得手段1092は、履歴情報格納部105から履歴情報を読み出す。
(ステップS505)文取得手段1092は、ステップS504で読み出された履歴情報に、肯定用語が含まれるか否かを判断する。肯定用語が含まれればステップS506に行き、肯定用語が含まれなければステップS507に行く。
(ステップS506)文取得手段1092は、ステップS503で取得した1以上の文から、ステップS505で取得した肯定用語に対応する文を抽出する。ステップS511に行く。
(ステップS507)文取得手段1092は、ステップS504で読み出された履歴情報に、否定用語が含まれるか否かを判断する。否定用語が含まれればステップS508に行き、否定用語が含まれなければステップS509に行く。
(ステップS508)文取得手段1092は、ステップS503で取得した1以上の文から、ステップS507で取得した否定用語に対応する文を削除する。
(ステップS509)文取得手段1092は、ステップS504で読み出された履歴情報に、既出用語が含まれるか否かを判断する。既出用語が含まれればステップS510に行き、既出用語が含まれなければステップS511に行く。
(ステップS510)文取得手段1092は、ステップS503で取得した1以上の文から、ステップS509で取得した既出用語に対応する文を削除する。
(ステップS511)文取得手段1092は、残っている文から、1以上の文を取得する。ここで、残っている文が1文であれば、文取得手段1092は、当該1文を取得する。また、残っている文が2文以上であれば、文取得手段1092は、1文を選択して取得しても良いし、2文以上のうちのいくつか、またはすべてを取得しても良い。上位処理にリターンする。
なお、図5のフローチャートにおいて、履歴情報が存在しなくても良い。かかる場合、文取得手段1092は、ステップS503で取得した1以上の文から、最終的に、1文または2文以上の文を取得する。
また、図5のフローチャートのステップS502において、用語が取得できなくても良い。かかる場合、文取得手段1092は、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する1以上の文を、出力文情報格納部102から取得する。
次に、ステップS207の後処理の詳細について、図6のフローチャートを用いて説明する。
(ステップS601)カレントノード識別子更新部111は、文出力部110が出力した文に対応する第二対話行為タグと対になる終端ノード識別子を、対話構造情報格納部101から取得し、メモリ上に配置する。
(ステップS602)カレントノード識別子更新部111は、ステップS601で取得された終端ノード識別子を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
(ステップS603)実行部112は、第二対話行為タグ取得部108が選択した第二対話行為タグに対応する1以上の動作識別子を、対話構造情報格納部101から取得する。
(ステップS604)実行部112は、ステップS603で取得された1以上の動作識別子が存在するか否かを判断する。1以上の動作識別子が存在すればステップS605に行き、1以上の動作識別子が存在しなければステップS606に行く。
(ステップS605)実行部112は、ステップS603で取得された1以上の動作識別子に対応する動作手段を実行する。
(ステップS606)履歴情報取得部113は、受付部106が受け付けた出力文から、キーワードを取得する。なお、キーワードは、例えば、文中の名詞、主語となる名詞、目的語となる名詞などである。履歴情報の取得方法は問わない。
(ステップS607)履歴情報取得部113は、受付部106が受け付けた出力文から、評価語を取得する。
(ステップS608)履歴情報取得部113は、ステップS606、ステップS607において、主語や目的語となる名詞、または、主語等となる名詞と評価語を取得できたか否かを判断する。取得できればステップS609に行き、取得できなければ上位処理にリターンする。
(ステップS609)履歴情報取得部113は、取得した主語等となる名詞、または、主語等となる名詞と評価語を用いて履歴情報を構成する。取得された情報の中に評価語を含む場合、履歴情報取得部113は、当該評価語が肯定的か否定的かを判断し、「肯定的」または「否定的」に対応するフラグを取得し、当該フラグと主語となる名詞を対にして、履歴情報を構成する。
(ステップS610)履歴情報蓄積部114は、ステップS609で取得された履歴情報を履歴情報格納部105に蓄積する。上位処理にリターンする。
以下、本実施の形態における対話装置1の具体的な動作について説明する。
今、対話構造情報格納部101は、図7、および図8に示す対話構造情報管理表を格納している。対話構造情報管理表は、1以上の対話連結情報のレコードを保持している。対話連結情報は、「ID」「始端ノード識別子」「終端ノード識別子」「第一対話行為タグ」「第二対話行為タグ」「重み情報」「動作識別子」の属性を有する。なお、対話連結情報は、「始端ノード識別子」「終端ノード識別子」の属性値を有し、かつ、「第一対話行為タグ」「第二対話行為タグ」「動作識別子」のうちの1以上の属性値を有する。また、「重み情報」の属性値は存在しなくても良い。また、図7、図8において、「第一対話行為タグ」「第二対話行為タグ」の「−」はNULLである。また、「動作識別子」の属性値として、記載がない場合も、「動作識別子」がNULLである。さらに、対話連結情報のレコードは、図示していないが、ユーザからの文の入力を待つためのノードであることを示す入力待ちフラグを有しても良い。入力待ちフラグは、図7、図8において、「ID=3,4,5,12,13,18,19,30,31」のレコードに付与されている。
なお、図7、図8で使用されている対話行為タグ等について、その動作識別子の由来、意味等について、図9、図10に示す。
また、図7、および図8に示す対話構造情報管理表の「動作識別子」には、例えば、音声合成処理を示す動作識別子が、適宜、格納されている、とする。音声合成処理を示す動作識別子が格納されているレコードは、文を出力する場合に対応するレコードである。
さらに、図7、図8に示す対話構造情報管理表は、図11に示す対話状態遷移図で示される。図11に示す対話状態遷移図は、いわゆるWFSTである。
図11に示す対話状態遷移図において、網掛けノード(状態)は、ユーザからの文を待っているノードである。また、二重丸の(0)は初期ノードであり、対話の始まりを示すノードである。さらに、二重丸の(17)は終了ノードであり、対話の終了を示すノードである。
また、出力文情報格納部102は、図12、図13に示す出力文情報管理表を格納している。出力文情報管理表は、「ID」「出力文情報」を有する。「出力文情報」は、「対話行為タグ」「文」を有する。「対話行為タグ」は、「第1層」「第2層」と階層化されている。なお、「対話行為タグ」は、階層化されておらず、「第1層」のみの属性値を有する対話行為タグがあり得る。「文」において<>内の情報は、内部変数の値が代入されることを示す。内部変数は、例えば、対話装置1が、図示しない記憶媒体に予め保持しているシステム名を示す<自分>や、スポットの検索結果を示す<spot>や、キーワードを示す<対象>などである。
また、出力文情報格納部102は、図14に示すキーワード管理表を保持している。キーワード管理表は、対話装置1が行うタスク(ある話題)について、キーワードになり得る情報を格納している表である。図14において、「ranking」「spot」「activity」「sightseeing」「event」などの属性を有するレコードを多数格納している。対話装置1が行うタスクは、京都観光のガイドである。「ranking」は京都観光でのスポットの人気の度合いを示す情報である。「spot」「activity」「sightseeing」「event」は、ガイドの情報をモデル化したものである。
また、動作手段格納部103は、動作識別子で識別される各種の動作手段を格納している。動作手段には、例えば、音声合成する動作手段、文からキーワードを抽出する動作手段(Extrct_kywd)などがある。また、カレントノード識別子格納部104のカレントノード識別子は、「0」である。
また、第一対話行為タグ取得部107は、図15に示す文対話行為情報群管理表を保持している。文対話行為情報群管理表は、「ID」「対話行為タグ」「文」を有するレコードを1以上格納している。「文」は、文だけではなく、文の一部、1以上の句、1以上の節、1以上の単語などでも良い。「文」は、2以上の文を含んでも良い。なお、図15に示す文対話行為情報群管理表は、図12、図13に示す出力文情報管理表と同じ構造でも良い。そして、文対話行為情報群管理表は、図12、図13に示す出力文情報管理表と共用しても良い。かかる場合、第一対話行為タグ取得部107は、出力文情報管理表を参照して、第一対話行為タグを取得する。
さらに、対話装置1は、内部変数として、変数<自分>に「京都観光案内システム」を保持している、とする。内部変数は、例えば、履歴情報格納部105に格納されている。
かかる状況において、ユーザ(第一話者)が対話装置1を用いて、京都観光のガイドをしてもらう実施例について、以下、説明する。
ユーザは、対話装置1の電源を入れた、とする。すると、対話装置1の第二対話行為タグ取得部108は、初期ノード(例えば、始端ノード識別子「0」に対応するノード)に対応する第二対話行為タグ「Grt(start)」を、図7の対話構造情報管理表から取得する。
次に、文取得部109は、取得された第二対話行為タグ「Grt(start)」に対応する文「おいでやす。<自分>です。」を、図12の出力文情報管理表から取得する。そして、文取得部109は、文「おいでやす。<自分>です。」の変数<自分>に「京都観光案内システム」を挿入し、文「おいでやす。京都観光案内システムです。」を構成する。
次に、文出力部110は、取得された文を出力する(音声合成を行う動作手段へ文を渡す)。そして、音声合成手段は、文を音声出力する。なお、候補となる文が2以上ある場合、ここでは、文取得部109は、任意に一つの文を選択したが、2以上選択して出力しても良い。
次に、カレントノード識別子更新部111は、文出力部110が出力した文に対応する第二対話行為タグ「Grt(start)」と対になる終端ノード識別子「1」を、対話構造情報格納部101から取得し、メモリ上に配置する。
次に、カレントノード識別子更新部111は、取得された終端ノード識別子「1」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
次に、実行部112は、第二対話行為タグ「Grt(start)」に対応する1以上の動作識別子を、図7の対話構造情報管理表から取得しようとするが取得できない。
次に、履歴情報取得部113は、受付部106が受け付けた出力文は無いので、キーワードを取得できない。つまり、履歴情報蓄積部114は、履歴情報を履歴情報格納部105に蓄積しない。
次に、対話装置1は、第二対話行為タグ取得部108は、カレントノード識別子「1」をカレントノード識別子格納部104から読み出す。
そして、第二対話行為タグ取得部108は、カレントノード識別子「1」に対応する第二対話行為タグ「OQ」を、図7の対話構造情報管理表から取得する。
次に、文取得部109は、取得された第二対話行為タグ「OQ」に対応する文「どこか行きたいところはありますか?」を、図12の出力文情報管理表から取得する。そして、文出力部110は、取得された文「どこか行きたいところはありますか?」を音声出力する。
次に、カレントノード識別子更新部111は、文出力部110が出力した文に対応する第二対話行為タグ「OQ」と対になる終端ノード識別子「2」を、対話構造情報格納部101から取得し、メモリ上に配置する。
次に、カレントノード識別子更新部111は、取得された終端ノード識別子「2」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
次に、実行部112は、第二対話行為タグ「OQ」に対応する1以上の動作識別子を、図7の対話構造情報管理表から取得しようとするが取得できない。
次に、履歴情報取得部113は、受付部106が受け付けた出力文は無いので、キーワードを取得できない。つまり、履歴情報蓄積部114は、履歴情報を履歴情報格納部105に蓄積しない。
次に、対話装置1からの問いかけ「どこか行きたいところはありますか?」に対して、ユーザは、「二条城に行きたい」と音声入力した、とする。
次に、受付部106は、ユーザから、出力文「二条城に行きたい」を受け付ける。そして、実行部112は、受け付けられた出力文「二条城に行きたい」に対して、予め決められた動作識別子(音声認識処理)に対応する動作手段(音声認識処理)を実行する。そして、実行部112は、テキスト列「二条城に行きたい」を得る。
次に、第一対話行為タグ取得部107は、以下のように、「二条城に行きたい」に対応する第一対話行為タグを取得する。まず、第一対話行為タグ取得部107は、出力文「二条城に行きたい」を形態素解析し、1以上の形態素の集合「二条城,に,行き,たい」を得る。そして、第一対話行為タグ取得部107は、図3のフローチャートに従って、対話行為タグを形態素に付与し、「二条城(eps),に(eps),行きたい(Stt(prf(spot/general)))」を得る。次に、第一対話行為タグ取得部107は、「二条城に行きたい」に対応する第一対話行為タグを「Stt(prf(spot/general))」に決定する。ここで、第一対話行為タグ取得部107は、第一対話行為タグ(eps)を無視し、(Stt(prf(spot/general)))を採用する。
次に、第二対話行為タグ取得部108は、取得された第一対話行為タグ「Stt(prf(spot/general))」に対応する一の第二対話行為タグを取得する。具体的には、第二対話行為タグ取得部108は、カレントノード識別子格納部104に格納されているカレントノード識別子「2」を読み出し、メモリ上に配置する。
次に、第二対話行為タグ取得部108は、取得されたカレントノード識別子「2」と一致する始端ノード識別子に対応し、かつ、第一対話行為タグ取得部107が取得した第一対話行為タグ「Stt(prf(spot/general))」に対応する第二対話行為タグを、図7の対話構造情報管理表から取得しようとするが、取得できない。したがって、文の取得、出力は行われない。
次に、カレントノード識別子更新部111は、対応する第二対話行為タグと対になる終端ノード識別子「3」を、対話構造情報格納部101から取得し、メモリ上に配置する。
次に、カレントノード識別子更新部111は、取得された終端ノード識別子「3」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
次に、履歴情報取得部113は、受付部106が受け付けた出力文「二条城に行きたい」から、名詞「桜」を取得する。また、履歴情報取得部113は、受付部106が受け付けた出力文から、評価語を取得しようとするが取得できない。
次に、履歴情報蓄積部114は、取得した名詞「桜」を履歴情報格納部105に蓄積する。なお、かかる履歴情報は、適宜、キーワードとも言う。つまり、キーワードとは、履歴情報の一種である。
次に、次のノードに遷移し、図7の対話構造情報管理表の「ID=6」のレコードがアクセスされる。そして、実行部112は、いわゆる後処理を行う。つまり、カレントノード識別子更新部111は、「ID=6」のレコードの終端ノード識別子「4」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
次に、実行部112は、「ID=6」のレコード内の動作識別子「Extrct_kywd」を、対話構造情報格納部101から取得する。
そして、実行部112は、取得された動作識別子「Extrct_kywd」に対応する動作手段を実行する。なお、この動作は、上述した履歴情報取得部113、履歴情報蓄積部114の動作と同様である。つまり、実行部112が「Extrct_kywd」を実行することと、履歴情報取得部113、履歴情報蓄積部114の動作は同様の動作になる場合がありえる。つまり、履歴情報取得部113、履歴情報蓄積部114は、実行部112の動作の一部と特に着目して、外に出した態様である。
さらに、次のノードに遷移し、図7の対話構造情報管理表の「ID=7」のレコードがアクセスされる。そして、実行部112は、いわゆる後処理を行う。つまり、カレントノード識別子更新部111は、「ID=7」のレコードの終端ノード識別子「5」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
次に、実行部112は、「ID=7」のレコード内の動作識別子「Mk_rcmdlist(kwd)」を、対話構造情報格納部101から取得する。
そして、実行部112は、取得された動作識別子「Mk_rcmdlist(kwd)」に対応する動作手段を実行する。なお、この動作は、文取得部109が、履歴情報を用いて、第二対話行為タグ取得部108が取得した第二対話行為タグに対応する文を、出力文情報格納部102から取得する処理と同様である。
つまり、実行部112は、「Mk_rcmdlist(桜)」を実行し、図14のキーワード管理表から「桜」を<view>に含む<spot>である「二条城」「仁和寺」の推薦リストを取得する。
さらに、次のノードに遷移しようとする。つまり、次に、第二対話行為タグ取得部108は、カレントノード識別子格納部に格納されているカレントノード識別子「5」と一致する始端ノード識別子に対応する第二対話行為タグを取得しようとするが取得できない。したがって、文は出力されない。そして、実行部112は、当該レコード(「ID=9」のレコード)の動作識別子「Set_tgt」を取得する。次に、実行部112は、「Set_tgt」を実行し、例えば、推薦リスト「二条城」「仁和寺」から推薦候補「二条城」を選択する。そして、カレントノード識別子更新部111は、「ID=9」のレコードの終端ノード識別子「6」を、カレントノード識別子格納部104のカレントノード識別子に書き換える。
さらに、次のノードに遷移しようとする。つまり、次に、第二対話行為タグ取得部108は、カレントノード識別子格納部に格納されているカレントノード識別子「6」と一致する始端ノード識別子に対応し、かつ、2つの第二対話行為タグ「Rcmd(tgt)」「Stt(prcs(rcmd))」のうち、重み情報「3/4,1/4」を用いて、より高い遷移確率を示す重み情報「3/4」と対になる第二対話行為タグ「Rcmd(tgt)」を選択する。
そして、文取得部109は、「二条城」を用いて、出力する文の候補「二条城はいかがでしょうか?」を構成する。なお、出力文情報格納部102は、「<spot>はいかがでしょうか?」「<spot>をご案内します。」を、それぞれ、対話行動タグ「Rcmd(tgt)」「Stt(prcs(rcmd))」と対応付けて、予め保持している、とする。
次に、文取得部109は、取得された第二対話行為タグ「Rcmd(tgt)」に対応する文「二条城はいかがでしょうか?」を取得する。
そして、文出力部110は、取得された文「二条城はいかがでしょうか?」を出力する。
次に、実行部112は、上述した後処理を行う。
以後、対話装置1とユーザは、図7、図8の対話構造情報管理表が示すWFSTに従って、対話を進め、図16の太い矢印で示す対話を続けた、とする。
以上、本実施の形態によれば、人間は対話装置1と、より自然に、次々と対話できる。
また、本実施の形態によれば、例えば、対話構造情報(対話状態の構造)と対話で用いる文の集合を分離しているので、文の集合を入れ替えれば、種々の話題(タスク)に対応できる。
また、本実施の形態によれば、対話の内容や、対話の状況に応じた動作が可能な動作識別子、動作手段を登録しておけば、種々の対話支援を提供できる。例えば、動作が音声認識処理および音声合成処理を含む場合、音声による対話を実現できる。また、動作が機械翻訳処理を含む場合、2カ国以上の言語間での対話を実現できる。
なお、本実施の形態において、行われている対話の履歴情報(行きたい場所、肯定的な対象物、否定的な対象物など)を蓄積していくことにより、人間は対話装置1と、より自然に、次々と対話できる。つまり、ユーザが「二条城には行ったことがあります。」と入力した場合、履歴情報取得部113は、「行ったことがあります。」から、第一話者が否定的である対象を示す否定用語「二条城」を取得する。そして、文取得部109は、否定用語「二条城」に対応する文以外の文を出力文情報格納部102から取得することとなる。なお、「行ったことがあります。」「嫌い」「良くない」など、否定的な内容を示す評価語は、予め記憶手段に記憶されている。
また、本実施の形態において、対話の中で既に出現した対象(例えば、「二条城」)について、履歴情報取得部113は、既出用語として取得し、履歴情報取得部113は、既出用語「二条城」を蓄積する。そして、文取得部109は、既出用語「二条城」に対応する文以外の文を出力文情報格納部102から取得することとなる。
さらに、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをCD−ROMなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態における対話装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、第一話者の出力文を受け付ける受付部と、対話の繋がりを示す情報であり、第一話者の出力文を抽象する第一対話行為タグ、または第二話者の出力文を抽象する第二対話行為タグとを有する対話連結情報を1以上有する対話構造情報を格納している記憶媒体から、前記受付部が受け付けた出力文を用いて、当該出力文に対応する第一対話行為タグを取得する第一対話行為タグ取得部と、前記第一対話行為タグ取得部が取得した第一対話行為タグに対応する1以上の第二対話行為タグのうちの、一の第二対話行為タグを取得する第二対話行為タグ取得部と、第二対話行為タグと1以上の文とを有する出力文情報を格納している記憶媒体から、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する文を取得する文取得部と、前記文取得部が取得した文を出力する文出力部として機能させるためのプログラム、である。
また、上記プログラムにおいて、前記出力文情報は、第二対話行為タグと、用語と、1以上の文とを有し、コンピュータを、前記文取得部は、前記受付部が受け付けた出力文から用語を取得する用語取得手段と、前記用語取得手段が取得した用語に対応し、かつ、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する文を、前記出力文情報格納部から取得する文取得手段とを具備するものとして機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、前記対話連結情報は、対話の始端を示すノードを識別する始端ノード識別子と、対話の終端を示すノードを識別する終端ノード識別子と、第一対話行為タグと、第二対話行為タグとを有し、前記対話構造情報は、ノードを状態とする有限状態遷移で構成され、コンピュータを、前記文出力部が出力した文に対応する第二対話行為タグと対になる終端ノード識別子を、記憶媒体に格納されているカレントノード識別子に書き換えるカレントノード識別子更新部とをさらに具備するものとして機能させ、前記第二対話行為タグ取得部は、前記カレントノード識別子格納部に格納されているカレントノード識別子と一致する始端ノード識別子に対応し、かつ、前記第一対話行為タグ取得部が取得した第一対話行為タグに対応する一の第二対話行為タグを取得するものとして機能させるプログラム、であることは好適である。
また、上記プログラムにおいて、前記対話連結情報は、始端ノード識別子で識別されるノードから終端ノード識別子で識別されるノードへの遷移の確率を示す情報である重み情報をも有し、前記第二対話行為タグ取得部は、前記カレントノード識別子格納部に格納されているカレントノード識別子と一致する始端ノード識別子に対応し、かつ、前記第一対話行為タグ取得部が取得した第一対話行為タグに対応する2以上の第二対話行為タグのうち、前記重み情報を用いて、より高い遷移確率を示す重み情報と対になる第二対話行為タグを選択するものとして機能させるプログラム、であることは好適である。
また、上記プログラムにおいて、前記対話連結情報は、動作を示す情報である動作識別子をさらに有し、コンピュータを、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する動作識別子を取得し、当該動作識別子に対応する動作手段を実行する実行部としてさらに機能させるプログラム、であることは好適である。
また、上記プログラムにおいて、コンピュータを、前記受付部が受け付けた出力文から、履歴情報を取得する履歴情報取得部と、前記履歴情報取得部が取得した履歴情報を前記履歴情報格納部に蓄積する履歴情報蓄積部としてさらに機能させるプログラムであり、前記文取得部は、前記履歴情報を用いて、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する文を、前記出力文情報格納部から取得するものとしてさらに機能させるプログラム、であることは好適である。
また、上記プログラムにおいて、前記履歴情報は、第一話者が否定的である対象を示す否定用語を含み、前記文取得部は、前記否定用語に対応する文以外の文であり、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する文を、前記出力文情報格納部から取得するものとしてさらに機能させるプログラム、であることは好適である。
さらに、上記プログラムにおいて、前記履歴情報は、既に話題に出た用語である既出用語を含み、前記文取得部は、前記既出用語に対応する文以外の文であり、前記第二対話行為タグ取得部が取得した第二対話行為タグに対応する文を、前記出力文情報格納部から取得するものとしてさらに機能させるプログラム、であることは好適である。
(実施の形態2)
本実施の形態において、対話行為タグ付き対話文コーパスから、重み情報を自動的に学習する処理について説明する。なお、本実施の形態において、かかる学習処理は、対話装置2で行われるが、対話装置2とは別の装置で行われても良い。
図17は、本実施の形態における対話装置2のブロック図である。
対話装置2は、対話構造情報格納部101、出力文情報格納部102、動作手段格納部103、カレントノード識別子格納部104、履歴情報格納部105、受付部106、第一対話行為タグ取得部107、第二対話行為タグ取得部108、文取得部109、文出力部110、カレントノード識別子更新部111、実行部112、履歴情報取得部113、履歴情報蓄積部114を具備する。文取得部109は、用語取得手段1091、文取得手段1092、対話行為タグ付き対話文コーパス格納部201、対話行為タグ出現順序情報取得部202、重み情報構成部203、重み情報蓄積部204を具備する。
対話行為タグ付き対話文コーパス格納部201は、対話行為タグ付き対話文コーパスを格納している。対話行為タグ付き対話文コーパスとは、第一対話行為タグまたは第二対話行為タグと対話文の対の集合であり、対話の流れを示す情報である。対話行為タグ付き対話文コーパス格納部201は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。対話行為タグ付き対話文コーパス格納部201に対話行為タグ付き対話文コーパスが記憶される過程は問わない。例えば、記録媒体を介して対話行為タグ付き対話文コーパスが対話行為タグ付き対話文コーパス格納部201で記憶されるようになってもよく、通信回線等を介して送信された対話行為タグ付き対話文コーパスが対話行為タグ付き対話文コーパス格納部201で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された対話行為タグ付き対話文コーパスが対話行為タグ付き対話文コーパス格納部201で記憶されるようになってもよい。
対話行為タグ出現順序情報取得部202は、対話行為タグ付き対話文コーパス格納部201に格納されている対話行為タグ付き対話文コーパスから、第一対話行為タグまたは第二対話行為タグの順序付きの情報である対話行為タグ出現順序情報を取得する。対話行為タグ出現順序情報取得部202は、通常、MPUやメモリ等から実現され得る。対話行為タグ出現順序情報取得部202の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
重み情報構成部203は、対話行為タグ出現順序情報取得部202が取得した対話行為タグ出現順序情報を用いて、対話構造情報格納部101の対話構造情報を参照し、当該対話行為タグ出現順序情報が有する第一対話行為タグまたは/および第二対話行為タグを有する対話連結情報に含まれる重み情報を構成する。なお、第一対話行為タグまたは/および第二対話行為タグは、第一対話行為タグと第二対話行為タグのどちらか一方、または両方という意味である。重み情報構成部203は、通常、MPUやメモリ等から実現され得る。重み情報構成部203の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
重み情報蓄積部204は、重み情報構成部203が構成した重み情報を、対話構造情報格納部101に蓄積する。なお、蓄積する重み情報は、対話行為タグ出現順序情報が有する第一対話行為タグまたは/および第二対話行為タグを含む対話構造情報内の重み情報である。重み情報蓄積部204は、通常、MPUやメモリ等から実現され得る。重み情報蓄積部204の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、対話装置2が重み情報を蓄積するまでの動作について図18のフローチャートを用いて説明する。
(ステップS1801)対話行為タグ出現順序情報取得部202は、カウンタiに1を代入する。
(ステップS1802)対話行為タグ出現順序情報取得部202は、i番目の対話文が、対話行為タグ付き対話文コーパス格納部201の中の対話行為タグ付き対話文コーパスに存在するか否かを判断する。存在すればステップS1803に行き、存在しなければ処理を終了する。
(ステップS1803)対話行為タグ出現順序情報取得部202は、対話行為タグ付き対話文コーパスから、i番目の対話文に対応する対話行為タグ(第一対話行為タグまたは/および第二対話行為タグ)を取得し、メモリ上に配置する。なお、取得した1つ、または2つの対話行為タグは、対話の順序の情報も有し(2つの対話行為タグの格納順序が順序を示す情報である、としても良い)、いわゆる対話行為タグ出現順序情報である。
(ステップS1804)重み情報構成部203は、カレントノード識別子格納部104からカレントノード識別子を取得し、メモリ上に配置する。なお、カレントノード識別子の初期値は、例えば、「0」である。
(ステップS1805)重み情報構成部203は、ステップS1804で取得したカレントノード識別子を始端ノード識別子とし、ステップS1803で取得された対話行為タグを、それぞれ第一対話行為タグまたは/および第二対話行為タグとし、これらの情報(始端ノード識別子、第一対話行為タグ、第二対話行為タグ)に対応する対話構造情報(レコード)を、対話構造情報格納部101から取得し、メモリ上に配置する。
(ステップS1806)重み情報構成部203は、ステップS1805で取得した情報の中に、第一対話行為タグと第二対話行為タグの両方を含むか否かを判断する。両方を含めばステップS1807に行き、両方を含まなければステップS1810に行く。
(ステップS1807)重み情報構成部203は、対話行為タグ付き対話文コーパスから、(i+1)番目の対話文を取得する。
(ステップS1808)重み情報構成部203は、(i+1)番目の対話文に対応する対話行為タグを、対話行為タグ付き対話文コーパスから取得する。
(ステップS1809)ステップS1805で取得された第二対話行為タグが、ステップS1808で取得された第二対話行為タグと同じであるか(対応するか否か)を判断する。対応すればステップS1810に行き、対応しなければエラー処理(ステップS1815)を行う。なお、エラー処理とは、例えば、エラーメッセージを出力し、処理を終了することなどである。
(ステップS1810)重み情報構成部203は、ステップS1805で取得したレコードから重み情報を取得する。
(ステップS1811)重み情報構成部203は、ステップS1805で取得した重み情報を更新する。例えば、重み情報構成部203は、ステップS1805で取得した重み情報に予め決められた数(例えば、「1」)を加算する。かかる場合、重み情報は、いわゆるWFSTのパスを通過した回数が重み情報となる。または、重み情報構成部203は、当該回数をパラメータとして、予め決められた演算式により重み情報を算出することとなる。なお、かかる演算式は、通常、回数が多いほど重みが重くなる、回数をパラメータとする増加関数である。
また、必要に応じて、更新した重み情報に対応するレコードと同じ始端ノード識別子を有するアークに対応するレコードに含まれる重み情報を更新する。この更新とは、経由する確率を下げるように更新することである。
(ステップS1812)重み情報蓄積部204は、ステップS1811で更新された重み情報を対話構造情報格納部101に蓄積する。なお、更新する重み情報は、ステップS1810で取得された重み情報等である。
(ステップS1813)カレントノード識別子更新部111は、カレントノード識別子を、ステップS1805で取得された始端ノード識別子に対応する終端ノード識別子に、更新する。
(ステップS1814)対話行為タグ出現順序情報取得部202は、カウンタiを、処理した文の数だけ、インクリメントする。ステップS1802に戻る。
なお、図18のフローチャートにおいて、重み情報の更新の方法、アルゴリズムは問わない。重み情報がそのアークを経由した回数であれば、経由したアークに対応するレコードの重み情報を1、インクリメントするだけで良い。
以下、本実施の形態における対話装置2の具体的な動作について説明する。実施の形態1と同様に、対話構造情報格納部101は、図7、および図8に示す対話構造情報管理表を格納している。また、出力文情報格納部102は、図12、図13に示す出力文情報管理表を格納している。また、出力文情報格納部102は、図14に示すキーワード管理表を保持している。さらに、第一対話行為タグ取得部107は、図15に示す文対話行為情報群管理表を保持している。
また、対話行為タグ付き対話文コーパス格納部201は、図19に示す対話行為タグ付き対話文コーパスを格納している。対話行為タグ付き対話文コーパスは、対話行為タグと、文が対応付けられている。この対話行為タグは、例えば、人手により付与されたタグであっても良いし、図3のフローチャートを用いて説明したアルゴリズム等により、自動付与されても良い。
かかる場合、ユーザは、重み情報を自動的に学習する処理の開始指示を入力した、とする。すると、以下のように対話装置2は処理する。
まず、対話行為タグ出現順序情報取得部202は、カレントノード識別子「0」を取得する。
次に、対話行為タグ出現順序情報取得部202は、対話行為タグ付き対話文コーパスから、1番目の対話文に対応する対話行為タグ<Grt(start)>を取得する。
次に、対話行為タグ出現順序情報取得部202は、カレントノード識別子「0」を始端ノード識別子とし、1番目の対話文に対応する対話行為タグ<Grt(start)>を第一対話行為タグまたは第二対話行為タグとするレコードを、図7または図8の対話構造情報管理表から検索する。そして、対話行為タグ出現順序情報取得部202は、「ID=1」のレコードを得る。
次に、重み情報構成部203は、取得したレコードに含まれる重み情報「1」を取得し、メモリ上に配置する。なお、「1」は「1/1」と同値である、とする。
次に、重み情報構成部203は、取得した重み情報「1/1」を「2/2」に更新する。「2/2」は、2回の対話中、2回とも、本アークを経由したことを示す。なお、ここで、重み情報構成部203は、取得した重み情報「n/m」に対して、「(n+1)/(m+1)」に更新する。また、重み情報構成部203は、経由しなかったアークに対応するレコードの重み情報「n/m」に対して、「n/(m+1)」に更新する。
次に、重み情報蓄積部204は、更新された重み情報「2/2」を、図7の対対話構造情報管理表の「ID=1」のレコードの属性「重み情報」に蓄積する。
次に、カレントノード識別子更新部111は、カレントノード識別子を、取得された始端ノード識別子に対応する終端ノード識別子「1」に、更新する。
次に、対話行為タグ出現順序情報取得部202は、カレントノード識別子「1」を取得する。
次に、対話行為タグ出現順序情報取得部202は、対話行為タグ付き対話文コーパスから、2番目の対話文に対応する対話行為タグ<OQ>を取得する。
次に、対話行為タグ出現順序情報取得部202は、カレントノード識別子「1」を始端ノード識別子とし、2番目の対話文に対応する対話行為タグ<OQ>を第一対話行為タグまたは第二対話行為タグとするレコードを、図7または図8の対話構造情報管理表から検索する。そして、対話行為タグ出現順序情報取得部202は、「ID=2」のレコードを得る。
次に、重み情報構成部203は、取得したレコードに含まれる重み情報「1」を取得し、メモリ上に配置する。なお、「1」は「1/1」と同値である、とする。
次に、重み情報構成部203は、取得した重み情報「1/1」を「2/2」に更新する。そして、重み情報蓄積部204は、更新された重み情報「2/2」を、図7の対対話構造情報管理表の「ID=2」のレコードの属性「重み情報」に蓄積する。
次に、カレントノード識別子更新部111は、カレントノード識別子を、取得された始端ノード識別子に対応する終端ノード識別子「2」に、更新する。
次に、対話行為タグ出現順序情報取得部202は、カレントノード識別子「2」を取得する。
次に、対話行為タグ出現順序情報取得部202は、対話行為タグ付き対話文コーパスから、3番目の対話文に対応する対話行為タグ<Stt(no_requirement)>を取得する。
次に、対話行為タグ出現順序情報取得部202は、カレントノード識別子「2」を始端ノード識別子とし、3番目の対話文に対応する対話行為タグ<Stt(no_requirement)>を第一対話行為タグまたは第二対話行為タグとするレコードを、図7または図8の対話構造情報管理表から検索する。そして、対話行為タグ出現順序情報取得部202は、「ID=5」のレコードを得る。また、「ID=5」のレコードは、対話行為タグ<Stt(no_requirement)>ではない、対話行為タグ<Grt(end)>を含むことを、対話行為タグ出現順序情報取得部202は、検出する。そして、対話行為タグ出現順序情報取得部202は、次の文に対応する対話行為タグ<Grt(end)>を取得し、一致しているか否かを判断する。そして、一致しているので、対話行為タグ出現順序情報取得部202は、「ID=5」のレコードが処理対象のレコードであると決定する。
次に、重み情報構成部203は、取得したレコードに含まれる重み情報「1/10」を取得し、メモリ上に配置する。
次に、重み情報構成部203は、取得した重み情報「1/10」を「2/11」に更新する。そして、重み情報蓄積部204は、更新された重み情報「2/11」を、図7の対対話構造情報管理表の「ID=5」のレコードの属性「重み情報」に蓄積する。
また、重み情報構成部203は、経由しないアークに対応するレコード(「ID=3」「ID=4」のレコード)の重み情報「5/10」「4/10」をそれぞれ取得する。
そして、重み情報構成部203は、重み情報「5/10」「4/10」を、それぞれ「5/11」「4/11」に更新する。
そして、重み情報蓄積部204は、更新された重み情報「5/11」「4/11」を、それぞれ図7の対対話構造情報管理表の「ID=3」「ID=4」のレコードの属性「重み情報」に蓄積する。
以上により、図19の対話行為タグ付き対話文コーパスを学習し、重み情報を更新する処理が完了する。
以上、本実施の形態によれば、実際の対話の情報を格納したコーパスを用いて、対話の流れを制御するための重み情報を、自動的に蓄積できる。
なお、本実施の形態によれば、対話装置2が重み情報を学習した。しかし、対話構造情報格納部101、対話行為タグ付き対話文コーパス格納部201、対話行為タグ出現順序情報取得部202、重み情報構成部203、重み情報蓄積部204のみを有する重み情報学習装置が存在しても良いことは言うまでもない。かかる場合、対話装置2は、実施の形態1で説明した対話装置1と、重み情報学習装置に分離されたこととなる。
さらに、本実施の形態における対話装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、対話装置の対話構造情報格納部における重み情報を学習させるためのプログラムであって、第一対話行為タグまたは第二対話行為タグと対話文の対の集合であり、対話の流れを示す情報である対話行為タグ付き対話文コーパスから、第一対話行為タグまたは第二対話行為タグの順序付きの情報である対話行為タグ出現順序情報を取得する対話行為タグ出現順序情報取得部と、前記対話行為タグ出現順序情報を用いて、前記対話構造情報格納部の対話構造情報を参照し、当該対話行為タグ出現順序情報が有する第一対話行為タグと第二対話行為タグを有する対話連結情報に含まれる重み情報を構成する重み情報構成部と、前記重み情報構成部が構成した重み情報を、前記対話構造情報格納部に蓄積する重み情報蓄積部として機能させるためのプログラム、である。
また、図20は、本明細書で述べたプログラムを実行して、上述した実施の形態の対話装置等を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図20は、このコンピュータシステム340の概観図であり、図21は、コンピュータシステム340のブロック図である。なお、対話装置が携帯型の装置であることは好適である。
図20において、コンピュータシステム340は、FD(Flexible Disk)ドライブ、CD−ROM(Compact Disk Read Only Memory)ドライブを含むコンピュータ341と、キーボード342と、マウス343と、モニタ344、マイク345、スピーカー346とを含む。
図21において、コンピュータ341は、FDドライブ3411、CD−ROMドライブ3412に加えて、CPU(Central Processing Unit)3413と、CD−ROMドライブ3412及びFDドライブ3411に接続されたバス3414と、ブートアッププログラム等のプログラムを記憶するためのROM(Read−Only Memory)3415と、CPU3413に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのRAM(Random Access Memory)3416と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク3417とを含む。ここでは、図示しないが、コンピュータ341は、さらに、LANへの接続を提供するネットワークカードを含んでも良い。
コンピュータシステム340に、上述した実施の形態の対話装置等の機能を実行させるプログラムは、CD−ROM3501、またはFD3502に記憶されて、CD−ROMドライブ3412またはFDドライブ3411に挿入され、さらにハードディスク3417に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ341に送信され、ハードディスク3417に記憶されても良い。プログラムは実行の際にRAM3416にロードされる。プログラムは、CD−ROM3501、FD3502またはネットワークから直接、ロードされても良い。
プログラムは、コンピュータ341に、上述した実施の形態の対話装置等の機能を実行させるオペレーティングシステム(OS)、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム340がどのように動作するかは周知であり、詳細な説明は省略する。
なお、上記プログラムにおいて、情報を送信する送信ステップや、情報を受信する受信ステップなどでは、ハードウェアによって行われる処理、例えば、送信ステップにおけるモデムやインターフェースカードなどで行われる処理(ハードウェアでしか行われない処理)は含まれない。
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
また、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。