【実施例】
【0022】
・様相
自然文の意味を最も底辺で支えるのが様相である。様相は英語の助動詞に相当し、日本語の場合、大抵は文末でその文の意味を肯定/否定/修飾する。
図3にpKTNとして用意する様相の例を示す。本実施例では様相は真偽を表す述語として用意される。
【0023】
・深層格
通常の一階述語論理の述語と同様、様相述語は一つまたは複数の引数を持つが、それら全てに深層格を付与する。
図4に深層格の例を挙げる。
深層格は大きく述語格と修辞格に分けられる。述語格は文の意味を表す主体や対象、行為などの要素を表し、修辞格は英語の前置詞に相当する付帯情報を表す。
【0024】
以上の様相と深層格を使って日本語文章の意味をFOL式/論理プログラムに変換する例を示す。
(1)″する″([Sb]″太郎″,[V]″行く″,[Plc]″海″). (太郎は海に行く。)
(2)″できる″([Sb]″太郎″,[V]″作る″,[Od]″帽子″). (太郎は帽子を作ることが出来る。)
(3)″である″([Sb]″太郎″,[Od]″男″). (太郎は男である。)
(4)″すべきである″([Sb]″太郎″,[V]″守る″,[Od]″家族″). (太郎は家族を守るべきである。)
これらは同時にペトリネット型KTN(pKTN)でも表される。
【0025】
同じ例をpKTNに変換した例を
図5〜
図8で示す。図中○は項プレース、◇は述語プレー
向である。後に述べる推論はこのpKTN上で行なわれる。
【0026】
・自然言語の解析
日本語自然文をpKTNへと変換するために、本実施例ではまず自然文の形態素解析、および依存構造解析の結果が得られていることを前提にする。典型的な例では形態素解析により自然文は文節ごとに区切られ、その中の形態素に品詞(名詞、動詞、…)や属性(数、時間、地名、…)、表層格(ガ格、ニ格、…)がタグ付けされる。また依存構造解析により、文節から文節への係り受け関係が抽出される。
図9に「太郎は9時に花子に会う。」という文の形態素解析の結果を示す。この例に示されるように、適当な変換ルールを用意することにより品詞・属性・表層格から深層格を認識することが可能で、そうして得られた深層格が
図9の各行の2番目の矢印の後に示されている。注目すべきこととして、2つのニ格文節「9時に」と「花子に」がそれぞれTim格とOi格に変換されているが、これらは単に表層格だけでなく品詞・属性等の付帯情報も加味することによってはじめて峻別可能になる。
【0027】
深層格認識が依存構造解析結果を加味して初めて可能になる例として、次に、受動文の変換の例を取り上げる。能動文「花子が太郎に告白した。」と、受動文「太郎は花子に告白された。」はともに同じ意味を表すため、これらはできれば同一のpKTNへと変換されることが望ましい。そのため本実施例では様相リスト(
図3)に受動様相「される」を含めず、受動文を読んだならばその文の能動文を推定し、そこにおける深層格を変換ルールによって認識するものとする。
図10はそれを行なった例を示す。この例で、ガ格「太郎は」のかかり先「告白された」は受動態であるため、ガ格の深層格はOi格と認識される。また、ニ格「花子に」のかかり先「告白された」は受動態であるため、ニ格はSb格と認識される。この例はガ格/ニ格が単純にSb格/Oi格とはならず、かかり先の属性などから影響を受け異なる深層格へと認識されうることを示している。
【0028】
この例から分かるように、本発明で自然言語文から正確に意味をとり、それを論理に落とし込もうとする時、様々な例外処理も含めた詳細な変換ルールを用意することが不可欠である。
【0029】
図11には、これを行うため典型的な実装形態を示した。
詳細な変換ルールは変換プログラムに直接書き込まれるのではなく、変換プログラムは別に用意された変換ルールベースを読み込むことにより、場合分けに基づく例外処理を行なうようにする。
適当なインタフェースのもと、変換ルール群を多くの人手をかけて用意することにより、ネットワーク生成部による正確な論理抽出ができるようになる。
【0030】
・推論のためのリンク
pKTNを使って推論を行うには、まず、知識文と質問文のpKTNを作成する必要がある。この時点で作成されるpKTNは全て無向である。質問文pKTNは疑問詞の深層格を形態素解析・依存構造解析・ルールから決定し、その深層格引数に、質問変数として「_q」を入れることで作成する。
次に、作成された質問文pKTNとそれに対応する知識文pKTNの述語プレース間でリンクを張る。対応する知識文pKTNを選ぶには質問文pKTNにおいて定数引数をとる格を参考にし、様相と深層格引数が一致する知識文pKTNを選択する。この時、深層格の数まで一致することは求めない。
【0031】
図12では、「太郎は何を買ったか?」と質問した場合のpKTNを示している。質問文pKTNでは、「何を」という「疑問詞+ヲ格」からOd格に「_q」を入れ、Sb格に「太郎」、V格に「買う」を持たせている。リンクを張る知識文は様相とSb格、V格が一致することが条件とされる。その条件の知識文pKTNとリンクを張ったのが
図13である。ここにおける知識文は「太郎は買った指輪を花子に渡す。」である。
【0032】
・有向ペトリネットと無向ペトリネット
本発明の1つの局面で、pKTN上の論理推論は、質問文を出発点とする後向き推論であり、それは質問文pKTNを根とするAND/OR木上の幅優先探索として定式化される。木は根から葉に向かって方向付けされており、従ってpKTNで推論を行うには、リンクで繋がった質問文、知識文pKTNの全てのアークを有向なものに変更する必要がある。
図14、15にその例を示す。この
図14,15で複文(動詞/用言を複数持つ文)「太郎は買った指輪を花子に渡す。」に相当する知識文pKTNは、「太郎は何を買ったか?」と「太郎は何を渡したか?」という異なる質問文pKTNに繋がった時、逆の向きに方向付けされている。ここに示されたように、本発明においては、一般に条件・帰結関係のはっきりしない自然言語の複文は、無向ペトリネットとして知識文pKrN化されて、質問文pKTNとリンクで繋がった後に有向化される。
【0033】
・事実デフォルト
一階述語論理/ホーン節論理上の後向き推論は、ルール節の本体のアトムを真とする事実節がないと完結しない。自然言語文が対象とする実世界には、自然文には明記されていない多くの常識や前提が成立しており、それらを表す事実節やルール節を暗黙ペトリネット(デフォルト)として用意することにより、pKTN推論は初めて完了するようになる。
【0034】
図16は、そのために用意されるデフォルトの例である。これは、「xは[xがyする対象]をyする」という意味を表し、変数x,yに深層格に合うどのような単語が入っても真として成立する(恒真)。このデフォルトを
図14につなげると
図17のpKTNが生成され、これ上で「_q」から始まった推論は、デフォルトで知識が正しいことが証明され推論が完了する。得られる答えは「q=指輪」や「q=対象([Sb]太郎,[V]渡す)(太郎が渡したものである)」である。
【0035】
・ルールデフォルト
自然言語の文では、一部の動詞で、その動詞を反義語にし、深層格を入れ替えることで文の意味が入れ替える前と同じになる。例えば、「太郎は花子に指輪を贈る。」という文をFOL式/論理プログラムに変換すると、
″する″([Sb]″太郎″,[V]″贈る″,[Od]″指輪″,[Oi]”花子”).
となるが、深層格のV格を「贈る」→「貰う」にし、「Oi→Sb」、「Sb→Src」と入れ替えて出来る
″する″([Sb]″花子″,[V]″貰う″,[Od]″指輪″,[Src]”太郎”).
は「花子は指輪を太郎から貰う。」という意味となり、文の意味が変更する前と同じになる。このような言い換えが必要になる場面は、例えば、「太郎は花子に指輪を贈る。」という知識に対して、「花子は太郎から何を貰ったか?」と質問されたときに起きる。
この場合単純に知識文pKTNと質問文pKTNを繋ぐだけでは深層格が一致しないために回答が出来ない。そこで、この深層格の入れ替えを実行するために、
図18のような『yがxにzを渡す⇔xはyからzを貰う』の言い換えを表す暗黙ペトリネット(ルールデフォルト)を用意する。
【0036】
図18のデフォルトを、
図19のように質問文pKTNと知識文pKTNの間に挟むことで、pKTN推論が完結するようになる。
【0037】
・『外の関係格』を用いた複文の表現
自然言語は多くの複文を含む。
図12で示した「太郎は買った指輪を花子に渡す。」は複文の一例であるが、この場合「買う」と「渡す」の2つの述語に対応するpKTNを「指輪」という概念に繋がる変数xを介してつながることで、一つながりのpKTNとして表わされている。
しかし、共通する単語が存在しない複文も多い。例えば、「太郎は花子が結婚することを聞く。」という文章では共通する単語が存在しない。
この例のような場合は、『外の関係格』を使うことで、複文が持つ意味を失わずに論理プログラムで表現することが可能である。『外の関係格』(Out格)は、それを持つ述語全体をまとめ上げる機能を持つ。従って複文を構成する副文にOut格を、主文にそれを受ける格を用意し、それらを共通変数で繋ぐことで複文が表せる。上記の例の場合、「花子が結婚する」という副文にOut格を設定し、それを「太郎は聞く」の目的格で受けることにより、FOL式/論理プログラムは、
“する”([Sb]”太郎”,[V]”聞く”,[Od]_x1),“する”([Sb]”花子”,[V]”結婚する”,[Out]_x1).
と表される。
図20には、これを表したpKTNが「太郎は何を聞くか?」の質問文pKTNと繋がった様子を示した。
【0038】
外の関係格は、Od格以外に時刻、場所、手段、条件、原因、目的などの様々な修辞格とも組み合わせることができ、それらによって、主文と副文の間の様々な意味的繋がり関係を表現できる。例えば、接続詞「〜なら」でつながっている場合は条件格と、「したがって〜」でつながっているならば、原因格と外の関係格をつなげることで複文を表現できる。
また、時間順所を表している複文も存在する。時間順序を表す際は、不等号述語とRg格、Lf格を組み合わせることでpKTNを作成する。例えば、「太郎は寝る前にビールを飲む。」という文章の時、pKTNは
図21のように作成される。
それぞれの動詞のTim格を不等号でつなげることで、動作した順序を表現できる。ここの「_t1」、「_t2」は数値を表す変数プレースの一例である。
【0039】
・オントロジーについて
これまでの実施例では、pKTNの定数プレースの中に「太郎」、「指輪」「買う」などの単語をそのまま記述していた。しかしながら、もし「太郎は自動車を持つ。」という知識文に対して、「太郎はクルマを持つか?」と聞いて単語不一致のため答えられないとしたら不都合である。同様の問題は「自動車」、「クルマ」という同義語の間だけでなく、上位/下位語間でも発生する。例えば、「太郎は電気自動車を運転する。」という知識文に対して、「太郎は車を運転するか?」と質問したときに「電気自動車」と「車」が仲間だと認識できずに回答出来ないのも問題である。
本発明では、この問題をpKTNの定数プレースに入る項を概念とし、概念と単語の間の対応関係を表す同義語リストおよび概念の上位/下位の関係を表すオントロジーを用意することで解決する。オントロジー(ここでは簡単のために単語で表したが)の例を
図22に示す。
【0040】
図22でもわかるように、「車」の下位語に「自動車」があり、「自動車」の下位語に「電気自動車」があるので、「車」の仲間に「電気自動車」があることがわかる。
このオントロジーをpKTNの推論で使う方法として、本実施例ではオントロジーを表すネットワークデータベースを別に用意し、それを参照しながら推論を進める方法を示す。
図23で、「太郎は電気自動車を運転した。」という知識文に対し、「太郎はどんな車を運転したか?」と質問した時のpKTNを示している。「車」と「電気自動車」は同一の単語ではないが、「電気自動車」のオントロジーを上位にたどっていくと、「車」が存在する。そのため「電気自動車」は「車」の仲間であることがわかり、質問には「電気自動車を運転した」と回答することが出来る。
【0041】
また、オントロジーを参照する場合は必ず知識文側で上位にたどっていく。下位にたどると間違った推論を行ってしまうからである。例えば、「太郎は車を運転した。」という知識文に対して、「太郎は電気自動車を運転したか?」と質問した場合を考える。質問側で「電気自動車」から上位の「車」にたどると、「運転した。」という誤った回答が得られてしまう。
【0042】
・タイトル格
文書を読み込むことで作成される様々な知識文pKTNにおいて、pKTNがどの文書から作成されたのかという情報を保持できれば、知識文の範囲を指定して推論することができる。
本発明によると、文書名、章立て、段落、箇条書き、表などの構造化されている文書に対して、深層格にタイトル格と呼ぶ特別な格を付けることによって、知識文pKTNがどの文章から生成されたかの情報を持たせることができる。
【0043】
タイトル格は、文書や段落を指定しての範囲検索に役立てることができる他、回答の際には知識の元になったタイトル、段落、文章を表示するためにも有効である。タイトル格で参照される文書構造はオントロジーと同様、
図24のような木構造グラフで表現される。個々の知識文pKTNのタイトル格引数が入るプレースは、
図24の末端の葉を指し示すが、それが文書階層構造のどこに含まれるかが
図24の木を上位にたどることによって特定できる。
タイトル格の文書構造オントロジーの参照方法は、概念オントロジーのそれと同様である。質問文pKTNのタイトル格引数と知識文pKTNのそれとを照合する際には、単にシンボル照合するだけではなく、知識文側で文書構造オントロジーを上位にたどって照合するものがあるかないかを探す。こうすることにより質問文側から広い範囲を指定した知識文探索が可能になる。
【0044】
・論理的AND/OR
自然文の中には否定、AND、ORなどの論理表現が出てくる。このうち否定については、
図3に示されるように本実施例では様相に含めて述語プレースの中で表現するが、AND、ORについては、論理式として等価変換される複数のホーン節として表現する。
まず、名詞や動詞が論理関係で結ばれている場合を考える。
【0045】
主格の場合:
「AとBが走る」=「Aが走る」∧「Bが走る」。
「AまたはBが走る」=「Aが走る」∨「Bが走る」。
動詞の場合:
「太郎がAするし、かつBする」=「太郎がAする」∧「太郎がBする」。
「太郎がAするか、またはBする」=「太郎がAする」∨「太郎がBする」。
時間格の場合:
「太郎はA時とB時に食べる」=「太郎はA時に食べる」∧「太郎はB時に食べる」。
「太郎はA時かB時に食べる」=「太郎はA時に食べる」または「太郎はB時に食べる」。
以上の例に示されるように、深層格引数が論理関係∧、∨で結ばれている単語を持つ場合、それらの論理関係は外に出すことができ、文意は複数の命題を結ぶ論理式として記述できる。その後、
といった等価関係を用いると複数のホーン節へと変換することができる。ここに⇒の後に示した式は、Prologプログラムの記法に習い、用意する節を「.」(ピリオド)で区切って表したものである。
【0046】
図25、26には「太郎または花子は担当する」という自然文から導かれるpKTNを示した。この例の場合、「花子が担当しないならば太郎が担当する」、「太郎が担当しないならば花子が担当する」という意味を表す2つの知識文pKTNに変換されている。これらpKTNにおいてはホーン節ルールが「外の関係格」を使って「条件格」とつなげることで作成されている。
【0047】
もし、この知識とは別に「花子は担当しない」という知識が存在したときに、「誰が担当するか?」と質問を投げかけると、
図27のグラフが生成され、質問に答えることが出来る。
また、複数ホーン節への変換例として、下には接続詞/接続助詞によって表された条件・帰結の関係を含む複文が論理積・論理式を含む場合の変換式を示す。
これらの式を用いると、例えば「BまたはCが死ぬとAが走る」という文は、「Bが死ぬとAが走る」「Cが死ぬとAが走る」という2つの複文知識文を表すpKTNへと変換される。
【0048】
・AのB
日本語自然文に頻出する、「AのB」という言い方は著しい省略形である。例えば、「太郎の帽子」という言い方には、「太郎は帽子を所有する。」という意味が含意されている。本発明では、「AのB」からネットワークを生成する手段として、前期含意された意味を明示的に表現するため、知識文ペトリネットに加えて、特殊な暗黙ペトリネット(デフォルト)も併せて生成する。以下の実施例では、「太郎の帽子」を例にとる。与えられた知識文中にこの言い方があった場合これを「帽子は太郎のである。」と解釈し、「の」を関数として扱って、
図28のようなpKTNを作成する。ここで点線の○は関数記号プレースを表す。一方、これとは別に任意変数x、yを含む2つの文「xはyのである」「yはxを所有する」が等価であることを表す暗黙ペトリネット(
図29)を生成し、これらを推論に用いる。
【0049】
図30は、「花子は太郎の帽子を作った。」という知識文に対して、「太郎は何を所有しているか?」という質問をしたときに参照されるpKTNである。
図30では、質問文pKTNが言い換えを表す暗黙ペトリネットを介して知識文pKTNに繋がり、さらにその先に恒真式を表す暗黙ペトリネットに繋がることで「花子が作ったもの、帽子」と答えられるようになる。
【0050】
・単位、接尾辞
自然言語で、頻繁に使われる単位や接尾辞は、それを語基と分けて扱う方が正確に論理抽出できる。本発明では、単位や接尾辞を、語基を引数に持つ関数として扱うことで、「語基+単位」を項と見なし、それにひとつの項プレースを割り当てる。
図31はこのやり方で作成された「硫酸は酸性である。」に対応する知識文pKTNに「硫酸は何性ですか?」に対応する質問文pKTNが繋がった例である。この質問文の場合、「何性」が「何+性」と分けて解釈されることで、他の例えば「硫酸は劇物である。」という知識文pKTNとは矛盾が生じ繋がらなくなる。
【0051】
・数式表現
pKTN推論と数式計算を融合するため、本発明ではpKTNの中に数式やアルゴリズムを表現するためのデータフロー・グラフの考え方を持ち込む。
図32にデータフロー・グラフの例を示す。
データフロー・グラフはエッジの部分に数値を持たせ、ノードに演算子を持たせることにより、任意の数式やアルゴリズムを表現できるようにしたもので、
図32では、数値がグラフ上を流れることにより、6×((3+9)−7)=30の計算結果を得ることができる。
また、データフロー・グラフの著しい特徴として、各演算子ノードで局所的に逆算を行いながらデータを逆方向に流すことで数値方程式の解を求めることができるということがある。
【0052】
図32の例では、例えば数値を左から右に流すことで、6×((3+x)−7)=30の方程式を満足する解x=9を求めることができる。これと同様のことはpKTNの中でも行うことができる。これをするために本発明では、+、−などの数式記号に対応する関数記号を用意し、これをまとめ上げるトランジションに数値計算の機能を持たせる。
図33は、「太郎は2000年まで横浜に住んでいた。」という知識に対して、「太郎は2017年から何年前まで横浜に住んでいましたか?」という質問が投げかけられた時のpKTNを表している。この
図33の左下の部分にはx=2017−qという方程式が埋め込まれており、推論中にトランジションがq=2017−xという逆算を実行することにより、上記の質問に「q=17(17年前まで)」と答えることができる。