SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

自然言語対話エンジン「Answers Anywhere」で実現する使いやすいUI(AD)

エージェント・ネットワークの仕組み

自然言語対話エンジン「Answers Anywhere」で実現する使いやすいUI 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

3. エージェント・ネットワークの仕組み

 このようにして構築されたエージェント・ネットワークは、入力に対して図3のような流れで解析が行われ処理が実行されます。

図3:Answers Anywhereの処理と情報の流れ
図3:Answers Anywhereの処理と情報の流れ

 それでは処理の流れを、順を追って説明しましょう

1)文章解析

 入力文の意味を解析する処理です。エージェント・ネットワークは、ユーザーから受け取った文章入力を親から子へ全エージェントに流し、解析を依頼します(図4矢印)。各エージェントの持つ語彙や文法ルールに対して入力の一部分がマッチすると、エージェントはその部分にクレーム(理解できたというマーク)を付け、親エージェントに報告します。親エージェントは、自身と子エージェントのクレームを結合して意味を強め、さらに親に通知します。

 図4の例では、入力文のうち「池田」はアドレス帳の人名なのでContactエージェント、「重要」は重要度を示すPriorityエージェントがそれぞれクレームをつけます。ContactからのクレームはSender、Receiver両方に報告されますが、Senderでは送信者を示す「からの」にクレームと「池田」が結合され、結果的に「池田からの」がSenderのクレームとなります。一方ReceiverではContactから通知された「池田」のみがさらに親に通知されます。すべてのクレームが同様に処理され、最終的に理解できた部分を示すクレーム「池田からの重要メール」がInterpretationエージェントに届きます。

図4:文章解析処理・入力に対する各エージェントのクレーム
図4:文章解析処理・入力に対する各エージェントのクレーム

 次に、1番強いクレームを出したエージェントに結果出力の依頼をします。依頼を受けたエージェントはXML出力を出します(図5)。子から順番に収集された出力を結合し最終的に解析結果XMLとします。図5の例ではクレームを出したSystem、Find、Email、Sender、Contact、Priorityにから出力がされています。Receiverも「池田」に対してクレームをしましたがSenderのクレーム「池田からの」と重なっており、かつ小さかったので負けてしまい出力依頼がされませんでした。これがエージェント・ネットワークの特徴的な動きである競合解決の仕組みです。

図5:文章解析処理:解析結果XMLの出力
図5:文章解析処理:解析結果XMLの出力

 それでは、クレームが重なっていて先の例のように意味の強さが決められない場合はどうなるでしょうか? 例えば図6のように「山田のメール」と入力されたときSender、Receiver両エージェントからともに「山田」に対するクレームがEmailエージェントに届きます。この場合は「山田からのメール」「山田宛のメール」のどちらの意味にも取れる解釈が一意に決められない曖昧な状態(Ambiguityと言います)とみなされ、不確定な部分が候補として出力されます。この出力は後述の出力整形処理でメッセージに変換されユーザーに意味を確定するように促します。

図6:曖昧(Ambiguity)な解析結果の例
図6:曖昧(Ambiguity)な解析結果の例

2)文脈追跡

 文章解析結果に前回の処理結果を考慮し対話的な動きを与えるのが文脈追跡です。以下の2つの内容が実施されます。

引継ぎ処理

 前回の入力に対するXML出力を今回の出力に結合します。クレームしたエージェントの子の中で、前回はクレームしたが、今回クレームしていないエージェントの出力が結合の対象となります。図7の例では前回の入力「池田からのメール」でSenderエージェント、今回の入力「重要なものでは」Priorityエージェントがクレームしました。ここで、Sender、PriorityともにEmailエージェントの子のため、Senderエージェントの前回のXML出力が引継ぎ対象となり出力に付加されています。結果的にこの2つの入力は「池田からのメール(のうち)重要なもの」という意味に解釈されたわけです。人と人とが会話しながら頭の中で情報を組み立てていくような動きと考えると分かりやすいかと思います。

話題での優先度づけ(Recency)

 解析結果に競合が発生し曖昧状態となった場合に前回クレームしたほうを優先します。例えば、「山田」とだけ入力された場合、文脈がなければ「山田からの」「山田宛の」の2つの意味のどちらかが確定できませんが、前回「池田からのメール」と入力されでいるのであれば、Senderエージェントの方に話題があるとみなされ、そちらを優先して「山田からの」を自動で選択するように動作します。

