SHOEISHA iD

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

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

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

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

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

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

エージェントのパラメータ設定

 エージェントの役割が決まったら各エージェントの振る舞いを決めるためのパラメータを設定します。主なパラメータとしては以下にあげたものがあります。他にもたくさんのパラメータがありますが、連載の中で徐々に解説していきたいと思います。

語彙

 エージェントがクレームをするための語彙です。例えばエリアを表す語彙として「エリア」「場所」「地区」などが考えられます。これらのうち代表の語彙をキーワード、その同義語をシノニムと呼びます。先の例ではキーワードを「エリア」、同義語が「場所」「地区」となります。

属性値

 Fieldの役割を持つエージェントには属性値が定義できます。値の例としてはエリアなら「赤坂」「銀座」、ジャンルなら「寿司」「フレンチ」などになります。

文法規則

 文章解析のための文法規則を調整します。調整の例としては、入力にキーワードがあればクレームする、属性値があればクレームをする、または両方入力されたときのみクレームをするなどがあります。

未知語認識の有効/無効

 未知語に対してエージェントとがクレームをするか、どのような規則で未知語とみなすかを設定します。ただし日本語の環境では使用を控えたほうがよいため無効に設定します。

文脈追跡の調整

 文脈追跡の動作を調整します。

 ここでは「エリア」「ジャンル」「星」のそれぞれのエージェントについて検索条件となる属性値を設定することにします。「エリア」エージェントには地名を属性値として指定します。このエージェントをダブルクリックし知識設定画面である「Agent Editor」を開きます。たくさんの設定項目がありますが、ほとんどは初期値が設定されているため、設定するべき箇所はそれほどありません。例えば、「Keyword」については役割を割り当てた際にエージェント名が自動で設定されます。

 属性値を設定する方法はいくつかありますが、一番簡単なテキストファイルに値を格納する方法で行いたいと思います。 [File]ボタンを押し「File Template Property Editor」を開きます。エディタ上に値を1行づつ記述し[Save]を押してファイルに保存をします。保存したら[OK]を押し、さらに「Agent Editor」の[OK]を押して変更をエージェントに反映させます。「ジャンル」「星」の各エージェントにも同様に表2に示す属性値の設定を行います。

図10 「エリア」エージェントへ地名を設定
図10 「エリア」エージェントへ地名を設定
表2 エージェントに設定する属性値
エージェント 保存するファイル
エリア 赤坂
新宿
渋谷
area.txt
ジャンル 中華
イタリアン
寿司
genre.txt
1
2
3
stars.txt

 エージェント「エリア」「ジャンル」「星」の文法規則と、未知語認識のパラメータにも変更を加えます。文法規則のパラメータ[Maybe Explicit Match]にチェックを入れ、未知語認識のパラメータ[Support Left Guess][Support Right Guess][Support Middle Guess]はチェックをはずします(図11)。文法規則の設定ではキーワードと属性値の両方が入力に含まれることを許可し、未知語認識の設定ではこの機能を無効にしています。なぜこの設定をするかという詳細な説明は省略しますが、エージェントが日本語の環境で自然に文章解析をするための定石だと覚えてください。

図11 振る舞い制御パラメータの設定
図11 振る舞い制御パラメータの設定

トークン分割辞書ファイルの作成

 エージェント・ネットワークは文章解析の際に、トークンという単位で語彙を認識しクレームをします。解析対象が英語であれば語と語の間に空白があるためそれをトークン区切りとして使用します。しかし、日本語の場合には空白を語の区切りとして利用することができません。そこで、Answers Anywhereでは、ひらがな、カタカナ、漢字等の文字種の変化部分を区切りとしてみなします。ただし、このような機械的なやり方では対応できない入力もあるためトークン分割辞書というものを使用し、そこに登録されている語をトークンとして区切りを行います(図12)。

図12 トークン分割の例
図12 トークン分割の例

 トークン分割辞書ファイルはAnswers AnywhereのSDKでは作成できないので、別途テキストエディタで作成し、エージェント・ネットワークのプロジェクト・フォルダに「single.txt」という名前で配置します。このファイルには分割の単位としたい語を1行づつ記載します。どのような語を選んだらよいかですが、ひとつの基準として各エージェントに設定されている日本語のキーワードと同義語の一覧があげられます。今回の例では「検索」「レストラン」「エリア」「ジャンル」「星」がその語彙となります。ファイルを記述し保存したら、エージェント・ネットワークに読み込ませるため、作成中のエージェント・ネットワークをいったん保存し再度開きなおします。

図13 トークン分割辞書ファイルの作成
図13 トークン分割辞書ファイルの作成

エージェント間の関係構築

 最後にエージェント間の関係を構築します。作り方はリスト3に示すような機械的なルールとなります。

リスト3 エージェント間の関係ルール

  • 親System → 子Command
  • 親Command → 子Object
  • 親Object → 子Field

 親となるエージェントの上にマウスカーソルを持っていき右ボタンを押します。そのまま子の上までカーソルをドラッグしてボタンを離すことで作成できます。

図14 エージェント間の関係付け
図14 エージェント間の関係付け

 リスト3のルールに従い、すべてのエージェントの間に関係をつけたものを図15に示します。

図15 エージェント間の関係を設定したネットワーク
図15 エージェント間の関係を設定したネットワーク

次のページ
6. 意味解析のテスト

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

  • このエントリーをはてなブックマークに追加
自然言語対話エンジン「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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング