Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

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

 「Answers Anywhere」は、自然言語で入力されたユーザーの指示から意図を汲み取り、対話をしながら機器操作やデータ検索をするシステムを構築するためのミド ルウェアです。今回はこのAnswers Anywhereを使い、日本語の質問で対話的にデータベースを検索するシステムを開発してみます。

目次

1. はじめに

 「Answers Anywhere」は、自然言語で入力されたユーザーの指示から意図を汲み取り、対話をしながら機器操作やデータ検索するシステム構築のためのミドルウェアです。連載第1回では概要やインストール方法、第2回ではどのように動くのかについて紹介してきました。今回はこのAnswers Anywhereを使い、日本語の質問で対話的にデータベースを検索するシステムを開発してみましょう。

 データベースにはレストランのデータが格納されており「赤坂の3つ星イタリアンは?」というような質問で検索をします。また、図1のイメージに示すように自由に条件の追加や変更ができます。まるでコンシェルジュに相談しながらレストランを探しているような、未来的な感じのアプリケーションです。

図1 アプリケーションの動作イメージ
図1 アプリケーションの動作イメージ

2. アプリケーション仕様

 レストランのデータはデータベース上の表1に示すスキーマのテーブルに格納されています。実際のアプリケーションではエリアやジャンルは別テーブルに格納されるような設計が普通かと思いますが、今回は単純化のために1つのテーブルにすべての値を格納することにします。

表1 テーブルrestaurantのスキーマ
カラム名 データ内容
rid integer レストランのID(連番)
rname varchar(50) レストラン名
area varchar(16) エリア名
genre varchar(16) ジャンル名
stars integer 評価(なし(NULL)、1、2、3)
図2 restaurantテーブルに格納されているデータ
図2 restaurantテーブルに格納されているデータ

 今回作成する検索アプリケーションの仕様は次のとおりです。

リスト1 検索アプリケーション仕様
  • 文章で検索条件を入力し、表1に示すテーブルからレストランのデータを検索する
  • 検索条件はエリア名、ジャンル名、評価を検索条件とする
  • 検索条件は、順不同または一括での指定、置き換えができることとする

3. データベースの準備

 今回作成するアプリケーションでは、Answers Anywhereと同じアイエニウェア・ソリューションズが開発・販売しているデータベースSQL Anywhere 11を使用します。商用データベースではありますが、開発用途またはデータベースとWebサーバーが同一PCに載るような小規模なWebシステムであれば無料で使用できます。システムに組み込んで使用でき、管理の手間がほとんどかからないことが特長のデータベースです。

 SQL Anywhere は別途PCへのインストールが必要となります。お持ちでない方は弊社ダウンロードページからSQL Anywhere Developer Edition開発者版を入手してください。インストール方法は難しくありませんが、管理ツールの簡単な説明も含め「SQL Anywhereのインストールと概要」に解説がありますのでご覧ください。

 インストールが完了したらサンプルのデータベースファイル「RestaurantSearch_database.zip」をダウンロードしてください。zipを展開し同梱のodbc_setup.batを実行するとデータベースファイルrestaurant.dbがODBCデータソースrestaurantに登録されます。

 Answers Anywhere はデータベースにアクセスする手段としてJDBCを使用しますので、他にもJDBCに対応しているデータベースであれば問題なく使用できます。今回は設定を簡単にするためにサン・マイクロシステムズ社のJavaに標準で付属しているJDBC-ODBCブリッジを使用してSQL Anywhereに接続します。

4. エージェント・ネットワークの設計

 Answers Anywhereではデータを構成する要素を概念モデルで記述しますが、そのモデルをエージェント・ネットワークと呼んでいます。エージェント・ネットワークの働きや構造については前回の記事で解説しました。

 これを基に今回想定したアプリケーションの仕様にあてはめてみましょう。

 まずアプリケーションの範囲ですが、「レストラン全体の中から条件に合致したものを検索」となります。範囲が決まったらそれらを処理の最小単位に分割します。このときは操作の内容(Command)、操作の対象(Object)、対象の持つ属性(Field)という区分で考えます。この区分で考えた分割結果をリスト2に示します。

リスト2 アプリケーション範囲の分割
  • 操作の内容(Command)
    • 検索
  • 操作する対象(Object)
    • レストラン
  • 対象の持つ属性(Field)=条件とするレストランの属性
    • エリア名、ジャンル名、星(評価)

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

著者プロフィール

バックナンバー

連載:自然言語対話エンジン「Answers Anywhere」で実現する使いやすいUI
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5