図7:文脈追跡処理(引継ぎ)
図7:文脈追跡処理(引継ぎ)

3)推論ヒント

 入力の解析結果をもとに、次のユーザー入力を支援するヒントを出すための処理になります。以下2つの内容が実施されます。

関連性の高い操作の提示

 今回の入力内容に関連性の高い次の操作を提示するための処理です。エージェント同士のつながりは処理単位の関連性を示しているため、クレームしたエージェントにつながっているエージェントは今回の入力に関連が高いと言えます。このつながりをユーザーに提示することでユーザーの操作支援ができます。図8の例では「池田」という入力に対してクレームしたエージェント配下の未クレームのエージェントを調べています。Findの子であるEmail、そのまた子のSender、Receiverを通じてクレームしているContactにつながっているので図の赤線部分は関連が高いと判断され、そこを通る「池田からのメール(Contact-Sender-Email)」「池田宛のメール(Contact-Receiver-Email)」は関連性が高い処理であるとしてユーザーにヒントとして提示されます。

必須値のチェック

 必須の値であるがまだ未入力であるものをチェックします。チェックの結果は後述の出力整形処理でメッセージに変換されユーザーに必須値を入力するように促します。電子メール検索のサンプルではこの機能は使っていないため具体的な例は次回以降の連載にしたいと思いますが、この処理をすることでAnswers Anywhereがより対話的にみえる動きとなります。

図8:推論ヒント処理(関連性の高い内容提示)
図8:推論ヒント処理(関連性の高い内容提示)

4)処理実行

 解析結果XMLをもとにデータの抽出やアプリのAPIを呼び出す部分です。この部分は処理にあわせてモジュールの入れ替えができる構造となっています。このモジュールのことをサービスプロバイダと呼びます。Answers Anywhere標準では以下のサービスプロバイダを提供しています。

データベース・サービスプロバイダ

 データベース検索をするためのサービスプロバイダです。解析結果XMLから検索SQLを自動生成し、JDBC経由で取得した検索結果を実行結果XMLに変換します。電子メール検索のサンプルではこのサービスプロバイダを使用しています。

図9:データベース・サービスプロバイダでのSQL生成例
図9:データベース・サービスプロバイダでのSQL生成例
WebXMLサービスプロバイダ

 RESTインターフェースを備えたWebサービスに接続するためのサービスプロバイダです。解析結果XMLの指定された要素を抜き出してURLをつくりWebアクセスし、得られた結果を実行結果XMLとします。

RSSサービスプロバイダ

 WebXMLサービスプロバイダと働きは似ていますが、RSSサイト向けに特化したものです。

 また、サービスプロバイダAPIを使用して新規のサービスプロバイダを開発することで、標準でサポートされていないものに対しても連携できます。

5)出力整形

 文章解析処理で発生した曖昧状態や推論ヒント処理でのヒント情報はXML形式の情報として実行結果XMLに含まれていますが、それを人が読める文章に変換します。また同時にHTMLやプレーンテキスト等、表示可能な形式の文字列に変換します。この変換を行うモジュールのことをフォーマッタと呼びます。どのフォーマッタを使用するかは入力のたびに選択ができるので、同じユーザーが複数種類の入出力デバイスを使用するマルチモーダルなアプリケーションが実現しやすいと言えます。

図10:フォーマッタでのHTMLへの変換例
図10:フォーマッタでのHTMLへの変換例

 以上の流れで、電子メール検索のサンプルで見たようなユーザーの文章による質問からデータベースを検索し結果を表形式で表示するというAnswers Anywhereの基本動作が実施されています。

次のページ
4. エージェントとは何か?

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
自然言語対話エンジン「Answers Anywhere」で実現する使いやすいUI連載記事一覧

もっと読む

この記事の著者

アイエニウエアソリューションズ株式会社 伊藤 純一(イトウ ジュンイチ)

アイエニウェア・ソリューションズ株式会社 シニアエンジニア。8ビットの時代からコンピュータに触りはじめBASIC、アセンブラ、C言語などを独習。サンマイクロシステムズ入社の年にJavaが発表され、そこでJavaによる金融系、官公庁系のシステム開発を中心に手がける。その後外資系ベンチャーのデジマ・ジャ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4325 2009/09/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング