(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-11
(45)【発行日】2023-09-20
(54)【発明の名称】対話知識作成装置及び対話知識作成プログラム
(51)【国際特許分類】
G06F 16/90 20190101AFI20230912BHJP
【FI】
G06F16/90 100
(21)【出願番号】P 2022026484
(22)【出願日】2022-02-24
【審査請求日】2022-02-24
【国等の委託研究の成果に係る記載事項】(出願人による申告)国等の委託研究の成果に係る特許出願(国立研究開発法人新エネルギー・産業技術総合開発機構「人と共に進化する次世代人工知能に関する技術開発事業/人の意図や知識を理解して学習するAIの基盤技術開発/人とAIの協調を進化させるセマンティックオーサリング基盤の開発」、産業技術力強化法第17条の適用を受ける特許出願)
(73)【特許権者】
【識別番号】000000295
【氏名又は名称】沖電気工業株式会社
(74)【代理人】
【識別番号】100180275
【氏名又は名称】吉田 倫太郎
(74)【代理人】
【識別番号】100161861
【氏名又は名称】若林 裕介
(72)【発明者】
【氏名】前橋 祐斗
(72)【発明者】
【氏名】佐々木 美樹
(72)【発明者】
【氏名】村田 稔樹
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】特開2020-080025(JP,A)
【文献】特開2021-056828(JP,A)
【文献】特開2022-099042(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
予め準備された、スロット定義と関係表と問合せ項目リストとの入力を受け付ける入力手段と、
前記関係表と前記スロット定義とに基づいて、複数のスロット名のそれぞれが取り得るスロット値の全ての組合せを列挙した組合せ表を作成する組合せ表作成手段と、
前記組合せ表における、それぞれのスロット値の組合せに対して、前記関係表で定義された条件及び結果の関係に付与したルール番号を、関連付けた関係補足表を作成する関係補足表作成手段と、
前記関係表と前記組合せ表と前記関係補足表とに基づいて、それぞれのスロット値の組合せに関して、前記関係表の前記条件に関係しないスロット名のスロット値を、不定値であることを示す特殊記号に置き換えた不定値まとめ表を作成する不定値まとめ表作成手段と、
前記関係表と前記不定値まとめ表とに基づいて、ユーザ問合せ項目とその値を決定するために必要なスロットと対話順序とを示す対話知識としてのスロット表を作成するスロット表作成手段とを備
え、
前記スロット表作成手段が、
前記関係表の前記条件及び前記結果に基づくスロット名間の親子関係を用いて、親スロット名を配列した後に子スロット名を配列させたスロット名の並び順に番号を付与したスロット順序表を作成し、
前記スロット順序表のスロット名の並び順で、それぞれのスロット名が取り得るスロット値を関連づけ、それぞれのスロット名に対して前記関係表のルール番号が小さい順に要回答の値を付与した格納値表を作成し、
前記スロット表と前記格納値表とに基づいて、前記スロット表のユーザ問合せ項目の値を決定するために必要なスロット名のうち、前記格納値表の前記要回答の値が最小値であるスロット名に、対話順序が早いことを示す番号を付与する
ことを特徴とする対話知識作成装置。
【請求項2】
前記不定値まとめ表作成手段が、
前記関係表と前記組合せ表と前記関係補足表とに基づいて、前記関係表の前記ルール番号別に列挙した複数のスロット値の組合せのうち、あるスロット名のスロット値が異なっても、それぞれのスロット値の組合せが同じ結果の値であるとき、前記あるスロット名のスロット値を前記特殊記号で置き換える
ことを特徴とする請求項1に記載の対話知識作成装置。
【請求項3】
コンピュータを、
予め準備された、スロット定義と関係表と問合せ項目リストとの入力を受け付ける入力手段と、
前記関係表と前記スロット定義とに基づいて、複数のスロット名のそれぞれが取り得るスロット値の全ての組合せを列挙した組合せ表を作成する組合せ表作成手段と、
前記組合せ表における、それぞれのスロット値の組合せに対して、前記関係表で定義された条件及び結果の関係に付与したルール番号を、関連付けた関係補足表を作成する関係補足表作成手段と、
前記関係表と前記組合せ表と前記関係補足表とに基づいて、それぞれのスロット値の組合せに関して、前記関係表の前記条件に関係しないスロット名のスロット値を、不定値であることを示す特殊記号に置き換えた不定値まとめ表を作成する不定値まとめ表作成手段と、
前記関係表と前記不定値まとめ表とに基づいて、ユーザ問合せ項目とその値を決定するために必要なスロットと対話順序とを示す対話知識としてのスロット表を作成するスロット表作成手段として機能さ
せ、
前記スロット表作成手段が、
前記関係表の前記条件及び前記結果に基づくスロット名間の親子関係を用いて、親スロット名を配列した後に子スロット名を配列させたスロット名の並び順に番号を付与したスロット順序表を作成し、
前記スロット順序表のスロット名の並び順で、それぞれのスロット名が取り得るスロット値を関連づけ、それぞれのスロット名に対して前記関係表のルール番号が小さい順に要回答の値を付与した格納値表を作成し、
前記スロット表と前記格納値表とに基づいて、前記スロット表のユーザ問合せ項目の値を決定するために必要なスロット名のうち、前記格納値表の前記要回答の値が最小値であるスロット名に、対話順序が早いことを示す番号を付与することを特徴とする対話知識作成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、対話知識作成装置及び対話知識作成プログラムに関し、例えば、ユーザからの問合わせに対して直接解決情報を提示するための対話知識を作成する対話知識作成装置に適用し得るものである。
【背景技術】
【0002】
従来、ユーザからの問合せに対して解決情報を提示する手法として、例えばコンタクトセンター等での対応履歴などから質問と回答の組み合わせを抽出してFAQ(Frequently Asked Questions)を利用するシステムがある。このようなシステムは、ユーザと対話していき、ユーザの問合わせに近い質問を持つFAQを検索して、ユーザの問合せに対する回答を提示している。
【0003】
特許文献1には、データの構造を解析し、その解析結果から得られる意味内容に係る情報に基づいて、データからFAQの候補となる質問文を抽出する。これにより、文章構造の枠組みを規定せず、キーワード毎に統合することで、FAQの候補となる質問文をまとめて抽出するシステムが開示されている。
【0004】
特許文献2には、自立語間の係り受け関係や構文解析の結果として依存構造木を生成し、問合せと回答の代表文候補を抽出して集約することで、FAQ候補を生成するシステムが開示されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2012-003704号公報
【文献】特開2013-050896号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上述した従来のいずれのシステムも、FAQを作成する必要があり、ユーザの問合わせに近い質問を持つ候補をFAQから検索して出力するというものであり、ユーザの問合わせに、直接、解決情報を提示するものではない。
【0007】
ユーザに提示すべき解決情報が複数の条件によって変化する場合、FAQといった一問一答の形式ではなく、提示する解決情報を決定するための情報が充足するまで、ユーザに質問し、ユーザから回答を得るということを繰り返す対話形式のシステムの方が有効である。
【0008】
しかし、そのような対話形式のシステムを実現するには、想定するユーザとのやり取りの分岐を全て用意しておく必要がある。また、最低限の質問回数で回答を決定するためには、ユーザに質問する項目と質問する順番を適切に選択する必要がある。したがって、これらを実現するための対話知識を作成するコストが高いという課題がある。
【0009】
そのため、ユーザの問合せに対する直接解決情報を決定するための対話知識であって、質問回数を減らし、ユーザに対して質問する項目及び順番を適切に選択できる対話知識を作成する対話知識作成装置及び対話知識作成プログラムが求められている。
【課題を解決するための手段】
【0010】
かかる課題を解決するために、第1の本発明の対話知識作成装置は、予め準備された、スロット定義と関係表と問合せ項目リストとの入力を受け付ける入力手段と、関係表とスロット定義とに基づいて、複数のスロット名のそれぞれが取り得るスロット値の全ての組合せを列挙した組合せ表を作成する組合せ表作成手段と、組合せ表における、それぞれのスロット値の組合せに対して、関係表で定義された条件及び結果の関係に付与したルール番号を、関連付けた関係補足表を作成する関係補足表作成手段と、関係表と組合せ表と関係補足表とに基づいて、それぞれのスロット値の組合せに関して、関係表の条件に関係しないスロット名のスロット値を、不定値であることを示す特殊記号に置き換えた不定値まとめ表を作成する不定値まとめ表作成手段と、関係表と不定値まとめ表とに基づいて、ユーザ問合せ項目とその値を決定するために必要なスロットと対話順序とを示す対話知識としてのスロット表を作成するスロット表作成手段とを備え、スロット表作成手段が、関係表の条件及び結果に基づくスロット名間の親子関係を用いて、親スロット名を配列した後に子スロット名を配列させたスロット名の並び順に番号を付与したスロット順序表を作成し、スロット順序表のスロット名の並び順で、それぞれのスロット名が取り得るスロット値を関連づけ、それぞれのスロット名に対して関係表のルール番号が小さい順に要回答の値を付与した格納値表を作成し、スロット表と格納値表とに基づいて、スロット表のユーザ問合せ項目の値を決定するために必要なスロット名のうち、格納値表の要回答の値が最小値であるスロット名に、対話順序が早いことを示す番号を付与することを特徴とする。
【0011】
第2の本発明の対話知識作成プログラムは、コンピュータを、予め準備された、スロット定義と関係表と問合せ項目リストとの入力を受け付ける入力手段と、関係表とスロット定義とに基づいて、複数のスロット名のそれぞれが取り得るスロット値の全ての組合せを列挙した組合せ表を作成する組合せ表作成手段と、組合せ表における、それぞれのスロット値の組合せに対して、関係表で定義された条件及び結果の関係に付与したルール番号を、関連付けた関係補足表を作成する関係補足表作成手段と、関係表と組合せ表と関係補足表とに基づいて、それぞれのスロット値の組合せに関して、関係表の前記条件に関係しないスロット名のスロット値を、不定値であることを示す特殊記号に置き換えた不定値まとめ表を作成する不定値まとめ表作成手段と、関係表と不定値まとめ表とに基づいて、ユーザ問合せ項目とその値を決定するために必要なスロットと対話順序とを示す対話知識としてのスロット表を作成するスロット表作成手段として機能させ、スロット表作成手段が、関係表の条件及び結果に基づくスロット名間の親子関係を用いて、親スロット名を配列した後に子スロット名を配列させたスロット名の並び順に番号を付与したスロット順序表を作成し、スロット順序表のスロット名の並び順で、それぞれのスロット名が取り得るスロット値を関連づけ、それぞれのスロット名に対して関係表のルール番号が小さい順に要回答の値を付与した格納値表を作成し、スロット表と格納値表とに基づいて、スロット表のユーザ問合せ項目の値を決定するために必要なスロット名のうち、格納値表の要回答の値が最小値であるスロット名に、対話順序が早いことを示す番号を付与することを特徴とする。
【発明の効果】
【0012】
本発明によれば、ユーザの問合せに対する直接解決情報を決定するための対話知識であって、質問回数を減らし、ユーザに対して質問する項目及び順番を適切に選択できる対話知識を作成することができる。
【図面の簡単な説明】
【0013】
【
図1】実施形態に係る対話知識作成装置の構成を示す構成図である。
【
図2】実施形態に係るスロット定義、問合せ項目リスト、関係表の構成を示す構成図である。
【
図3】実施形態に係る対話知識作成方法の全体動作を示すフローチャートである。
【
図4】実施形態に係る組合せ表の作成処理の動作を示すフローチャートと、組合せ表の構成を示す図である。
【
図5】実施形態に係る関係補足表の作成処理を示すフローチャートである。
【
図6】実施形態に係る関係補足表の作成処理を説明する説明図である。
【
図7】実施形態に係る関係補足表の構成を示す構成図である。
【
図8】実施形態に係る不定値まとめ表の作成処理を示すフローチャートである(その1)。
【
図9】実施形態に係る不定値まとめ表の作成処理を示すフローチャートである(その2)。
【
図10】実施形態に係る不定値まとめ表の作成処理を説明する説明図である(その1)。
【
図11】実施形態に係る不定値まとめ表の作成処理を説明する説明図である(その2)。
【
図12】実施形態に係る不定値まとめ表の作成処理を説明する説明図である(その3)。
【
図13】実施形態に係る不定値まとめ表の構成を示す構成図である。
【
図14】実施形態に係るスロット表の作成処理を示すフローチャートである(その1)。
【
図15】実施形態に係るスロット表の作成処理を示すフローチャートである(その2)。
【
図16】実施形態に係るスロット表の作成処理を示すフローチャートである(その3)。
【
図17】実施形態に係るスロット表の作成処理を説明する説明図である(その1)。
【
図18】実施形態に係るスロット表の作成処理を説明する説明図である(その2)。
【
図19】実施形態に係るスロット表の作成処理を説明する説明図である(その3)。
【
図20】実施形態に係る格納値表の作成処理を示すフローチャートである。
【
図21】実施形態に係る格納値表の作成処理を説明する説明図である。
【
図22】実施形態に係る対話知識作成装置が作成したスロット表を対話システムに搭載し、ユーザとシステムとの間で対話をさせた対話例である。
【発明を実施するための形態】
【0014】
(A)主たる実施形態
以下、本発明に係る対話知識作成装置及び対話知識作成プログラムの実施形態を、図面を参照しながら詳細に説明する。
【0015】
例えば、ユーザが「日帰り出張日当支給額」を問合わせて、その額をユーザに提示するシステムがある。その例の場合、「日帰り出張日当支給額」を決定するために、例えば、「日帰り出張区分」、「地域」、「特急利用有無」、「通算距離」、「片道距離」、「片道所要時間」、「日帰り出張日当支給有無」等の条件が決められており、これら条件に応じて額が変化するものとする。システムは、「日帰り出張日支給額」を決定するまでユーザに質問を繰り返し、対話で得た情報に基づいて額を導くものとする。
【0016】
上述した例は一例であるが、上述のように解決情報を決定するまで対話を繰り返して、ユーザの問合せに対する直接解決情報を提示することになる。このとき、全ての質問項目をユーザに質問しなくても、直接解決情報を提示できることもある。
【0017】
その場合、例えばオントロジーを利用した対話システムは、定義された対話知識(以下、「スロット表」とも呼ぶ。)を用いて対話を行なうことができる。また、対話知識には、ユーザの問合せに対して直接的に解決情報を決定するまでの最適さが要求される。質問回数を減らして最適な対話を行なうためには、どの質問項目を、どの順序で質問をするかということが重要となる。
【0018】
この実施形態は、ユーザの問合せに対して直接解決情報を提示する際に、ユーザに対する質問回数を減らして、最適な質問項目を適切な順番で提供する対話知識を作成する。
【0019】
(A-1)実施形態の構成
図1は、実施形態に係る対話知識作成装置の構成を示す構成図である。
【0020】
図1において、実施形態に係る対話知識作成装置10は、入力部11、組合せ表作成部12、関係補足表作成部13、不定値まとめ表作成部14、スロット表作成部15を有する。
【0021】
対話知識作成装置10は、予め定義された、スロット定義と関係表と問合せ項目リストとを読み込み、スロット定義と関係表と問合せ項目リストとを用いて、ユーザからの問合せに対して、直接的に解決する直接解決情報を導くための対話知識を作成するものである。対話知識作成装置10が作成する対話知識を「スロット表」とも呼ぶ。
【0022】
ここで、「スロット」は、システムがユーザに質問して、質問に対する回答の値を格納するために用意する、質問のための変数である。スロットの名称を「スロット名」と呼び、スロット名が取り得る値を「スロット値」と呼ぶ。
【0023】
「スロット表」は、ユーザの問合せ項目と、問合せ項目に対する値(解決情報)を決定するために必要なスロットと対話順を示すものである。
【0024】
「スロット定義」は、スロット名と、スロット名に属するスロット値とを予め定義したものをいう。スロット定義は、人手により事前に定義される。例えば、
図2(A)に例示するスロット定義TAでは、「スロット名:A」が取り得る値として「スロット値:a1」などと定義している。より具体的に、例えば、「日帰り出張日当支給額」の場合、「スロット名:片道移動距離」に対して、その取り得る値として「スロット値:Dkm以上」、「スロット値:Dkm未満」等のように定義できる。
【0025】
「問合せ項目リスト」は、ユーザに対して問合せる項目を有するものである。問合せ項目リストは、人手により事前に定義される。
図2(B)に例示するように、問合せ項目リストTBは、スロット定義TAで定義した複数のスロット名のいずれかで構成できる。より具体的に、例えば、「日帰り出張日当支給額」の場合、「スロット名:日帰り出張区分」、「スロット名:日帰り出張日当支給有無」等のように定義できる。
【0026】
「関係表」は、あるスロットの値が決まれば、別のスロットの値が決まるというスロット間の依存関係を示すものであり、優先度が高い順に示している。関係表も、人手により事前に定義される。
図2(C)に例示するように、関係表TCは、「ルール番号」、「条件列」、「結果列」を項目に有する。例えば、「条件列」及び「結果列」はスロットの関係(スロット名及びスロット値の関係)で表すことができる。例えば、「条件列」の「スロット名:A」のスロット値が「スロット値:a1」であるとき、「スロット名:X」のスロット値が「スロット値:x1」となるという結果を「結果列」に示しており、このスロット間の関係に対して「ルール番号:1」と定義している。より具体的に、例えば、「日帰り出張日当支給額」の場合、「条件列:片道距離=Dkm以上」であるとき、「結果列:日帰り出張区分=出張A」等のように定義できる。
【0027】
なお、
図2(C)の「ルール番号:2」のように、「条件列」には、例えば、「A=a2 AND B=b2」のように、複数の条件が設定されてもよく、その複数条件を満たすときの「結果列」は、「X=x2」という結果を示すようにしてもよい。
【0028】
対話知識作成装置10は、専用のICチップ等のハードウェアとして構成してもよい。また対話知識作成装置10は、CPUが実行するプログラム(対話知識作成プログラム)を中心としてソフトウェア的に構成してもよく、その場合でも、ソフトウェアプログラムとして実現される機能は
図1で表すことができる。
【0029】
入力部11は、スロット定義TAと、問合せ項目リストTB、関係表TCととを読み込むものである。
【0030】
組合せ表作成部12は、スロット定義TAと、関係表TCとを用いて、全てのスロット値の組合せを列挙した組合せ表TDを作成するものである。
【0031】
関係補足表作成部13は、組合せ表TDの各行に、対応する関係表TCのルール番号を紐づけた関係補足表TEを作成するものである。
【0032】
不定値まとめ表作成部14は、関係表TCと、組合せ表TDと、関係補足表TEとに基づいて、条件に関係しないスロットのスロット値を特殊機能で置き換えた不定値まとめ表TFを作成するものである。
【0033】
スロット表作成部15は、関係表TCと、不定値まとめ表TFとに基づいて、対話知識としてのスロット表TGを作成するものである。スロット表作成部15は、作成したスロット表TGを出力する。
【0034】
(A-2)実施形態の動作
(A-2-1)全体動作
図3は、実施形態に係る対話知識作成方法の全体動作を示すフローチャートである。
【0035】
[ステップS101]
対話知識作成装置10において、入力部11が、スロット定義TAと、問合せ項目リストTBと、関係表TCとを入力する(ステップS101)。
【0036】
[ステップS102]
組合せ表作成部12は、入力されたスロット定義TAと、関係表TCとを用いて、組合せ表TDを作成する(ステップS102)。組合せ表TDの作成処理の詳細な説明は(A-2-2)の欄で行なう。
【0037】
組合せ表TDは、スロット定義TAで定義した、スロット名毎のスロット値の全ての組合せを示したものである。
【0038】
[ステップS103]
関係補足表作成部13は、組合せ表TDの各行に対して、対応する関係表TCのルール番号を紐付けて、関係補足表TEを作成する(ステップS103)。関係補足表TEの作成処理の詳細な説明は(A-2-3)の欄で行なう。
【0039】
関係補足表TEは、組合せ表TDにおけるスロット名毎のスロット値の組合せのそれぞれについて、当該スロット値の組合せから得られる結果の値と、その結果の値を得るルール番号との対応付けを示すものである。
【0040】
[ステップS104]
不定値まとめ表作成部14は、関係表TCと、組合せ表TDと、関係補足表TEとに基づいて、条件に関係しないスロットのスロット値を特殊記号で置き換えた不定値まとめ表TFを作成する(ステップS104)。不定値まとめ表TFの作成処理の詳細な説明は(A-2-4)の欄で行なう。
【0041】
不定値は、関係補足表TEにおいて、ある「結果の値」を得るスロット値の組合せのうち、条件に関係せず、スロット値の値を問わずに当該「結果の値」を導くことができるスロットをいう。不定値が、どのような値であっても「結果の値」を得ることができる値なので、不定値まとめ表作成部14は、不定値を、特殊記号(例えば、「@」等)に置き換える。
【0042】
[ステップS105]
スロット表作成部15は、関係表TCと、不定値まとめ表TFとに基づいて、対話知識としてのスロット表TGを作成して(ステップS105)、スロット表作成部15はスロット表TGを提供する。スロット表TGの作成処理の詳細な説明は、(A-2-5)で行なう。
【0043】
(A-2-2)組合せ表作成処理
図4(A)は、実施形態に係る組合せ表作成処理の動作を示すフローチャートである。
【0044】
[ステップS201]
組合せ表作成部12は、関係表TCの「条件列」からスロット名を抽出し、抽出したスロット名を用いて、組合せ表TDの初期状態を作成する(ステップS201)。
【0045】
例えば、組合せ表作成部12は、関係表TCから「条件列」から抽出したスロット名を、表の横方向に配列して、
図4(B)に例示するように、組合せ表TDの初期状態を作成する。このとき、関係表TCの「条件列」から抽出したスロット名が重複する場合、組合せ表作成部12は、重複を回避するため、一方のスロット名を残し、他方のスロット名を削除する。また、スロット名の配列順序は特に限定しない。すなわち、組合せ表作成部12は順不同でスロット名を配列する。
【0046】
[ステップS202]
次に、組合せ表作成部12は、スロット定義TAを参照して、組合せ表TDの初期状態で配列したスロット名毎に、スロット名が取り得るスロット値を格納する(ステップS202)。
【0047】
このとき、スロット名毎に格納したスロット値の組合せが、可能な全ての組合せとなるようにする。すなわち、組合せ表TDの横方向に見たときのスロット値の組合せが全ての組合せとなるようにする。
【0048】
このようにして、
図4(C)に例示するように、スロット名毎のスロット値を総当たりで組み合わせた組合せ表TDを、組合せ表作成部12が作成する。
【0049】
(A-2-3)関係補足表作成処理
図5は、実施形態に係る関係補足表作成処理を示すフローチャートである。
【0050】
[ステップS301]
まず、関係補足表作成部13は、組合せ表作成部12により作成された組合せ表TD(
図4(C)参照)の横方向に、「ルール番号リスト」、「結果の値」、「組合せ番号」の列を追加して、関係補足表TEの初期状態を作成する(ステップS301)。
【0051】
ここで、
図6(A)は、関係補足表TEの初期状態の構成を示す構成図である。
図6(A)に示すように、関係補足表TEにおいて「列名」の行以降の行には、各列名の値が格納される。関係補足表TEの行数をNとしたとき、カウンタ変数(以下、単に「変数」と呼ぶ。)Kで行数を指し示すことができる。このとき、カウンタ変数Kの値は、1≦K≦Nの範囲の値となる。また、
図6(B)に示すように、関係表TCの行数をMとしたとき、カウンタ変数(以下、単に「変数」と呼ぶ。)Jで指し示すことができる。このとき、カウンタ変数Jの値は、1≦J≦Mの範囲の値となる。
【0052】
[ステップS302、S303]
関係補足表作成部13は、関係表TCのカウンタ変数Jに初期値1を入れる(ステップS302)。続いて、関係補足表作成部13は、関係補足表TEのカウンタ変数Kに初期値1を入れる(ステップS303)。
【0053】
[ステップS304]
関係補足表作成部13は、関係補足表TEの第K行目の列名「ルール番号リスト」が「空」か否か(すなわち「値」が格納されているか否か)を判断する(ステップS304)。第K行目の列名「ルール番号リスト」が「空」であるとき(ステップS304/Y)、ステップS305に処理を遷移し、「空」でないとき(ステップS304/N)、ステップS309に処理を遷移する。
【0054】
[ステップS305]
関係補足表作成部13は、関係補足表TEの第K行目のスロット値が、関係表TCの第J行目の「条件列」に格納される条件を満たすか否かを確認する(ステップS305)。
【0055】
[ステップS306]
この実施形態ではステップS305の条件確認処理をサブルーチンで処理するものとする。条件を満たすときには戻り値Rの値「1」が関係補足表作成部13に通知され、条件を満たさないときには戻り値Rの値「0」が関係補足表作成部13に通知される(ステップS306)。戻り値Rが「1」のとき(ステップS306/Y)、処理はステップS307に移行し、戻り値Rが「1」でないとき(ステップS306/N)、処理はステップS309に移行する。
【0056】
[ステップS307]
ステップS305の条件確認処理で、条件を満たしている場合、関係補足表作成部13は、関係補足表TEの列名「ルール番号リスト」の第K行目に、関係表TCの列名「条件列」の第J行目に格納されているルール番号の値を入れる(ステップS307)。
【0057】
[ステップS308]
次に、関係補足表作成部13は、関係補足表TEの列名「結果の値」の第K行目に、関係表TCの列名「結果列」の第J行目に格納されている値(結果の値)を入れる(ステップS308)。
【0058】
上述したステップS304~S308の処理について、
図6(A)及び
図6(B)を参照して説明する。
【0059】
例えば、K=1、J=1とする。関係補足表TEにおいて、列名「ルール番号リスト」の第1行目(変数K=1)は、値が格納されておらず、「空」とする。次に、関係補足表TEの第1行目(変数K=1)のスロット値の組合せと、関係表TCの列名「条件列」の第1行目(変数J=1)に格納されている条件とを比較する。
【0060】
このとき、関係補足表TEの第1行目のスロット値の組合せが、「A=a1、B=b1、C=c1、…」とし、関係表TCの列名「条件列」の第1行目は「A=a1」とするとき、関係補足表TEの第1行目のスロット値の組合せは、関係表TCの列名「条件列」の第1行目に格納されている条件「A=a1」を含んでいる。
【0061】
したがって、関係補足表作成部13は、関係補足表TEの列名「ルール番号リスト」の第1行目に、関係表TCの第1行目のルール番号の値「1」を格納する。さらに、関係補足表作成部13は、関係補足表TEの列名「結果の値」の第1行目に、関係表TCの結果列の第1行目に格納されている結果の値「X=x1」を格納する。
【0062】
[ステップS309]
ステップS309では、関係補足表TEの最終行まで処理したか否かを確認するため、変数Kの値がNであるかを判断する(ステップS309)。そして、変数KがNであるとき(ステップS309/Y)、処理はステップS311に移行する。変数KがNでないとき(ステップS309/N)、処理はステップS310に移行する。
【0063】
[ステップS310]
ステップS310では、関係補足表TEの次の行に対する処理を行なうため、関係補足表作成部13は、関係補足表TEのカウンタ変数Kの値に1を加え(ステップS310)、その後、ステップS304に移行し、関係補足表TEの次の行について処理を繰り返し行なう。
【0064】
[ステップS311、S312]
ステップS311では、変数Jの値がMであるかを確認する(ステップS311)。そして、変数Jの値がNでないとき(ステップS311/N)、関係補足表作成部13は、変数Jの値に1を増やして(ステップS312)、ステップS303に移行して処理を繰り返す。また、変数Jの値がMであるとき(ステップS311/Y)、ステップS313に移行する。
【0065】
[ステップS313]
ステップS313では、関係補足表作成部13が、関係補足表TEの列名「組合せ番号」について値「1」から昇順に整数を入れて(ステップS313)、
図7に例示するような関係補足表TEを作成する。
【0066】
(A-2-4)不定値まとめ表作成処理
図8及び
図9は、実施形態に係る不定値まとめ表作成処理を示すフローチャートである。
【0067】
[ステップS401]
まず、不定値まとめ表作成部14は、関係表TCの行数をMとし、カウンタ変数Jに初期値1を入れる(ステップS401)。
【0068】
[ステップS402]
次に、不定値まとめ表作成部14は、関係補足表TEに基づいて、不定値まとめ表TFの初期状態を作成する(ステップS402)。
【0069】
例えば、
図10(A)は、不定値まとめ表TFの初期状態の構成を示す構成図である。不定値まとめ表作成部14は、関係補足表TEの列名「ルール番号リスト」の列を削除し、関係補足表TEの列名「組合せ番号」の名称を、列名「組合せ番号リスト」に置き換える。さらに、不定値まとめ表作成部14は、列名「まとめ番号」の列を追加する。
【0070】
[ステップS403]
不定値まとめ表作成部14は、関係表TCと、関係補足表TEとを用いて、ルール番号別組合せ表TFaを作成する(ステップS403)。
【0071】
例えば、不定値まとめ表作成部14は、関係補足表TEの列名「ルール番号リスト」において、関係表TCの列名「ルール番号」のJ(変数J=1)行目の値が含まれている行を、関係補足表TEから抽出する。つまり、関係表TCのルール番号「1」を含んでいるスロット値の組合せを、不定値まとめ表作成部14は抽出する。
【0072】
そして、不定値まとめ表作成部14は、抽出した関係補足表TEの列名「ルール番号リスト」の列を削除する。さらに、列名「組合せ番号」の名称を、列名「組合せ番号リスト」に変更する。
【0073】
このようにして、例えばルール番号「1」に関するルール番号別まとめ表TFa(
図10(B)参照)を、不定値まとめ表作成部14は作成する。
【0074】
[ステップS404、S405]
ここで、組合せ表TDの列数Pとして、カウンタ変数G(1≦G≦P)とする。さらに、ルール番号別組合せ表TFaの行数をNとして、カウンタ変数L(1≦L≦N)とする。ルール番号別組合せ表TFaの列数をPとして、カウンタ変数Hとする。
【0075】
なお、組合せ表TD、関係補足表TE、ルール番号別組合せ表TFaの行数はそれぞれNである。
【0076】
不定値まとめ表作成部14は、ルール番号別組合せ表TFaの行数をNとし(ステップS404)、組合せ表TDの列数をPとして、カウンタ変数Gに初期値1を入れる(ステップS405)。
【0077】
[ステップS406]
不定値まとめ表作成部14は、ルール番号別組合せ表TFaの第H列目に格納されている値が、全ての同じであるか否かを判断する(ステップS406)。
【0078】
第H列目の値が全て同じである場合(ステップS406/Y)、不定値まとめ表作成部14はステップS418に処理を移行する。ステップS418で、不定値まとめ表作成部14は変数Hの値に「1」を加えて、その後ステップS406に戻り、処理を繰り返す。
【0079】
他方、第H列目の値が全て同じでない場合(ステップS406/N)、不定値まとめ表作成部14は、ステップS407に処理を移行する。
【0080】
図11(A)の例を用いて説明する。
図11(A)のルール番号別組合せ表TFaにおいて、第1(変数H=1)列目の列名「A」の列に格納されている値が全て「a1」であるとする。その場合、第1列目の値が全て同じであると判断し、不定値まとめ表作成部14は、ステップS418に遷移して、変数Hに「1」を加える。すなわち、次の列(この例の場合、第2列目)に格納されている値が全て同じか否かを、不定値まとめ表作成部14は判断する。
【0081】
そして、
図11(A)の場合、第2列目の列名「B」の列の値は、「b1」、「b2」のように、全て同じでないものとする。その場合、不定値まとめ表作成部14は、ステップS407に処理を移すことになる。
【0082】
[ステップS407、S408、S409]
不定値まとめ表作成部14は、変数Lに初期値1を入れて(ステップS407)、ルール番号別組合せ表TFaにおける、第L行目の値の組合せのうち、第H列目の値が不定値であるか否かを確認する不定値確認処理を行なう(ステップS408)。
【0083】
ここで、不定値は、スロット値の組合せの中で、色々な値をとることができる値であるが、不定値は、スロット定義TAで定義したスロットの値を網羅している必要がある。そこで、不定値まとめ表作成部14は、第L行目の第H列目の値が、スロット定義TAで定義されている当該スロットの取りうる値を満たしているか否かを確認する。そして、第H列目の値が、スロット定義TAの取り得る値を満たしているとき、不定値であるとし、満たしていないとき、不定値でないとする。
【0084】
そして、不定値である場合(ステップS408/Y)、不定値を特殊記号に置換するため、ステップS410に処理を移行する(ステップS409)。不定値でない場合(ステップS408/N)、ステップS415に処理を移行する(ステップS409)。
【0085】
[ステップS410~S414]
不定値まとめ表作成部14は、第L行目の第H列目及び組合せ番号リスト以外の値が全て同じ値である行を、当該ルール番号別組合せ表TFaから抽出して、不定値候補抽出表TFbを作成する(ステップS410)。つまり、組合せ番号リストの値を除いて、第H列目以外の第L行目の値と全て同じ値である行を、不定値まとめ表作成部14は抽出する。
【0086】
そして、不定値まとめ表作成部14は、ルール番号別組合せ表TFaの第L行目をコピーする。さらに、第H列目及び「組合せ番号リスト」の値を空にして、
図12(B)に例示する不定値置換表TFcの初期状態を作成する(ステップS411)。
【0087】
さらに、不定値まとめ表作成部14は、
図12(A)の不定値候補抽出表TFbの列名「組合せ番号リスト」の列に格納されている全ての値をマージして、不定値置換表TFcの列名「組合せ番号リスト」に格納する。さらに、不定値まとめ表作成部14は、不定値置換表TFcの第H列目に、不定値であることを示す特殊記号(例えば「@」)を入れる(ステップS412)。
【0088】
ここで、ステップS412により、特殊記号に置き換えた行を「置換行」と呼ぶ。
【0089】
[ステップS413、S414]
不定値まとめ表作成部14は、ルール番号別組合せ表TFaから、不定値置換表TFcにある全ての行を削除し(ステップS413)、ルール番号別組合せ表TFaに「置換行」を追加する(ステップS414)。
【0090】
[ステップS415、S416]
不定値まとめ表作成部14は、ルール番号別組合せ表TFaの第H列目の全ての行について処理を繰り返すため、カウンタ変数Lの値がNであるか否かを確認する(ステップS415)。
【0091】
そして、カウンタ変数Lの値がNでない場合(ステップS415/N)、カウンタ変数Nの値に「1」を加えて(ステップS416)、第H列目の次の行について処理を繰り返すため、ステップS408に移行する。
【0092】
カウンタ変数Lの値がNである場合(ステップS415/Y)、ステップS417に移行する。
【0093】
[ステップS417、S418、S419]
不定値まとめ表作成部14は、ルール番号別組合せ表TFaの次の列について処理を繰り返すため、カウンタ変数Hの値がPであるか否かを確認する(ステップS417)。
【0094】
そして、カウンタ変数Hの値がPでない場合(ステップS417/N)、カウンタ変数Hの値に「1」を加えて(ステップS418)、次の列について処理を繰り返すため、ステップS406に移行する。
【0095】
カウンタ変数Hの値がPである場合(ステップS417/Y)、不定値まとめ表作成部14は、ルール番号別組合せ表TFaを、不定値まとめ表TFに追加し(ステップS419)、ステップS420に移行する。
【0096】
[ステップS420~S421]
不定値まとめ表作成部14は、関係表TCの全てのルール番号について処理を繰り返すため、関係表TCの行数を示すカウンタ変数Jの値がMであるか否かを確認する(ステップS420)。
【0097】
そして、カウンタ変数Jの値がMでない場合(ステップS420/N)、カウンタ変数Jの値に「1」を加えて(ステップS420)、次のルール番号について処理を繰り返すため、ステップS403に移行する。
【0098】
カウンタ変数Jの値がMである場合(ステップS420/Y)、
図13に例示する不定値まとめ表TFで、列名「まとめ番号」の列に「1」から昇順の値を入れる(ステップS421)。
【0099】
このようにして、
図13に例示するように、不定値まとめ表TFを作成することができる。
【0100】
(A-2-5)スロット表作成処理
図14~
図16は、実施形態に係るスロット表作成処理を示すフローチャートである。
【0101】
[ステップS501]
スロット表作成部15は、不定値まとめ表TFを用いて、列名「まとめ番号前リスト」と列名「まとめ番号後リスト」とを有するまとめ番号リストTGaを作成する(ステップS501)。
【0102】
例えば、スロット表作成部15は、
図17(A)に例示するように、列名「まとめ番号前リスト」と列名「まとめ番号後リスト」を有するまとめ番号リストTGaを作成する。そして、スロット表作成部15は、不定値まとめ表TFの列名「まとめ番号」に格納されている値(すなわち、まとめ番号の値)を、列名「まとめ番号前リスト」に格納する。このように、
図17(A)に例示するまとめ番号リストTGaが作成される。
【0103】
[ステップS502]
スロット表作成部15は、関係表TCを用いて、関係木表TGbを作成する(ステップS502)。
【0104】
図17(B)を用いて説明する。関係木表TGbは、列名「親スロット名」と、列名「子スロット名」と、列名「ルール番号リスト」とを有する。
【0105】
スロット表作成部15は、関係表TCの「ルール番号」に関連付けられた「条件列」及び「結果列」について、「条件列」のスロット名を親スロット名とし、「結果列」のスロット名を子スロット名として、両者を関連付ける。親スロット名と子スロット名とを関連付けたテーブルが、関係木表TGbである。
【0106】
例えば、
図17(B)の関係表TCの「ルール番号:1」の「条件列」から「スロット名:A」を抽出し、この「スロット名:A」を親スロットとする。また、「ルール番号:1」の「結果列」から「スロット名:X」を抽出し、「スロット名:X」を子スロット名とする。さらに、スロット表作成部15は、「ルール番号:1」を、列名「ルール番号リスト」に入れる。
【0107】
なお、例えば、関係表TCの「ルール番号:2」のように、「A=a2 AND B=b2」の複数の条件が「条件列」に設定されている場合には、「スロット名:A」と「スロット名:B」のそれぞれが、「子スロット名:X」に対する親スロット名とする。
【0108】
ステップS502では、関係表TCに定義されている全てのルール番号について、スロット表作成部15が、上述した処理を繰り返し行ない関係木表TGbを作成する。
【0109】
[ステップS503]
スロット表作成部15は、関係木表TGbを用いて、スロット順序表TGcを作成する(ステップS503)。
【0110】
図17(B)を用いて説明する。スロット順序表TGcは、列名「スロット名」と、列名「スロット順序」とを有する。
【0111】
スロット表作成部15は、関係木表TGbの列名「親スロット名」の列に格納されているスロット名を、その順序で、スロット順序表TGcの列名「スロット名」に格納する。また、スロット表作成部15は、スロット順序表TGcの列名「スロット順序」の列に「1」から昇順の値を入れる。
【0112】
次に、スロット表作成部15は、スロット順序表TGcの列名「スロット名」に「親スロット名」を格納した後、次の行から連続して、関係木表TGbの列名「子スロット名」の列に格納されているスロット名を、列名「スロット名」に格納する。同時に、スロット表作成部15は、列名「スロット順序」の列に、親スロット名を抽出した際の続きの番号を昇順で入れて、スロット順序表TGcを作成する。
【0113】
なお、スロット名の重複を回避するため、重複するスロット名については削除する。例えば、格納順が遅いスロット名の方を削除する。
【0114】
[ステップS504]
スロット表作成部15は、スロット表TGの列名(初期状態)を作成する(ステップS504)。
【0115】
図18(A)は、スロット表TGの初期状態の構成を示す構成図である。スロット表TGは、列名「ユーザ問合せ項目」を有する。さらに、スロット順序表TGcの「スロット名」に格納したスロット名を上から順に抽出し、抽出したスロット名を、その順序で、スロット表TGの列名の行方向に並べる。
【0116】
[ステップS505、S506]
ここで、
図18(A)のスロット表TGの行数をWとして、カウンタ変数U(1≦U≦W)とする。
図18(B)の問合せ項目リストTBの行数をTとして、カウンタ変数S(1≦S≦T)とする。
【0117】
スロット表作成部15は、カウンタ変数Uの値に初期値「1」を入れる(ステップS505)。次に、スロット表作成部15は、問合せ項目リストTBの行数をMとして、カウンタ変数Sに初期値「1」を入れる(ステップS506)。
【0118】
[ステップS507]
スロット表作成部15は、スロット表TGの列名「ユーザ問合せ項目」の第U行目に、問合せ項目リストTBの第S行目の値を入れる(ステップS507)。
【0119】
例えば、
図18(A)に例示するスロット表TGの列名「ユーザ問合せ項目」の第1行目に、
図18(B)の問合せ項目リストTBの第1行目の値である「Y1」を入れる。
【0120】
[ステップS509]
スロット表作成部15は、格納値表TGdを作成する(ステップS509)。
【0121】
図19(C)及び
図19(D)に、格納値表TGdの構成例を示している。
図19(C)及び
図19(D)に例示するように、格納値表TGdは、「スロット名」、「要回答」、「格納前値リスト」、「格納後値リスト」を列名に有する。
【0122】
例えば、スロット表作成部15は、関係木表TGbを用いて、Y1の先祖のスロットである「スロット名:B」を検索する。そして、スロット表作成部15は、スロット定義TAを用いることにより、「スロット名:B」が取りうる値「b1、b2、b3、…」を検索する。そして、「スロット名:B」が取りうる値「b1、b2、b3、…」を、格納値表TGdの「格納値前リスト」に入れることで、格納値表TGdを作成する。
【0123】
なお、(A-2-6)で、格納値表TGdの作成例を示す処理フローを例示する。
【0124】
[ステップS510]
スロット表作成部15は、格納値表TGdの列名「要回答」の列に格納されれている値の中で、最小値となっているスロット名を特定する。そして、スロット表TGの第U行目において、特定したスロット名の列に、ユーザに要回答である旨と回答順(すなわち問合せ順ともなる。)とを示す回答順情報を入れる。
【0125】
この実施形態では、例えば、回答順情報を「*1」等と表現する。例えば回答順序情報「*1」のうち、「*(アスタリスク)」は要回答である旨を示す情報であり、「1」は回答順を示す情報とする。
【0126】
例えば、
図18(C)に例示する格納値表TGdを用いて説明する。
図18(C)の格納値表TGdの列名「要回答」の列に格納されている値の中で、最小値は「2」であり、最小値「2」のスロット名は「スロット名:B」であることが分かる。したがって、スロット表作成部15は、スロット表TGの第1(U=1)行目の「スロット名:B」の列に「*1」を入れる。
【0127】
[ステップS511、S512、S513]
スロット表作成部15は、スロット表TGの第U行目の下に、新たに行を追加し、カウンタ変数Uに「1」を加える(ステップS511)。すなわち、カウンタ変数Uは、追加した行を指し示している。
【0128】
その後、スロット表作成部15は、スロット表TGの第(U-1)行目をコピーして第U行目に貼り付ける(ステップS512)。
【0129】
[ステップS513]
スロット表作成部15は、スロット表TGの第U行目(新しく追加した行)のスロットの値が「*1」であるスロットに、格納値表TGdの同じスロット名の列名「格納前値リスト」に格納されている値のうち、いずれかの値を入れる(ステップS513)。
【0130】
例えば、
図19(A)のスロット表TGを用いて説明する。例えば、第2行目を追加した後、第1行目をコピーして第2行目に貼り付ける。そうすると、「スロット名:B」の第2行目が「*1」となるが、「*1」を、格納値表TGdの「スロット名:B」の列名「格納前値リスト」のいずれかの値「b1」に、スロット表作成部15は置き換える。
【0131】
[ステップS514]
スロット表作成部15は、スロット表TGの第U行目の「*1」のスロットに入れた値を、格納値表TGdの列名「格納前値リスト」から削除し、列名「格納後値リスト」に追加する。
【0132】
例えば、
図18(C)及び
図18(D)を用いて説明する。ステップS514で、スロット表TGの「*1」に代えて値「b1」に格納すると、スロット表作成部15は、格納した値「b1」を、格納値表TGdの列名「格納前値リスト」から削除し、列名「格納後値リスト」に追加する。
【0133】
[ステップS515、S516]
スロット表作成部15は、スロット表TGの第U行目の行の値が、全て一致する不定値まとめ表TFの行を検索する完全一致確認処理を行なう(ステップS515)。つまり、新たに追加した行(例えば2行目)の値と全て一致する行が、不定値まとめ表TFに存在するか否かを、スロット表作成部15は検索する。
【0134】
そして、全て一致する行が不定値まとめ表TFにある場合(ステップS516/Y)、ステップS523に移行する。他方、全て一致する行が不定値まとめ表TFにない場合(ステップS516/N)、ステップS517に移行する。
【0135】
[ステップS523~S525]
スロット表TGの第U行目の行の値と全て一致する行が、不定値まとめ表TFにある場合(ステップS516/Y)、その行をT行目とし、スロット表作成部15は、不定値まとめ表TFのT行目の「結果の値」列の「スロット名=値」を「=」で分割して「値」を抽出し、抽出した「値」を「V1」に置き換える(ステップS523)。
【0136】
スロット表作成部15は、スロット表TGの列名「ユーザ問合せ項目」の第U行目の値と同じ列名の列に「V1」を入れる(ステップS524)。
【0137】
スロット表作成部15は、不定値まとめ表TFの列名「まとめ番号」の第T行目の値を、まとめ番号リストTGaの列名「まとめ番号前リスト」から削除し、列名「まとめ番号後リスト」に追加する(ステップS525)。
【0138】
[ステップS517、S518]
全て一致する行が不定値まとめ表TFにない場合(ステップS516/N)、スロット表作成部15は、スロット表TGの第U行目の行の値と、部分的に一致する行が、不定値まとめ表TFにあるか否かを検索する部分一致確認処理を行なう(ステップS517)。つまり、部分的に一致する行が不定値まとめ表TFに存在するか否かを、スロット表作成部15は検索する。
【0139】
そして、部分一致する行が不定値まとめ表TFにある場合(ステップS518/Y)、ステップS519に移行する。他方、部分一致する行が不定値まとめ表TFにない場合(ステップS518/N)、ステップS526に移行する。
【0140】
[ステップS519、S520]
部分一致する行が不定値まとめ表TFにある場合、スロット表作成部15は、スロット表TGの第U行目の下に、新たに行を追加し、カウンタ変数Uに「1」を加える(ステップS519)。
【0141】
その後、スロット表作成部15は、スロット表TGの第(U-1)行目をコピーして第U行目に貼り付ける(ステップS520)。
【0142】
[ステップS521]
スロット表作成部15は、以下に例示するように、スロット表TGの第U行目(新たに追加した行)に、回答順序情報(例えば「*数字」)のうちの数字を付与する部分的数字付与処理を行なう(ステップS521)。
【0143】
例えば、スロット表作成部15は、列名「スロット名」と列名「要回答」を有する要回答表TGeの初期状態(
図19(B)参照)を作成する。
【0144】
次に、ステップS517で部分的に一致した不定値まとめ表TFの行に値があり、スロット表TGの第U行目(ステップS519で新しく追加した行)には値が無いスロットがある場合は、スロット表作成部15は、そのスロット名をQとして、要回答表TGeに行を追加して、スロット名にQを入れる。
【0145】
また、スロット表作成部15は、関係表TCを参照して、ルール番号の値が小さいルールの「条件列」にスロット名が出現する順番で、要回答表TGeの列名「要回答」の列に数字を付与する。
【0146】
最後に、要回答表TGeのスロット名と一致する、スロット表TGの第U行目のスロットに、要回答を示す情報(「*」)と回答順を示す値(数字)を付与する。
【0147】
[ステップS522]
スロット表作成部15は、以下に例示するように、スロット表TGの第U行目(新たに追加した行)において、スロット名の値が回答順情報(例えば「*1」等)である場合、当該回答順情報(「*1」等)を、部分的に一致した不定値まとめ表TFの行における当該スロット名の値に置き換える部分的値付与処理を行なう(ステップS522)。
【0148】
なお、スロット表TGの第U行目に2以上の「*」がある場合には、処理をステップS515に移行して、「*」がなくなるまで繰り返し処理を行なう。
【0149】
[ステップS526、S527]
部分的に一致する行が不定値まとめ表TFにない場合(ステップS518/N)、スロット表作成部15は、スロット表TGの第U行目の下に、新たに行を追加し、カウンタ変数Uに「1」を加える(ステップS526)。
【0150】
その後、スロット表作成部15は、スロット表TGの第(U-1)行目をコピーして第U行目に貼り付ける(ステップS527)。
【0151】
[ステップS528]
スロット表作成部15は、スロット表TGの第U行目(新しく追加した行)の列名「ユーザ問合せ項目」の値と同じ列名の列の値を空にする(ステップS528)。
【0152】
[ステップS529]
スロット表作成部15は、要回答表TGeの列名「要回答」に格納される値のうち、最大値であるスロット名を「V2」とする(ステップS529)。
【0153】
[ステップS530]
スロット表作成部15は、格納値表TGdの「スロット名:V2」の列名「格納前値リスト」に値が格納されているか否かを確認する(ステップS530)。
【0154】
そして、「スロット名:V2」の「格納前値リスト」に値があれば(ステップS530/Y)、ステップS531に移行する。他方、「スロット名:V2」の「格納前値リスト」に値がなければ(ステップS530/N)、ステップS533に移行する。
【0155】
[ステップS531、S532]
スロット表作成部15は、格納値表TGdの「スロット名:V2」の「格納前値リスト」に格納されているいずれかの値を、スロット表TGの第U行目の列名V2の列に入れる(ステップS531)。
【0156】
そして、スロット表作成部15は、スロット表TGの第U行目の列名V2の列に入れた値を、格納値表TGdの「スロット名:V2」の「格納前値リスト」から削除し、「格納後値リスト」に追加する(ステップS532)。その後、ステップS515に移行して、繰り返し処理を行なう。
【0157】
[ステップS533]
ステップS530で、格納前値リストに値がない場合、スロット表作成部15は、スロット表TGの第U行目(新たに追加した行)の列名V2である列の値を空にする(ステップS533)。
【0158】
[ステップS534]
スロット表作成部15は、格納値表TGdの「格納前値リスト」の全ての値が空であるか否かを確認する(ステップS534)。
【0159】
[ステップS535]
スロット表作成部15は、格納値表TGdの「スロット名:V2」である「格納後値リスト」の値を「格納前値リスト」に入れて、「格納後値リスト」を空にする(ステップS535)。
【0160】
[ステップS536]
スロット表作成部15は、要回答表TGeの「要回答」の値が最大値の次に大きい値(すなわち、[最大値-1]の値)であるスロット名をV3にする(ステップS536)。
【0161】
[ステップS537]
スロット表作成部15は、格納値表TGdの「スロット名:V3」の「格納前値リスト」からいずれかの値を、スロット表TGの第U行目(新たに追加した行)の列名がV3である列に入れる(ステップS537)。
【0162】
[ステップS538]
スロット表作成部15は、スロット表TGの第U行目の列名がV3である列に入れた値を、格納値表TGdの「スロット名:V3」の「格納前値リスト」から削除して、「格納後値リスト」に追加する(ステップS538)。
【0163】
[ステップS539]
スロット表作成部15は、要回答表TGeの「要回答」の最大値を変更する要回答最大値変更処理を行なう(ステップS539)。その後、ステップS515に移行して、繰り返し処理を行なう。
【0164】
[ステップS540、S541]
ステップS534で格納値表TGdの「格納前値リスト」の全ての値が空である場合、スロット表作成部15は、問合せ項目リストTBのカウンタ変数Sの値がTであるか否かを確認する(ステップS540)。
【0165】
そして、カウンタ変数Sの値がTでない場合(ステップS540/N)、スロット表作成部15は、Sの値を1増やして(ステップS541)、ステップS507に移行して、処理を繰り返す。
【0166】
他方、カウンタ変数Sの値がTである場合(ステップS540/Y)、ステップS542に処理を移行する。
【0167】
[ステップS542]
スロット表作成部15は、まとめ番号リストTGaの列名「まとめ番号前リスト」の値が空であるか否かを確認する(ステップS542)。
【0168】
そして、「まとめ番号前リスト」の値が空である場合(ステップS542/Y)、処理を終了する。
【0169】
他方、「まとめ番号前リスト」の値が空でない場合(ステップS542/N)、スロット表作成部15は、まとめ番号リストTGaの「まとめ番号前リスト」に格納されている番号の通りに、スロット表TGに「*数字」を入れる残対応処理を行なう(ステップS543)。その後、ステップS515に移行して、繰り返し処理を行なう。
【0170】
(A-2-6)格納値表TGdの作成処理例
図20は、実施形態に係る格納値表TGdの作成処理の一例を示すフローチャートである。
【0171】
ここでは、問合せ項目リストTBの第1行目にある値「Y1」を用いて、格納値表TGdを作成する場合を例示する。
【0172】
[ステップS601]
まず、スロット表作成部15は、格納値表TGdの初期状態を作成する(ステップS601)。
【0173】
例えば、スロット表作成部15は、
図21(B)のスロット順序表TGcの列名「スロット順序」を、列名「要回答」に変更する。さらに、「格納前値リスト」、「格納後値リスト」、「問い合わせ」のそれぞれの列を追加する。これにより、
図21(A)に例示する格納値表TGdを作成することができる。
【0174】
[ステップS602]
図21(C)の関係木表TGbの行数をcとして、カウンタ変数dとする。スロット表作成部15は、カウンタ変数dに初期値「1」を入れる(ステップS602)。
【0175】
[ステップS603]
スロット表作成部15は、関係木表TGbの第d行目の「子スロット名」の値が「Y1」であるか否かを確認する(ステップS603)。
【0176】
そして、第d行目の「子スロット名」の値が「Y1」である場合(ステップS603/Y)、ステップS604に移行する。
【0177】
他方、第d行目の「子スロット名」の値が「Y1」でない場合(ステップS603/N)、ステップS608に移行する。
【0178】
[ステップS604~S607]
第d行目の「子スロット名」の値が「Y1」である場合、スロット表作成部15は、関係木表TGbの第d行目の「親スロット名」の値を「S」とする(ステップS604)。そして、スロット表作成部15は、格納値表TGdの「スロット名:S」の列名「問合せ」に「Y1」を格納する(ステップS606)。
【0179】
スロット表作成部15は、関係木表TGbの「子スロット名」の値に「S」があるか否かを確認する(ステップS606)。そして、「S」がある場合(ステップS606/Y)、スロット表作成部15は、関係木表TGbの「子スロット名:S」の行の「親スロット名」の値を「S」にする(ステップS607)。その後、ステップS605に戻り、処理を繰り返す。
【0180】
[ステップS608、S609]
ステップS606で、関係木表TGbの子スロット名」の値に「S」がない場合(ステップS606/N)、スロット表作成部15は、カウンタ変数dの値がcであるかを確認する(ステップS608)。
【0181】
そして、カウンタ変数dの値がcの場合(ステップS608/Y)、ステップS610に移行する。他方、カウンタ変数dの値がcでない場合(ステップS608/N)、スロット表作成部15は、カウンタ変数dを1増やし(ステップS609)、ステップS603に移行して処理を繰り返す。
【0182】
[ステップS610]
スロット表作成部15は、格納値表TGdの行数をaとし、カウンタ変数bとする。そして、スロット表作成部15は、カウンタ変数bに初期値「1」を入れる(ステップS610)。
【0183】
[ステップS611~S616]
スロット表作成部15は、格納値表TGdの第b行目の「問合せ」の値が「Y1」であるか否かを確認する(ステップS611)。
【0184】
格納値表TGdの第b行目の「問合せ」の値が「Y1」である場合(ステップS611/Y)、スロット表作成部15は、格納値表TGdの第b行目の「スロット名」の値を、スロット定義TAの「スロット名」から検索する。そして、スロット表作成部15は、検索した「スロット名」の行の「スロット値」に格納されている値を、格納値表TGdの列名「格納前値リスト」に入れる(ステップS612)。
【0185】
格納値表TGdの第b行目の「問合せ」の値が「Y1」でない場合(ステップS611/N)、スロット表作成部15は、格納値表TGdの第b行目の「要回答」の値を空にする(ステップS613)。
【0186】
ステップS614では、カウンタ変数bの値がaであるか否かを確認する(ステップS614)。
【0187】
そして、カウンタ変数bの値がaでない場合(ステップS614/N)、カウンタ変数bの値を1増やして(ステップS615)、ステップS611に移行する。
【0188】
他方、カウンタ変数bの値がaである場合(ステップS614/Y)、スロット表作成部15は、格納値表TGdの「問合せ」の列を削除し(ステップS616)、スロット表作成部15は、
図21(D)に例示するような格納値表TGdを作成する。その後、終了する。
【0189】
(A-3)実施形態の効果
以上のように、この実施形態によれば、対話知識作成装置10が作成したスロット表TGは、ユーザ問い合わせ項目の値を決定するために必要な質問の項目とその順番が示されている。
【0190】
そのため、最低限かつ自然な流れの対話でユーザ問い合わせ項目の値を決定することができる。これによって、システムや人間が問い合わせに対応するための知識を有していない場合でも、適切かつ最短な対話数でユーザが知りたいことを直接的に提示できる。
【0191】
例えば、
図22は、対話知識作成装置10が作成したスロット表TGを対話システム(図示しない)に搭載し、ユーザとシステムとの間で対話をさせた対話例である。
【0192】
最初にシステムからユーザにどんなことを問い合わせたいかを質問したのが1行目である。ユーザがユーザ問合せ項目のいずれかを回答したのが2行目である。ユーザ問い合わせ項目を決定するために必要なシステムからの質問とユーザの回答を繰り返したのが3行目から8行目である。8行目で必要な情報が全て得られたので、9行目でシステムがユーザ問い合わせ項目の値を出力することによって、直接解決情報を提示することができ、対話が終了する。
【0193】
(B)他の実施形態
上述した実施形態においても種々の変形実施形態を言及したが、本発明は、以下の変形実施形態にも適用できる。
【0194】
対話エンジンおよび人間がスロット表を利用することで、ユーザに適切な質問を行い、問い合わせに対応できる。対話知識(スロット表)は、さまざまな対話システムで利用可能であり、例えば、オントロジーを利用した対話システムにも適用できる。
【0195】
スロット表は、窓口での対応に不慣れな人の教育支援目的での利用も可能である。
【0196】
ユーザの問い合わせにおいて、知りたいことが複数ある場合でも利用できる。ユーザ問い合わせ項目を確定するための対話システムとの連携も可能である。
【符号の説明】
【0197】
10…対話知識作成装置、11…入力部、12…組合せ表作成部、13…関係補足表作成部、14…表作成部、15…スロット表作成部、
TA…スロット定義、TB…問合せ項目リスト、TC…関係表、TD…組合せ表、TE…関係補足表、TF…不定値まとめ表、TFa…ルール番号別組合せ表、TFb…不定値候補抽出表、TFc…不定値置換表、TG…スロット表、TGa…まとめ番号リスト、TGb…関係木表、TGc…スロット順序表、TGd…格納値表、TGe…要回答表。