考察:「動画システムに関連して(次世代検索エンジンについて)」

by ご近所のきよきよ


 次世代Web検索システムについて、前に、パターンマッチングで自然言語処理すればいいのではないかと提案しました。あれから、文脈処理に入ってきて、プログラミングしているのですが、それでその案が更に具体的になってきました。今回はそれについて少し語りたいと思います。私の文脈処理については、下記の「考察:動画システム」をご覧ください。こちらは真正面からの自然言語処理です。
 
「考察:動画システム」はこちら
 
 
 で一方は、パターンマッチングを基本とするんでした。そして、単語の持つ意味は連想を利用して同一、背反を管理することで対応するのでした。オントロジーも魅力的。今回はもうちょっと踏み込みます。「考察:動画システム」でも説明しているのですが、単語の意味は素材集合というもので実現したらと思うのです。プライミングって技術的にはこうゆう事であると思うのです。単語の定義は世の中の単語のどれをサブ集合として持つかをファイルとして持つことで定義するわけです。
 それからフレームもプロトタイプフレームと現実のフレームがあって、どんな単語を持つかを定義している。レストランですと{椅子、テーブル、人・・・}となります。これはプロトタイプで、現実値は{店員a、店長b、椅子3脚、テーブル1個、客:瑞樹、客:未夢・・・・}となる。「考察:動画システム」ではステージ、シーンという一つメタなフレームも導入しています。
 それから文章は一階述語論理に落とすのがいいと思います。普通のProlog表現でいいのは、単語をプリミティブに落とさない方式を採用すれば、今のPrologで良いわけで、ただ格情報を裏方で持つ必要があるだけです。

例) 猫の名前はタマです ----->フレーム猫の名前スロットにタマをいれる。
 このとき、述語「です」を定義する:名前(タマ),格情報:is_a(name)

これで、「タマって何ですか?」と問われたら、Prologの推論を実施するだけです。
フレームを後ろ向き推論で求めて「猫」を得るわけです。

 また、「長野の街へ歩く」という文は
  歩く(*、長野の街):-MOVE(歩く)^PRESTAY(家)^STAY(長野の街)
という具合になるでしょうか。

 こうした一連の変換作業はパターンマッチングで行うことになると思います。これはこれで大きなシステムになってしまうかも知れません。パターンは膨大になるでしょうね。
 
 キーワード検索と混在で実現するのが効率的だと考えられますので、ページとか文書単位に現実値のフレームとProlog文の集合を作っていくことになるのでしょう。どうでしょうか、こんな案は。解析的な自然言語処理と平行して研究していくべきなのかもしれません。相補って、良い研究成果がでるような気がします。
 
 それでは最後に、ちょっとPrologのイメージを提示してみたいと思います。
 
(例文)「朝、本屋に行った。ついて早々、「形と動きの数理」をもらって、「倒産」という本を探したが、無かった。専門書コーナーを観ていたら、TerboGearなるフレームワークの本があった。衝動買いしてしまった。今日はこんなものかなと思って、帰ることにした。店内には「千の風になって」が流れていた。家に帰って、昼食を食べた。」
 
 これをPrologイメージに解釈するとこんな風だと思います。*は推測を表すとします。
<Prolog表現>
Scene(朝,*家):-行く(*家,本屋) ; 行く(source,target):-MOVE(行く)^PRESTAY(source)^STAY(target);;
Scene(DeltaTime):-Time(早々)^もらう(「形と動きの数理」)^*NAME(*本,「形と動きの数理」) ; もらう(*):-買う(*)^CONTEXT(本屋);;
Scene(CF):-探す(本)^NAME(本,「倒産」);;
Scene(CF):->無い(*本)*^NAME(本、「倒産」);;
Scene(DeltaTime):-観る(専門書コーナー)^ある(本)^ABOUT(本,フレームワーク)^ABOUT(フレームワーク,TerboGear);;
Scene(DeltaTime):-買う(*本)*^ABOUT(本,フレームワーク)*^ABOUT(フレームワーク,TerboGear)^ATTRIBUTE(買う,衝動的);;
##今日はこんなものかなと思って
##帰る事にした
Scene(DeltaTime):-Location(店)*^equal(店,本屋)^流れる(「千の風になって」)*^NAME(*曲,「千の風になって」);流れる(*):-PLAY(*)^CONTEXT(本屋);;
Scene(DeltaTime):-帰る(*本屋,家)^食べる(昼食);;
 
<以上>
ここで「買った本は何?」なんて質問があると、「もらう」と「買う」の項を出力すれば良いことになります。この質問はPrologですと、
 買う(?):-put(買う(?))
という式になりますか。
 
 もう少し考えてみます。
(例文)「英国の話題。
    首相官邸に猫が住んでいました。
    猫の名前はタマでした。」
なんて文は、フレームを想定しないと解けない問題です。
・ 「英国の話題」で、英国フレームを読み込むことになります。
  Select(英国フレーム);;
・ 「首相官邸」で、英国フレームの中の首相スロットに登録されたフレームを読むことになります。
Select(首相官邸、英国フレーム);;
・ 「猫が住んでいました」で、首相官邸フレームに「猫」を登録することになります。
Set(猫、首相官邸);;
・ そして、NAME(猫,タマ);;
 
 それで、英国首相官邸の猫の名前は?(NAME(猫,?)^*PLACE(首相官邸)^*PLACE(英国))と聞かれて、フレームサーチをして、猫の属性を見て「タマ」と返すわけですね。
 
 

おわり