1. はじめに
Answers Anywhereは自然言語で入力されたユーザーの指示から意図を汲み取り、対話をしながら機器操作やデータを検索するシステムを構築するためのミドルウェアです。エージェント・ネットワークという独自の技術により高速、小容量、言語依存度が低いエンジンとなっていることが特徴です。前回は、SDKのインストールとAnswers Anywhereが自然文の入力に対してどのような反応を返すのかを電子メール検索のサンプルを使って説明しました。今回は同じサンプルを使いAnswers Anywhereがどのように動くのかについて解説をしたいと思います。
2. エージェント・ネットワークの構造
エージェント・ネットワークは、対象となるアプリケーションの機能やデータ構造を記述した概念モデルです。このモデルは「エージェント・ネットワーク」という言葉が示すようにエージェントを組み合わせてネットワーク状の構造としたものです。エージェント・ネットワークは以下の順で構築されます。
- 対象とするアプリケーションの範囲を特定する(アプリケーションドメインの設定)
- 範囲を機能またはデータ要素に分割しそれを処理の単位とする。処理の単位は1つずつエージェントに割り当てる
- 分割された処理単位の関係に基づきエージェントの親子関係を構築
- 上記処理単位を起動させるための語彙や文法ルールを各エージェントに設定する
具体的な例として、前回サンプルとして動かした電子メール検索を行うアプリケーションを考えて見ましょう。このアプリケーションの範囲を考えると(「電子メール検索」となっていますが操作全般について考えました)メール全体の中から条件に合致したものを参照する、削除するという操作が考えられます。操作の対象はメールやアドレス帳といったものになるでしょう。このように想定したアプリケーション範囲をリスト1に示します。
・条件に合致したメールを検索する ・条件に合致したメールを削除する ・条件に合致したアドレス帳を検索する ・条件に合致したアドレス帳を削除する
範囲が決まったらそれらを処理の最小単位に分割します。このときは操作の内容(Command)、操作の対象(Object)、対象の持つ属性(Field)という区分で考えるとやりやすいと思います。この区分で考えた分割結果をリスト2に示します。
操作の内容(Command) ・検索する ・削除する 操作する対象(Object) ・メール ・アドレス帳 対象の持つ属性(FieldまたはRelation) ・メールのもつ属性:重要度、作成日、サブジェクト、 送信者(アドレス帳)、受信者(アドレス帳) ・アドレス帳の中の人のもつ属性:姓、名、性別 ...etc
分割できたらそれを処理の単位としてエージェントに割り当てます。そして関係のあるもの同士を接続することでエージェント・ネットワークが構築できます。リスト2の例では「検索」の対象は「メール」と「アドレス帳」のため、EmailエージェントをEmailとContactエージェントに接続します。割り当ての一覧を表1に、構築されたネットワークを図1に示します。
区分 | 分割された処理 | エージェントへの割当 |
操作の内容(Command) | 検索する | Find |
削除する | Delete | |
操作する対象(Object) | メール | |
アドレス帳 | Contact | |
対象の持つ属性(Field) | 重要度 | Priority |
受信日 | CreationDate | |
サブジェクト | Subject | |
対象の持つ属性 他の対象にひもづくもの(Relation) |
送信者 | Sender |
受信者 | Receiver |
最後に、各エージェントに語彙を割り当てます。Answers AnywhereのSDKでサンプルを読み込み、Emailエージェントをダブルクリックするとエージェントの設定画面が開きます。設定画面のTemplate PropertiesタブのKeywordの部分にはそのエージェントの処理単位を起動させるための語彙「Email」が設定されています。またSynonym Tableタブには語彙Emailの同義語が「メール」を含め10個ほど記述されています。この設定によりユーザーが「メール」と入力するとEmailエージェントが緑色になりメールに関連する操作が起動されるというわけです。エージェントには他にも振る舞いを設定するパラメータがたくさんありますがそれらについては連載の中で徐々に解説していきたいと思います。
エージェント・ネットワークのアーキテクチャ上の特徴ですが、処理単位を分割することで各エージェントの処理が単純化され、文章を解析するという複雑な処理でも大量の計算をしなくてすむようになります。このため組み込み機器にものせて動作させることができるくらいエンジンの処理が軽くなります(現に組み込み版ランタイムも販売されています)。また、モデルの拡張をしたいときは新たな部分のみをエージェントとしてネットワークに追加するという方法で実現できるため、拡張性も高いという特徴を持っています。