(57)【要約】【課題】日常言語によるロボットなどの機械の自動プログラミング作業を可能とするため、演繹推論エンジンを介して日常言語を機械に理解させることを課題とする。【解決手段】主語・述語形式の日常言語を、句読点や特定用語の位置を目印として主語・述語・否定語・接続詞・副詞・形容詞・感嘆詞・語尾などの節の結合形に並べ替え、拡張プロダクションルール形式に翻訳して既存の演繹推論エンジンと接続し、演繹推論を可能とするプログラムを開発すれば、得られた日常言語の知識・命令を機械に記憶させ、次から同じ命令で同じ制御動作を行わせることが可能となる。【選択図】  図１
2004220458.tif 000002
【特許請求の範囲】
【請求項１】
主語・述語形式の日常言語を、句読点や特定用語の位置を目印として主語・述語・否定語・接続詞・副詞・形容詞・感嘆詞・語尾などの節の結合形に並べ替え、拡張プロダクションルール形式に翻訳して既存の演繹推論エンジンと接続し、演繹推論を可能とするプログラム。
【請求項２】
【請求項３】で得られた日常言語の知識・命令を機械に記憶させ、次から同じ命令で同じ制御動作を行わせる自動プログラミング構造。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命題論理、推論エンジン、機械の制御技術および自動プログラミングの技術分野に属する。
【０００２】
【従来の技術】
ロボットなどの機械を制御するためのプログラム作成作業には多くの工数を必要とし、わずかなプログラムの修正にも大がかりな変更作業が必要である。
もし機械が、人間が話す日常言葉を理解して命令を実行し、それを記憶して次からは自動的に同じ命令で同じ動作をするならば、言語を介してプログラミング作業ができることになり、作業は飛躍的に楽になる。しかし、複雑な動作では、命令が単一でなく複数命令の組み合わせになるので、そのためには複数命令を総合的に理解するための機能が必要である。
今日、ニューロと呼ばれるパターン認識技術を使って人間の顔を識別し、人間の言葉を理解すると称する対話型ロボットは、すでに開発されている。それらは、対象物を繰り返し見せて名前を教え、学習させることが可能であり、また名前や好みを聞かれて返事を返し、四則演算が可能で、複数人の話し手の顔を認識し、別々の名前で話しかけるなどの機能を持つ。
しかし、ニューロ技術は具体的な形状認識が可能なものだけにしか適用できず、花や人間というような抽象性のある概念の理解にまで及ぶものではない。また学習の初期には誤認識が多く、正しく覚えるまでには試行錯誤が必要である。
対話機能に関しては、話し手が予め登録されている言葉で話しかけたとき、その言葉とリンクされた特定の答を返すか、言葉から階層的に連想される複数の言語にジャンプして会話を誘導しているに過ぎず、複数命令をまとめて理解することは出来ない。
本発明は、これとは異なり、言葉を通じて機械に知識を教えるものであり、単に登録語だけではなく、複数命令を総合的に理解させる機能を備えている。
総合的に判断するとは、例えば机の上に、リンゴとミカンがあったとき、ミカンでない、と言われてリンゴを選んだり、「部屋が暗ければ、電気をつけてちょうだい」のような周囲状況の判断を伴う命令を実行したりすることである。これは、命題論理の一般化された三段論法を機械的に解く演繹推論を行うことに他ならないが、従来、演繹推論を機械的に速く行うことは困難であった。
【０００３】
【本発明が解決しようとする課題】
人間が言葉を理解するということは、言葉を取り巻く背景、主語・述語関係、接続詞などを理解して心の中に概念やイメージを抱くことであるが、機械には心がなく、言葉を概念やイメージで捉えることができない。従って、心があることが推論の必要条件なら、言葉を理解する機械は当分の間実現しないと思われる。
だが、命題論理によれば、複数の知識を組み合わせて推論された新しい知識はそれらの知識が持つ文構造だけに依存し、知識内容には依存しない。
従って、論理学の法則に従って言葉を文節単位に分解し、適切に並べ替え、文字同士を照合し、パターン・マッチングを行えば、機械が言葉を概念やイメージとして理解していなくとも論理的な解答をさせることができる。それを、対話する人間から見ると、機械が実際には何一つ理解していないにもかかわらず、あたかも心を持って対話しているように見える筈である。
このように、論理的な対話を機械的に行わせるアイデアは数学者ライプニッツの時代からあったが、二つの難関のため未だに実現していない。それは、言語を機械が推論可能な形式に翻訳すること、もう一つは翻訳文を演繹推論して解を得ることである。本発明は、前半分に関するものであり、それを既存の演繹推論エンジンと組み合わせ、一体として演繹推論可能とするものである。これにより、日常言語で機械を制御することが可能となる。
【０００４】
【発明の実施の形態】
例として、机の上にあるミカン、梨、リンゴ、バナナがある時、ロボットにリンゴを選んで持って来させる問題を考える。ロボットは、テレビカメラと触覚センサーを備え、従来技術により机の上にあるＡ、Ｂ、Ｃ、Ｄという４つの対象物の形状や色、硬さなどを認識する機能を備え、以下の１から５までの情報を自動的に得る機能を持っているものとする。そして、リンゴがＡであることが分かれば、「リンゴを持っておいで」という命令に対してＡを持ってくることはできるが、どの果物がＡ，Ｂ，Ｃ，Ｄのどれに対応するかに関する知識は持っていないものとする。
そこで、言葉で果物の特徴を教え、ロボットに判断させようというのが狙いである。与える知識は６から１８である。
１．  Ａでなく、Ｂでなく、Ｃでなければ、Ｄである。
２．  Ｂは、丸く、黄色である。
３．  Ｃは、柔らかく、黄色でない。
４．  Ｄは、細長い。
５．  Ａは、紅い色である。
６．  ミカンでなく、リンゴでなく、梨でなければ、バナナである。
７．  ミカンは、やや柔らかく、オレンジ色で、かなり小さい。
８．  リンゴは、丸く、固く、どちらかといえば紅い色である。
９．  梨は、丸く、固く、黄色である。
１０．  バナナは、特に細長く、黄色である。
１１．  柔らかければ、バナナか、ミカンである。
１２．  丸ければ、リンゴか、梨である。
１３．  オレンジ色なら、ミカンである。
１４．  細長ければ、バナナである。
１５．  オレンジ色は、紅い色でなく、黄色でない。
１６．  黄色は、紅い色でない。
１７．  丸いなら、細長くない。
１８．  柔らかいなら、固くない。
これらの文を正しく解釈し、「リンゴを持ってこい」という命令に対してリンゴを持ってくれば、このレベルでロボットは「言葉を理解している」と解釈できる。
人間は、命題論理の推論手法を使って次のように推論する。８から、リンゴは丸く、固く、紅い色である。１７から、丸いならば細長くない。４から、細長ければＤではない。１８から、固ければ柔らかくない。３から、柔らかくなければＣではない。１６から、紅ければ黄色ではない。２から、黄色でなければＢではない。従って１より、Ｂでなく、Ｃでなく、ＤでないからＡである。もし、以上の論理をロボットに組み込むことが出来れば、ロボットに正しくＡを選んで持ってこさせることができるはずである。
以上の推論過程は、一般化された三段論法の問題を機械的に解く問題である。
これを機械的に解くため、まず［０００３］で示す複数の日本語文を、それぞれ主語・述語・否定語・接続詞・副詞・形容詞・感嘆詞・語尾に識別・分解し、不要要素を除去して「節形式」と呼ばれる形式に変換しなければならない。
【０００５】
［主語述語分離］
知識１や２の「である」は語尾、７の「やや」、「かなり」、８の「どちらかといえば」等は副詞であり、省略しても基本的な意味は変わらない。そこで、これらを除去すると、文は主語・述語・否定語・接続詞のみになる。これら４つがどのように組み合わさっているかで日本語構造が規定される。最も基本的なのは主語と述語の分離を機械的に行うことである。人間は、
「ソクラテスは人間である」
という言葉を概念で理解するので、主語は「ソクラテス」、述語は「人間」、語尾は「です」であると識別する。両者を分離する語句は「は」である。しかし、機械の場合には、内容を理解しているわけではないので、主語述語の識別子として単に「は」を使うと
「彼がはならびのいい人です」
のような文では、主語を「彼が」、述語を「ならびのいい人」、語尾を「です」で誤って区切ってしまう。これを避けるために、主語述語を分離するための識別子の「は」、「が」、「も」の後には必ず「は、」「が、」、「も、」と読点をつけることとすれば、上の文は
「彼が、はならびのいい人です」
となり、主語は「彼」、述語は「はならびのいい人」、語尾を「です」と正しく分離出来る。但し、「話し言葉」の場合には、自動的には読点が挿入されないため、「は」の後で少し間をおく必要がある。
英語や日本語では「．．．は．．．である」という文形式と「．．．ならば．．．である」という文形式は別の文構造として扱われている。英語では、前者は
「Ｈｅ  ｉｓ  ａ  ｂｏｙ」
のように  ｂｅ、  ａｍ、  ｉｓ、  ａｒｅ  で表現され、後者は
「Ｉｆ  ｈｅ  ｉｓ  ｇｏｉｎｇ、  ｔｈｅｎ  Ｉ  ａｍ  ｇｏｉｎｇ」
のように表現される。しかし、両者は論理学的には同じ意味である。
【図３】は、「ａはｂである」、あるいは「ａならばｂである」という形式の文構造を示したものである。命題論理学的には「ｂという概念の中にａという概念が包含される」と解釈される。例えば、「バラは花である」という表現は「バラ」が、「花」という、より広義のクラス概念の中に包含されていることを意味する。
一方、「君が行くなら、私も行く」という表現は、「私が行く条件」はいろいろあるが、その中には「君が行く」という条件も含まれている」と解釈される。従って、「ａはｂだ」、および「ａならばｂだ」という表現は共に、「ａ  ｔｈｅｎ  ｂ」となり、ａがｂの部分集合であることを意味している。「．．．であれば」、「．．．ならば」、「．．．と言ったら」、「．．．と尋ねたら」などもすべてこの形式である。
【０００６】
［否定語］
否定語は「．．．は、．．．ではない」、「．．．でなければ、．．．である」のように文意の一部、または全部を否定する意味で使われる。英語では  「ｔｈｅｎ  ｎｏｔ．．．」、「ｎｏｔ．．．  ｔｈｅｎ」である。
【０００７】
［接続詞］
接続詞には多くの同義語があるが、大別すれば  ａｎｄ  と  ｏｒ  に区分される。論理学では「ａ  ａｎｄ  ｂ」  は、「ａであり、かつｂである」という意味であり、「ａ  ｏｒ  ｂ」  は「ａかｂのどちらかである」という意味である。「ａ  ａｎｄ  ｂ」  は、「ａである」と「ｂである」という二つの言葉に分割できるが、「ａ  ｏｒ  ｂ」  は分解できない。
【図４】は「ａならばｂ１であり、かつｂ２であり、かつｂ３である」という文構造を図示したものであり、論理学的には「ａ  ｔｈｅｎ  ｂ１  ａｎｄ  ｂ２  ａｎｄ  ｂ３」となる。これは「ａ  ｔｈｅｎｂ１」、「ａ  ｔｈｅｎ  ｂ２」、「ａ  ｔｈｅｎ  ｂ３」という３つの知識に分解される。
【図５】は、ａ１、  ａ２、  ａ３が、すべてｂという概念に包含されるケースであり、日本語では「ａ１も、ａ２も、ａ３もｂだ」、あるいは「ａ１であるか、ａ２であるか、ａ３ならばｂである」という表現形式である。  「ウイスキーも、ワインも、ビールも酒である」は「ウイスキーは酒である」、「ワインは酒である」、「ビールは酒である」の３つの知識に分解できる。
論理学ではこれと同じ意味の表現は「ａ１  ｏｒ  ａ２  ｏｒ  ａ３  ｔｈｅｎ  ｂ」であって、「ａ１  ａｎｄ  ａ２  ａｎｄ  ａ３  ｔｈｅｎ  ｂ」ではない。「ａ１  ａｎｄ  ａ２  ａｎｄ  ａ３  ｔｈｅｎ  ｂ」とすると「ａ１であり、かつａ２であり、かつａ３であるところのものはｂである」という意味になる。
【図６】は「ａは、ｂ１、ｂ２、ｂ３のうちのいずれかである」という文構造を図示したものである。論理学的には「ａ  ｔｈｅｎ  ｂ１  ｏｒ  ｂ２  ｏｒ  ｂ３」となる。
【０００８】
［プログラム・フローチャート］
［０００７］で日本語を  ａｎｄ、  ｏｒ、  ｔｈｅｎ、  ｎｏｔ  を使ったルール形式に変換する際の一般論を述べたが、日本語には多くの同義語や例外事項があるため、それらもすべて考慮し、多種多様の日本語表現を読めるようにする必要がある。以下個々のケースをプログラム・フローチャートで説明する。
【図７】は質問がどのように変換されるかをあらわすものである。質問は単節に限定されるため、Ｘは何か？Ｘは誰か？Ｘは？というような質問、および「．．．．である」、「．．．だ」のような語尾は省略され、単にＸとなる。
【図８】は文章中に副詞があった場合の処理である。「非常に、」、「相当、」、「かなり、」、「極端に、」、「とてつもなく、」、「見たこともないほど、」、「信じられないほど、」等の副詞は、述語の意味を強めるものであり、省略しても意味に本質的な違いはないので、翻訳過程で省略する。なお、副詞の識別はあらかじめ登録してある語句により行う。
【図９】は質問の基本形である。「あなた」、「君」、「お前」、「手前」、「おぬし」、「貴様」などはすべて「あなた」と解釈される。「あなたの名前  ｔｈｅｎ  私の名前は．．．です」とすれば、名前を訊ねたときに答えるプログラムとなる。日本語は異なる発音を持つ同意語が多くあるので、それらのすべてを同じ意味だと理解させるには辞書が必要である。
【図１０】は、主語述語形式のルールの変換過程である。主語と述語を分離する識別子「は、」、「が、」、「ならば、」、「．．．すれば、」、「．．．するならば、」等の字句の有無が確認される。識別子の末には必ず句読点が必要である。
【図１１】は述語に否定語を含む場合である。
【図１２】は、主語が否定形である場合である。「でないならば、」、「でなければ、」、「．．．しないならば、」、「．．．しなかったならば、」等の語句の有無が主語述語分離箇所を識別するために使われる。
【図１３】は述語に「および」、「ならびに」、「や」、「も」、「で」など複数の述語が接続されている場合である。これらはすべて  ａｎｄ  に置き換えられる。
【図１４】は、述語に「かつ」、「あるいは」、「か」、などの接続詞が使われている場合である。これらはすべて  ｏｒ  に置き換えられる。
【図１５】は、主語が「も」、「あるいは」、「および」などの接続詞で結ばれている場合である。主語の場合、「も、」は  ｏｒ  であって  ａｎｄ  ではない。ａｎｄ  にすると日本酒であり、かつワインであり、かつビールであるものは酒である、という意味になるが、そのようなものは存在しない。なお、辞書では主語の後に説明があり、さらに句点の後で主語が省略されて説明が続くことがある。このようなケースを考慮し、句点を  ａｎｄ  という接続詞で結ぶこともある。
【図１６】は、主語が複合形で、ａｎｄ  で結ばれている場合である。
【図１７】は、解を得た後、より人間に近い会話にするため、解の語尾に「です。」や「ではありません。」をつけた場合である。
【０００９】
【実施例】
上記のフローチャートに基づいて作成されたプログラムで、［０００４］の１から１８の知識を翻訳すると以下のようになる。
１．  ｎｏｔ  Ａ  ａｎｄ  ｎｏｔ  Ｂ  ａｎｄ  ｎｏｔ  Ｃ  ｔｈｅｎ  Ｄ
２．  Ｂ  ｔｈｅｎ  丸い  ａｎｄ  黄色
３．  Ｃ  ｔｈｅｎ  柔らかい  ａｎｄ  ｎｏｔ  黄色
４．  Ｄ  ｔｈｅｎ  細長い
５．  Ａ  ｔｈｅｎ  紅い色
６．  ｎｏｔ  ミカンａｎｄ  ｎｏｔ  リンゴ  ａｎｄ  ｎｏｔ  梨  ｔｈｅｎ  バナナ
７．  ミカン  ｔｈｅｎ  柔らかい  ａｎｄ  オレンジ色  ａｎｄ  小さい
８．  リンゴ  ｔｈｅｎ  丸い  ａｎｄ  固い  ａｎｄ  紅い色
９．  梨  ｔｈｅｎ  丸い  ａｎｄ  固い  ａｎｄ  黄色
１０．  バナナ  ｔｈｅｎ  細長い  ａｎｄ  黄色
１１．  柔らかい  ｔｈｅｎ  バナナ  ｏｒ  ミカン
１２．  丸い  ｔｈｅｎ  リンゴ  ｏｒ  梨
１３．  オレンジ色  ｔｈｅｎ  ミカン
１４．  細長い  ｔｈｅｎ  バナナ
１５．  オレンジ色  ｔｈｅｎ  ｎｏｔ  紅い色  ａｎｄ  ｎｏｔ  黄色
１６．  黄色  ｔｈｅｎ  ｎｏｔ  紅い色
１７．  丸い  ｔｈｅｎ  ｎｏｔ  細長い
１８．  柔らかい  ｔｈｅｎ  ｎｏｔ  固い
これらは「梨」や「丸い」などの知識をあらわす部分が、  ｔｈｅｎ、  ｎｏｔ  、  ｏｒ  、  ａｎｄ  という４つの英語に挟み込まれた形をしており、それらの組み合わせによって文構造が規定されている。一旦、この形式に翻訳できれば、発明特許の演繹推論エンジン（米国特許５、３９０、２８７  （Ｆｅｂ．１４、１９９５）  及び米国特許５、４９３、６３３  （Ｆｅｂ．２０、１９９６）．．．．以下引用特許発明と呼ぶ。発明者は本出願人と同じ。）を使って演繹解を得ることができる。
【００１０】
次に「拡張プロダクションルール形式」を、パターン・マッチング可能な節形式、即ち  ｔｈｅｎ  ａｎｄ  を含まず、  ｎｏｔ  とｏｒ  だけの形に変換する。一つの「拡張プロダクションルール形式」が複数個の節形式に分解されることもあるので、全部で次の２８個の知識になる。
１．  Ａ  ｏｒ  Ｂ  ｏｒ  Ｃ  ｏｒ  Ｄ
２．  ｎｏｔ  Ｂ  ｏｒ  丸い
３．  ｎｏｔ  Ｂ  ｏｒ  黄色
４．  ｎｏｔ  Ｃ  ｏｒ  柔らかい
５．  Ｃ  ｏｒ  ｎｏｔ  黄色
６．  ｎｏｔ  Ｄ  ｏｒ  細長い
７．  ｎｏｔ  Ａ  ｏｒ  紅い色
８．  ミカン  ｏｒ  リンゴ  ｏｒ  梨  ｏｒ  バナナ
９．  ｎｏｔ  ミカンｏｒ  柔らかい
１０．  ｎｏｔ  ミカンｏｒ  オレンジ色
１１．  ｎｏｔ  ミカンｏｒ  小さい
１２．  ｎｏｔ  リンゴ  ｏｒ  丸い
１３．  ｎｏｔ  リンゴ  ｏｒ  固い
１４．  ｎｏｔ  リンゴ  ｏｒ  紅い色
１５．  ｎｏｔ  梨  ｏｒ  丸い
１６．  ｎｏｔ  梨  ｏｒ  固い
１７．  ｎｏｔ  梨  ｏｒ  黄色
１８．  ｎｏｔ  バナナ  ｏｒ  細長い
１９．  ｎｏｔ  バナナ  ｏｒ  黄色
２０．  ｎｏｔ  柔らかい  ｏｒ  バナナ  ｏｒ  ミカン
２１．  ｎｏｔ  丸い  ｏｒ  リンゴ  ｏｒ  梨
２２．  ｎｏｔ  オレンジ色  ｏｒ  ミカン
２３．  ｎｏｔ  細長い  ｏｒ  バナナ
２４．  ｎｏｔ  オレンジ色  ｏｒ  ｎｏｔ  紅い色
２５．  ｎｏｔ  オレンジ色  ｏｒ  ｎｏｔ  黄色
２６．  ｎｏｔ  黄色  ｏｒ  ｎｏｔ  紅い色
２７．  ｎｏｔ  丸い  ｏｒ  ｎｏｔ  細長い
２８．  ｎｏｔ  柔らかい  ｏｒ  ｎｏｔ  固い
【００１１】
［００１０］の知識を例に、演繹推論過程を説明する。
（ア）    話し手から「リンゴを持ってこい」と命令されると、ロボットの推論エンジンに「リンゴ」という単節が入力される。
（イ）    １２．の「ｎｏｔ  リンゴ  ｏｒ  丸い」と「リンゴ」から、パターン・マッチングにより「リンゴ」が消去され、「丸い」が得られる。「ｎｏｔ  リンゴ」と「リンゴ」がキャンセルできるのは導出演算によるものである。
（ウ）    同様に、１３．の「ｎｏｔ  リンゴ  ｏｒ  固い」と「リンゴ」から「固い」が得られる。
（エ）    １４．の「ｎｏｔ  リンゴ  ｏｒ  紅い色」とリンゴから「紅い色」が得られる。
（オ）    ２７．と「丸い」から「ｎｏｔ  細長い」が得られる。
（カ）    ２８．と「固い」から「ｎｏｔ  柔らかい」が得られる。
（キ）    ２４．と「紅い色」から「ｎｏｔ  オレンジ色」が得られる。
（ク）    ２６．と「紅い色」から「ｎｏｔ  黄色」が得られる。
（ケ）    ６．と「ｎｏｔ  細長い」から「ｎｏｔ  Ｄ」が得られる。
（コ）    ２３．と「ｎｏｔ  細長い」から「ｎｏｔ  バナナ」が得られる。
（サ）    ４．と「ｎｏｔ  柔らかい」から「ｎｏｔ  Ｃ」が得られる。
（シ）    ９．と「ｎｏｔ  柔らかい」から「ｎｏｔ  ミカン」が得られる。
（ス）    ２．と「丸い」から「ｎｏｔ  Ｂ」が得られる。
（セ）    「Ｂ」でなく、「Ｃ」でなく、「Ｄ」でないから、１．より「Ａ」でなければならない。  即ち、リンゴはＡである。
【００１２】
［０００４］の日本語を入力すると、プログラム内部で自動的に［０００９］、［００１０］の形式へと変換され、演繹推論エンジンに入力される。その結果、以下１から１４のような演繹解が得られる。
１．  リンゴ
２．  丸い
３．  固い
４．  紅い色
５．  細長くない
６．  柔らかくない
７．  オレンジ色ではない
８．  黄色ではない
９．  Ｄではない
１０．  バナナではない
１１．  Ｃではない
１２．  ミカンではない
１３．  Ｂではない
１４．  Ａ
これらは、［０００４］の知識を与えて「リンゴを持っておいで」と命令したときの解になっている。即ち、命令されたロボットは推論によりＡを求め、［図１］のようにＡを持ってくる。
なお、解は複数の知識の組み合わせから得られているので［０００４］の知識のいくつかが欠ければ「Ａ」という解は得られない。
［０００４］の知識をロボットに記憶させれば、次に「ミカンを持っておいで」、「バナナを持っておいで」という命令に対してもロボットは正しくＣ、Ｄを選んで持ってくる。即ち、日常言語によりロボットの自動プログラミングが行われたことになる。
【００１３】
【発明の効果】
技術的に可能であっても、上記のような制御プログラムを従来手法で組もうとすれば、膨大な工数が必要となると思われるが、本発明では数行の知識を教えることで同じ目的を達成することが可能となる。
また、知識付与のためのデータベースと命令を同一のカテゴリで取り扱うことが出来るので、室温がある温度以上になったらクーラーのスイッチを入れさせたい場合、「室温が摂氏２８度以上なら、クーラーのスイッチを入れなさい」という命令をロボットに伝えるだけで、以後ロボットは室温が摂氏２８度以上になれば必ずクーラーのスイッチを入れるようになる。
データベースは、ロボットの記憶装置にテキスト文で書き込まれるのでデバッギング作業も容易である。これにより、従来膨大な人出を要していたロボットや機械のプログラミング作業が画期的に省力化される。
応用はロボットにとどまらない。この技術を使えば、航空機、船舶、自動車、火力発電所、遠隔地の通信機等を管理するコンピュータに、異常事態発生時どのような対処手順をとるべきかを予め記憶させておき、センサーからの異常信号を感知したら自動的に応急措置を施すと同時に、オペレーターに通報するようにすることも日常言語でプログラムできるようになる。
【００１４】
日常言語を拡張プロダクションルール形式に変換しても、推論エンジンを介して演繹を行うことが出来なければ意味がない。今日、現存する推論エンジンでそれが可能なのは引用発明特許のみである。
以下は、本特許の一部ではないが、本発明とのかかわりを明確にするため、参考として引用発明特許の一部の内容を転載するものである。
【００１５】
［既存推論エンジンの限界］
機械は基本的に機械語しか理解できない。そのため、日常言語を機械に理解させるには、機械語に翻訳する必要がある。
機械語は数字の羅列であり、人間には理解しにくいので、今日プログラムを機械語に翻訳するためのコンパイラ言語が開発されている。従って、日常語を直接機械語に翻訳するよりも、コンパイラ言語の一つに翻訳し、それと接続して推論を行わしめる方が合理的である。
今日使われているコンパイラ言語の代表的なものを［図２］に示す。用途や使い勝手によって言語の種類も異なるが、このうち、手続き型言語は主として数値演算を行うためのものであり、［０００４］のような日本語を読ませる問題には馴染まない。
このため、知識データベース構築には従来、Ｐｒｏｌｏｇ  や  ＬＩＳＰ  などの記述型言葉が使われている。しかし、Ｐｒｏｌｏｇ  や  ＬＩＳＰ  には厳しい制約がある。それは、「ホーン節」、あるいは「プロダクションルール」と呼ばれる特別のルール言語形式しか処理できないという制約である。また、「組み合わせの爆発」と呼ばれる現象を伴うため、比較的小規模の知識ベースしか取り扱うことができないという不具合がある。ここで、ホーン節とは
ａ１  ａｎｄ  ａ２  ａｎｄ  ａ３  ．．．ａｎ  ｔｈｅｎ  ｂ
という形式である。ｔｈｅｎ  の左側には  ａｎｄ  しか使うことが許されず、かつ  ａ１、  ａ２の前に  ｎｏｔ  がつくことは許されない。その理由は、知識を組み合わせて「導出」と呼ばれる推論演算を行う場合、これ以外の表現形式では論理的妥当性が失われてしまうからである。
このため、ＬＩＳＰ  やＰｒｏｌｏｇでは、「オレンジ色でなければミカンではない」というような知識を表現することは出来ない。「オレンジ色でない」、および「ミカンではない」という概念を、新しい概念に置き換えれば形式上は表現できるが、その場合、それらが「オレンジ色」、「ミカン」という概念とは無関係のものとして取り扱われるので、推論により新しい知識を得ることは出来ない。しかし、このような知識表現が許されないような表現形式は推論エンジンとしては不適である。
今日、ホーン節でないルール形式を取り扱うことが可能で、組み合わせの爆発が起こらない「速い演算」が可能な推論エンジンは、唯一引用発明特許のＵＲＡ  （Ｕｎｉｔ  Ｒｅｓｏｌｕｔｉｏｎ  Ａｌｇｏｒｉｔｈｍ；  単節導出アルゴリズム）である。従って、日常言語を先ずＵＲＡが使う言語に翻訳することが最も現実的である。
ＵＲＡは知識の一方を単節に限定することにより、ホーン節の制約から逃れｔｈｅｎ  の右側と左側に  ｎｏｔ、ｏｒ，  ａｎｄ  を自由に使うことを可能としたものである。表現形式は「プロダクションルール」よりも幅広い表現形式が認められるという意味で、造語であるが「拡張プロダクションルール」と呼ぶべきものである。ＵＲＡでは何故ホーン節の制約がないのかを説明するためには、記号論理学について簡単に触れる。
【００１６】
［記号論理学］
演繹推論の理論的基礎は記号論理学である。記号論理学においてはブール代数に似た演算法則が適用される。記号論理学で使われる記号は以下の５つである。
ａ、ｂ、ｃ、ｄ．．．          文字変数。リテラルともいう。
ａｎｄ                                「および」を意味する論理演算記号。
ｏｒ                                「または」を意味する論理演算記号。
ｔｈｅｎ                            「ならば」を意味する論理演算記号。
ｎｏｔ                  「否定」を意味する論理演算記号。
知識やルールを文字変数と論理演算記号であらわしたものを論理式といい、
ｔｈｅｎ  と  ａｎｄ  を含まない論理式を節形式という。なお、説明文中の  ＜＝＞は、記号の右と左が論理的に等価であることを意味する。基本的な知識形式と、その論理式、節形式は以下の通りである。
2004220458.tif 000003
2004220458.tif 000004
上の式で  ａ  ｔｈｅｎ  ｂ  ＜＝＞  ｎｏｔ  ａ  ｏｒ  ｂ  は
「ａならばｂ」ろ「ａでないか、ｂである」は論理的に同じであることを意味している。直感的には理解しにくいが、「すべてのものは  ａ  か  ａ  でないかのどちらである」。従って「ｎｏｔ  ａ  ｏｒ  ａ」  は常に成り立つ。しかし「ａ  ならば  ｂ」であるから  「ｎｏｔ  ａ  ｏｒ  ｂ」も常に成り立たなければならない。故に、ａ  ｔｈｅｎ  ｂ  ＜＝＞    ｎｏｔ  ａ  ｏｒ  ｂである。
次に、節Ａ、  Ｂ、  Ｃ、  Ｄは次式で表されるものとする。
2004220458.tif 000005
これから次式が導かれる。
2004220458.tif 000006
2004220458.tif 000007
より複雑な式は、これらの式から誘導することができる。例えば
2004220458.tif 000008
となる。このようにして、任意のルールは節形式に変換できるので、以降は節形式に限定して議論を進める。
なお、上記の変換公式は、ａｉの代わりに  ｎｏｔ  ａｉ、ｂｊの代わりに  ｎｏｔ  ｂｊと置き換えても成立するので論理変数の符号の正負に関係しない。このような表現形式が「拡張プロダクションルール形式」である。すでに見てきたように、これらの式は記号論理学の公式から容易に導かれるが、ＬＩＳＰや  Ｐｒｏｌｏｇ  の手法ではこの形式は導出可能でないため、従来はあまり注目されていなかった。
【００１７】
［導出可能条件］
複数個の節からなる知識（ルール）を論理方程式とみなし、それを解く操作が演繹推論である。論理方程式から解を得るためには、まず、与えられた複数個のルールを節形式に変換し、中に含まれる論理変数をパターン・マッチングにより順次消去して簡略化する必要がある。
論理変数を以下述べる導出操作で逐次消去する試みは最初に１９６６年、
Ｊ．Ａ  Ｒｏｂｉｎｓｏｎによってなされた。異なる二つの節の各々に、「同じ論理値で符号の異なる論理変数がただ一組だけ含まれている」とき、この二つの節は導出可能であるという。
例えば  ｐ  を単節、Ｑ  を、ｐ  を含まない複節、  Ｒ  を  ｎｏｔ  ｐ  を含まない複節とするとき、パターン・マッチングにより「ｐ  ｏｒ  Ｑ」、「ｎｏｔ  ｐ  ｏｒ  Ｒ」から  ｐ、ｎｏｔ  ｐを消去して、新しい節「Ｑ  ｏｒ  Ｒ」が得られる、というのが導出の考え方である。
この場合、もとの対を親節、それにより生じた新しい節を子節という。「ソクラテスは人間である」「人間は死ぬ」から「故にソクラテスは死ぬ」という結論を得る操作は、「ｎｏｔ  ソクラテス  ｏｒ  人間」、「ｎｏｔ  人間  ｏｒ  死ぬ」という親節から「人間」という言葉を消去して「ｎｏｔ  ソクラテス  ｏｒ  死ぬ」という子節を得る導出操作である。
「ただ一組」という条件は、導出演算上大きな制約である。もし親節が符号の異なる別の対を持っていたとすればｐ  ｏｒ  Ｑ、  ｎｏｔ  ｐ  ｏｒ  Ｒは
ｐ  ｏｒ  Ｑ  ＝  ｐ  ｏｒ  Ｑ１  ｏｒ  ｎｏｔ  ｔ
ｎｏｔ  ｐ  ｏｒ  Ｒ  ＝  ｎｏｔ  ｐ  ｏｒ  Ｒ１  ｏｒ  ｔ
のように書くことができる。形式的に導出演算を適用すると、この２式から
Ｑ１  ｏｒ  Ｒ１が得られるが、これは論理的に正しくない。つまり、親節Ｑ、Ｒに符号の異なる論理変数が二組以上含まれている場合には導出演算は許されない。知識のすべての組み合わせについて、「ただひと組しか存在しない」という条件を確認するのは、知識数が多くなると非常に時間がかかる。
そのため、Ｐｒｏｌｏｇ  や  ＬＩＳＰ  等では、予めこの条件が保証されている節形式だけを導出演算の対象として取り上げてきた。具体的には
ａ１  ａｎｄ  ａ２  ａｎｄ．．．ａｎ  ｔｈｅｎ  ｂ    ＝    ｎｏｔ  ａ１  ｏｒ  ｎｏｔ  ａ２  ｏｒ  ．．．  ｏｒ  ｎｏｔ  ａｎ  ｏｒ  ｂ
ｂ  ｔｈｅｎ  ｃ１  ｏｒ  ｃ２  ｏｒ  ｃ３  ｏｒ  ．．．  ｏｒ  ｃｍ  ＝    ｎｏｔ  ｂ  ｏｒ  ｃ１  ｏｒ  ｃ２  ．．．ｏｒ  ｃｍ
という、ｔｈｅｎの左側がすべて  ａｎｄ  で結ばれ、右側はすべて  ｏｒ  で結ばれている知識形式である。これらは、「ホーン節」、あるいは「プロダクションルール形式」と呼ばれ、前述の「拡張プロダクション・ルール形式」の特殊な場合である。ホーン節では、導出対象となる対は予め「ｂ  、ｎｏｔ  ｂ」ただ一組しかないことが保証されるので、対から導出により子節
ｎｏｔ  ａ１  ｏｒ  ｎｏｔ  ａ２  ｏｒ  ｎｏｔ  ａ３  ｏｒ．．．．  ｏｒ  ｎｏｔ  ａｎ  ｏｒ  ｃ１  ｏｒ  ｃ２  ．．．  ｏｒ  ｃｍ
が得られる。これにより「ただ一組」、という条件は満足されるが、すべての知識形式がホーン節で表現できるとは限らないので知識表現に大きな制約がある。
【００１８】
［組み合わせの爆発］
人間は推論する際、記憶しているすべての知識を順次呼び出すわけではなく、その都度必要な知識だけを呼び出し、照合して推論する能力を持っている。しかし、機械の場合、予め知識に優先順位をつけることが出来ないので、推論過程で記憶されているすべての知識を機械的に呼び出して照合する操作が必要となる。このやり方では知識数が多くなると、組み合わせの数が知識数の指数乗に比例して増大する。
何故なら、二つの知識を照合させて新しい知識が得られても、それによって元の知識が不要になるわけではなく、演算過程にそのまま残るためである。例えば、「ソクラテスは人間である」「人間は死ぬ」という親節から「故にソクラテスは死ぬ」という子節が得られても、それにより元の親節が不要になるわけではない。このため、照合によって生じた子節と別の親節の間でさらなる照合が必要となる。当初の知識数をｎ個とすれば、知識が３つ組み合わされる場合、４つ組み合わされる場合などをすべて含めると、組み合わせの総数は
2004220458.tif 000009
【式１】
つまり２のｎ乗の演算回数が必要となる。この値はｎが３０で約１０億、４０では約１兆である。これでは演算に膨大な時間がかかり、大きな知識ベースを取り扱うことは出来ない。
従来の演繹推論エンジンが比較的小さな知識データベースの場合にしか実用化されていない主な理由である。
【００１９】
［引用発明特許は如何に組み合わせの爆発を避けているか］
今日、数多くの演繹推論エンジンが開発されているが、それらは子節が生まれても、親節がそのまま残るアルゴリズムである。このため知識数が３０を超えると解を得るのに非常に時間がかかるので大きな知識ベースを取り扱うことが出来ない。これに対して、引用発明特許の「ＵＲＡ単節導出アルゴリム」は、「新しい知識を生み出す際、古い親節のどちらかが強制的に削除される条件」を求め、その条件下でパターン・マッチングを行うものである。この条件が満足されれば、ルール数の総数は当初のｎ  から増えないので、組み合わせの総数はたかだか  ｎ個から２個を取り出す組み合わせの総数、
【式２】
2004220458.tif 000010
つまり、ｎの２乗のオーダーにしかならない。これは２のｎ乗より遙かに小さく、それだけ早い推論が可能となる。
「親節のどちらかが強制的に削除される条件」を求めるためには「吸収」という概念を使う。即ち、節ＰとＱにおいて、ＰがＱの部分集合であるとき「ＰはＱを吸収する」といい、吸収された節Ｑは以降の演算から削除することが出来る。例えば
Ｐ  ≡  ａ                    「ａである」
Ｑ  ≡  ａ  ｏｒ  ｂ  ｏｒ  ｎｏｔ  ｃ      「ａか、ｂか、ｃでない」
であるならば、ＰはＱの部分集合であるので削除できる。何故なら、Ｐは、解が「ａである」と断言しており、Ｑよりも範囲が限定されているのでＱは不要だからである。同様に、［００１５］の「ｐ  ｏｒ  Ｑ」、「ｎｏｔ  ｐ  ｏｒ  Ｒ」から  ｐ、ｎｏｔ  ｐ  を消去して、導出により子節「Ｑ  ｏｒ  Ｒ」が得られた時、親節のどちらかを省略できるためには、子節が親節の一方を吸収すればよい。しかるに「Ｑ  ｏｒ  Ｒ」が「ｐ  ｏｒ  Ｑ」、「ｎｏｔ  ｐ  ｏｒ  Ｒ」のどちらかを吸収出来るのは以下二つの場合に限られる。
［Ｑ、  Ｒの一方が他方の部分集合である時］
この場合、例えばＲがＱの部分集合とすると、「Ｑ  ｏｒ  Ｒ」  は単にＱとなるので「ｐ  ｏｒ  Ｑ」を吸収できる。しかし、これはＲとＱはお互い独立した知識ではない特殊なケースであり、一般性はない。
［Ｒ、  Ｑのうち一方が（中身がない）空節の場合］
Ｑが空節なら、「Ｑ  ｏｒ  Ｒ」は単にＲとなる。これは「ｎｏｔ  ｐ  ｏｒ  Ｒ」を吸収する。また、Ｒが空節なら「Ｑ  ｏｒ  Ｒ」はＱとなる。これは「ｐ  ｏｒ  Ｑ」を吸収する。従って、この場合には、及びこの場合に限り、導出演算で子節が生じたときに親節のどちらかが削除できるので知識総数は増えない。
言い換えれば、ｐ、ｎｏｔ  ｐ  が単節である場合にだけ、組み合わせの総数は増加しない。このアイデアをアルゴリズム化した導出手法が引用特許発明のＵＲＡ  （Ｕｎｉｔ  Ｒｅｓｏｌｕｔｉｏｎ  Ａｌｇｏｒｉｔｈｍ）である。
単節導出では、知識の片方は常に単節であるため、「対の親節の中にただ一個しか符号の異なる論理変数が存在することができない」という条件は自動的に満足される。
このため、「知識形式をホーン節に限定する」という制約条件を考慮する必要はない。ＵＲＡで拡張プロダクションルール形式が導出可能であるのはこのためである。
【００２０】
［単節導出アルゴリズム］
以上のアイデアをアルゴリズム化する際に「ピボット法」の手法を用いる。その一部を引用発明特許から再掲する。以下は推論対象例題である。
ｐ  ｔｈｅｎ  ｑ                    （ｐならばｑである）
ｎｏｔ  ｐ  ｔｈｅｎ  ｑ  ｏｒ  ｒ            （ｐでなければｑかｒである）
ｎｏｔ  ｓ  ｔｈｅｎ  ｔ                （ｓでなければｔである）
ｎｏｔ  ｒ  ｔｈｅｎ  ｘ                （ｒでなければｘである）
ｒ  ｔｈｅｎ    ｎｏｔ  ｓ                （ｒならばｓでない）
ｎｏｔ  ｑ（ｑでない）        ←    単節
以上を節形式に変換すると次のようになる。
ｎｏｔ  ｐ  ｏｒ  ｑ
ｐ  ｏｒ  ｑ  ｏｒ  ｒ
ｓ  ｏｒ  ｔ
ｒ  ｏｒ  ｘ
ｎｏｔ  ｒ  ｏｒ    ｎｏｔ  ｓ
ｎｏｔ  ｑ
単節導出が可能なためには、単節が１個以上存在する必要があるが、ここでは「ｎｏｔ  ｑ」が単節である。
上記を  ［図１８］のように行列形式であらわす。論理記号の正符号は１、ｎｏｔ  は    −１に対応している。ｎｏｔ  ｑに該当する場所は「▲６▼、ｑ」である。それと「▲１▼、ｑ」、「▲２▼、ｑ」から新しい子節「ｎｏｔ  ｐ」、及び  「ｑ  ｏｒ  ｒ」が生ずる過程を［図１８］のようにあらわす。
【図１９】で  ｎｏｔ  ｐ  は単節となるので、新たな導出ステップのピボット軸は「▲１▼、ｐ」である。ｐ  の行で符号が異なる列を探すと、▲２▼列がこれに該当する。「ｎｏｔ  ｐ」と「ｐ  ｏｒ  ｒ」からｒが得られるので、ｒ  が次の導出単節となる。
【図２０】は「▲２▼、ｒ」がピボット軸である。  ここでｒの行を見ると、▲４▼列目には同じ１がある。これは「ｒ  ｏｒ  ｘ」という節形式である。「ｒ」はその部分節であるので、▲４▼列は▲２▼列に吸収され、以降の演算から削除される。
【図２１】は、［図１９］にピボット演算を行った結果である。新たな軸は「▲５▼、ｓ」である。ｓ  の行で▲３▼が次の導出対象となる。
【図２２】が、得られた新しい行列である。ここでは、すべての論理変数が単節となったので、演算は終了する。解は「ｎｏｔ  ｐ」、「ｒ」、「ｔ」、「ｎｏｔ  ｓ」、「ｎｏｔ  ｑ」である。ｘは不定であり、解は定まらない。なお、すべての論理変数が単節とならなくとも、手順が続かなくなった時点で演算は停止する。  すでに見てきたように、単節導出アルゴリズムでは、当初６個ある記号の数は、導出によって増加しないため、多くとも６回の演算で解が収束することが保証される。
【００２１】
［単節導出と一般導出の違い］
以上述べたように、単節導出には知識をホーン節に限定する、という制約がなく、かつ速い推論が可能である。パソコン程度の演算速度でも数千の知識ベースを処理できるので、並列演算システムのような高価な器材を使わなくとも良いという優れた特徴がある。
一方、単節導出は一般導出の特殊な場合であるから、運用上の制約があり、ルールを読み込ませただけでは解はアウトプットされない。例えば「ソクラテスは人間だ」、「人間は死ぬ」という知識を教えても、自動的には「ソクラテスは死ぬ」という結論は得られない。
ここで「ソクラテスは何か」？（ソクラテス？．．．．単節）という質問が入力されると初めて「人間」、「死ぬ」という単節解が得られる。
しかし、センサー情報、および人間によるロボットへの命令は、基本的に単節情報の集まりであるので、入力が単節に限定されることについての実用上の不都合はほとんどない。単節でない命令、例えば「リンゴかナシを持っておいで」、というような命令は実行されない。しかし、このような場合は、「最初のものを選ぶ」というような条件を予め教えておけば不都合はない。
また  「暗ければ、灯りをつけなさい」という条件付き命令も単節ではない。しかし、ロボットが明暗を判断する機能を持っていれば、暗いか明るいかは自力で判断する。その結果、暗ければ「灯りをつけなさい」という単節命令が実行され、そうでなければ命令は無視される。従って、これは単節入力と同等である。
また出力が単節であることについても、不都合ではなく、却って望ましいという見方ができる。「ＡかＢである」とか「ＡならばＢだ」という解では、むしろ混乱を招くからである。
【図面の簡単な説明】
【図１】は本発明の概念を図示したものである。
【図２】は特許請求範囲を示す概念図である。
【図３】は「ａ  は  ｂ  だ」、「ａ  ならば  ｂ  である」という文の構造図である。
【図４】は「ａ１  か、ａ２  か、ａ３  なら  ｂ  だ」という文の構造図である。
【図５】は「ａ  ならば  ｂ１  であり、ｂ２  であり、ｂ３  である」という文の構造図である。
【図６】は「ａ  ならば  ｂ１  か、ｂ２  か、ｂ３である」という文の構造図である。
【図７】は機械への質問で、末尾処理モジュールにより語尾が削除されるフローである。
【図８】は副詞が省略され、基本的な主語述語形式に変換されるフローである。
【図９】は「あなたの名前は」という質問に対しては「私の名前は．．．です」と答えなさいというプログラムのフローである。
【図１０】は文を主語述語に分離し、拡張プロダクションルールに翻訳するフローである。
【図１１】は述語が否定語を含む場合の翻訳のフローである。
【図１２】は主語が否定語を含む場合の翻訳のフローである。
【図１３】は述語が  ａｎｄ  接続詞を含む場合の翻訳のフローである。
【図１４】は述語が  ｏｒ  接続詞を含む場合の翻訳のフローである。
【図１５】は主語が  ｏｒ  接続詞を含む場合の翻訳のフローである。
【図１６】は主語が  ａｎｄ  接続詞を含む場合の翻訳のフローである。
【図１７】は解が得られた場合に、それをより人間の言葉に近づけるために「です。」をつける場合のフローである。
【図１８】は演繹推論問題の例題を行列形式にあらわしたものの第１ステップである。
【図１９】は演繹推論問題の例題を行列形式にあらわしたものの第２ステップである。
【図２０】は演繹推論問題の例題を行列形式にあらわしたものの第３ステップである。
【図２１】は演繹推論問題の例題を行列形式にあらわしたものの第４ステップである。
【図２２】は演繹推論問題の例題を行列形式にあらわしたものの最終ステップである。
【図１】
2004220458.tif 000011
【図２】
2004220458.tif 000012
【図３】
2004220458.tif 000013
【図４】
2004220458.tif 000014
【図５】
2004220458.tif 000015
【図６】
2004220458.tif 000016
【図７】
2004220458.tif 000017
【図８】
2004220458.tif 000018
【図９】
2004220458.tif 000019
【図１０】
2004220458.tif 000020
【図１１】
2004220458.tif 000021
【図１２】
2004220458.tif 000022
【図１３】
2004220458.tif 000023
【図１４】
2004220458.tif 000024
【図１５】
2004220458.tif 000025
【図１６】
2004220458.tif 000026
【図１７】
2004220458.tif 000027
【図１８】
2004220458.tif 000028
【図１９】
2004220458.tif 000029
【図２０】
2004220458.tif 000030
【図２１】
2004220458.tif 000031
【図２２】
2004220458.tif 000032