SHOEISHA iD

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

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

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

対話しながら検索できるコンシェルジェ風アプリの実装

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

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

6. 意味解析のテスト

 ここまでの作業でエージェント・ネットワークが日本語の質問から意図を抽出してくれるようになりました。意味解析の動作を試すには「Interaction Console」を使います。[Ctrl]+[I]を押して「Interaction Console」を表示し、「User Input」フィールドに質問を入力し[Apply]を押します。質問から意図が抽出され解析結果XMLに変換されます。例えば「赤坂のイタリアン」と入力すると、それは「検索」という操作(Command)で、対象(Object)は「レストラン」、その条件(Field)が「エリア=赤坂」「ジャンル=イタリアン」と認識されます。認識の結果はエージェント名をタグとしたXMLで出力されます。

図16 意味解析のテスト結果
図16 意味解析のテスト結果

7. 検索処理の実行

 解析結果XMLだけでは結果が得られないので、これをSQLに変換しデータベースへの検索処理が実行されるようにします。この処理はエージェント・ネットワークの上方にあるActuatorエージェントに登録されるサービスプロバイダというモジュール(Service Provider)で行われます。サービスプロバイダは複数登録でき、それぞれにXPathに似た式(以降XPath式と略記)を持ちます。このXPath式で解析結果XMLを評価し、合致したサービスプロバイダが呼び出されます。

 サービスプロバイダを登録するには、Actuatorエージェントをダブルクリックします。「Actuator Agent Editor」という設定ダイアログが表示されます。サービスプロバイダを登録するには[New]を押します。この画面ではサービスプロバイダを起動するためのXPath式をXPath expressionに設定します。検索コマンドが実行されたときにサービスプロバイダを起動したいのですが、この場合はXMLに<検索>というタグが含まれるで「//検索」と記述します。タグ名の前に/を2つ重ねてつけるとルートのXMLノードとすべての子孫ノードに対してタグの存在をチェックします。次に起動するサービスプロバイダのJavaクラス名を設定します。[Change]ボタンを押すとJavaクラスを選ぶダイアログが表示されるので、com.dejima.serviceProvider.DatabaseServiceProvider をプルダウンより選択します。このサービスプロバイダは、解析結果XMLをselect文のSQLに変換してデータベースからデータを検索する機能を持ちます。

図17 サービスプロバイダの登録手順
図17 サービスプロバイダの登録手順

 Javaクラスを選んだ後[OK]を押すとDatabaseServiceProviderの設定画面が開きます(図18)。ここでは表3に示す項目を設定します。また今回のアプリケーションでは使用しませんが他に表4に示すような設定項目があります。

図18 DatabaseServiceProvider設定画面
図18 DatabaseServiceProvider設定画面
表3 DatabaseServiceProviderの設定項目(必須)
項目名 内容 設定する値
Sql Configuration SQL変換ルールを記述した設定ファイル 後述
Datasource JDBC URLサブネームの文字列 restaurant
Driver JDBCドライバのクラス名 sun.jdbc.odbc.JdbcOdbcDriver
Url JDBC URLサブプロトコルまでの文字列 jdbc:odbc:
表4 DatabaseServiceProviderの設定項目(オプション)
項目名 内容
Username JDBCログインユーザー名
Password JDBCログインパスワード
Execute SQL SQLを実行するかどうか。チェックをはずすとSQLの生成のみを実施
Max Results 検索する最大行数

 Sql Configurationには解析結果XMLからSQLへの変換ルールを記述したXML設定ファイルを記述します。[Sql Configuration]ボタンを押すとエディタが開きます(図19)。

図19 SQL変換ルールの編集画面
図19 SQL変換ルールの編集画面

 手ですべて記述してもよいのですが、編集画面にある[Generate]ボタンを押すとエージェント・ネットワークの構造を解析し雛形を自動生成してくれます(リスト4)。

リスト4 自動生成されたSQL変換ルール
<SqlProperties>
  <TableProperties>
    <Table name="レストラン" agent="レストラン.com.dejima.templates.TemplatizedAgent@x"
        tag="レストラン" primaryKey="ID">
      <Column name="エリア" datatype="STRING" useQuotes="true" path="エリア" />
      <Column name="ジャンル" datatype="STRING" useQuotes="true" path="ジャンル" />
      <Column name="星" datatype="STRING" useQuotes="true" path="星" />
    </Table>
  </TableProperties>
</SqlProperties>

 自動生成された設定を実際に使用するテーブルに合わせ、テーブル名、列名、列の型を修正します(リスト5:太字部分)。修正が終わったら[Save As]を押し設定ファイルを保存します。ファイル名は何でもよいですがデフォルトのファイル名「sql.xml」で保存します。

リスト5 修正後のSQL変換ルール
<SqlProperties>
  <TableProperties>
    <Table name="restaurant" agent="レストラン.com.dejima.templates.TemplatizedAgent@x"
        tag="レストラン" primaryKey="rid">
      <Column name="area" datatype="STRING" useQuotes="true" path="エリア" />
      <Column name="genre" datatype="STRING" useQuotes="true" path="ジャンル" />
      <Column name="stars" datatype="INTEGER" useQuotes="true" path="星" />
    </Table>
  </TableProperties>
</SqlProperties>

 設定できたら[Ok]を押して変更を反映させます。サービスプロバイダは設定ダイアログの階層が深いのですべてのダイアログで[Ok]を忘れないように注意してください。

8. 動作確認

 Interaction Consoleを開き「赤坂のイタリアン」と入力してみましょう。入力から要素が抽出され解析結果XMLが生成されるところまでは先ほどと同じですが、そこからSQLが生成されデータベースからレストランのデータが検索されます。SQLと検索されたデータは解析結果XMLに付加されて出力されます(リスト6)。

リスト6 実行結果
リスト6 実行結果

 文脈を使用した対話的検索も試してみましょう。エージェント・ネットワークのデフォルトの設定では入力に「..」(ドット2つ)を付加することで質問を継続できます。「..新宿では」と入れると条件「赤坂」が「新宿」に置き換えられ「エリア=新宿 かつ ジャンル=イタリアン」のレストランが2件検索されます。「..3つ星」のところと入れると今度は条件が付加されて「エリア=新宿 かつ ジャンル=イタリアン かつ 星=3」という条件でデータを絞り込みます。

9. おわりに

 Answers Anywhereを使うと日本語で対話的にデータベースを検索するシステムが、簡単に構築できることが理解していただけたのではないかと思います。1つのテキスト入力により各フィールドを横断的に検索した結果がXMLで出力されますので、クラウドにおくことでフリーワード検索を持ったWebサービスにも利用できるかと思います。

 次回はこのサンプルを拡張して、Webで扱いやすいように出力をHTMLに変換する方法や、また別の対話機能として必須項目を入力するようユーザーに通知する方法などを解説をしたいと思います。

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

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

もっと読む

この記事の著者

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

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング