パン田一郎の対話ロジック

ATL の伊藤 (takahi_i) です。

ちょっと前の記事でパン田一郎について触れました。本稿では「パン田一郎」という LINE アカウントがどのように返事を生成(対話)しているかについてもう少し詳しく解説してみます。

LINE アカウントパン田一郎の機能

LINE アカウントパン田一郎の主な機能はユーザから話しかけられる(メッセージを受け取る)と返事をする(メッセージ文を返す)というものです。以下の例ではパン田一郎が天気を聞かれて、返事として天気情報を返しています。

写真 3

全体像と構成要素

パン田一郎の対話部分は大きく分けて二つのコンポーネントからなります。

  • メッセージ処理コンポーネント
  • 対話文生成コンポーネント
  • メッセージ処理コンポーネントはユーザから入力されたパン田一郎へのメッセージ(入力文)を処理します。メッセージ処理コンポーネントが抽出した情報をもとに対話文生成コンポーネントは 返事となるメッセージ(文)を生成します。以下各コンポーネントが行っている処理について説明します。

    メッセージ処理コンポーネント

    メッセージ処理コンポーネントではユーザから入力されたメッセージ(入力文)から情報を抽出します。情報の抽出には Apache UIMA というツールを採用しました。

    Apache UIMA を使ってユーザは非構造化データ(文書)に対する加工や、情報の抽出方法を定義できます。Apache UIMA の特徴として入力文書に対する処理がパイプラインとして定義されるという点があります。処理が「パイプラインとして定義される」とは、入力に対する処理が独立したステージ(単一処理をおこなうコンポーネント)の連なりとして表現されることを意味します。

    UIMA を採用した理由の1つは、メッセージ(自然言語文)という非構造化データに対する処理をパイプラインのステージごとに分離して開発できるためです。UIMA を利用せずに入力処理を1つの大きなプログラムで行ってしまうとどうしてもプログラムが大きくなり、将来の保守性、拡張性に影響します。

    今回は UIMA のステージとして処理を分離したため、小さな疎結合のプログラム集合としてシステムを構築できました。結果、将来個々のステージを簡単にアップデートできます。

    たとえば、パン田一郎では以下のようなパイプラインとなります。

    linepanda.001

    上図を見るとわかるようにパン田一郎では、以下の処理が行われています。

  • 意図理解
  • 時間抽出
  • 場所抽出
  • 数値表現抽出
  • 現状各コンポーネントは簡単なパターンにより実装されておりますが、UIMA により各コンポーネントが疎結合になっているため、比較的気軽にアップデートできます。

    メッセージ処理コンポーネントで抽出された情報とユーザからのメッセージは、2つ目のコンポーネント、対話文書生成コンポーネントに渡されます。

    対話文生成コンポーネント

    ユーザからのメッセージとメッセージ処理コンポーネントで抽出された情報を元に対話文生成コンポーネントが返事を返します。

    対話文生成コンポーネントは入力メッセージと抽出された情報を元にどのような対話が行われるのかを決定します。

  • 時間を聞いている
  • 天気を聞いている
  • バイトを探している
  • バイトのスケジュールを聞いていいる
  • 決定された意図パターンごとに、返事文の生成ルールがあり各ルールに基づいて返事文の生成が行われます。

    返事を生成する上で難しいのは、「ユーザの意図がわからない場合です」。以下ユーザの入力意図がわからなかった場合の処理について解説します。

    意図がわからない場合

    対話文生成コンポーネントは意図によって返事文を生成します。ただし、ユーザの意図が理解できないもしくは、意図に対する返事文生成のルールが定義されていない場合があります。

    このような場合にもやはりなんらかの返事を生成しなくてはなりませんが、毎回「言っている意味がわからない」と答えたり、ランダムに返事を返すのでは自然なアカウントになりません。我々はこの問題に対して簡単なヒューリスティックで対処しています。

    具体的には、ユーザから入力されるであろうと考えられる文とその返事からなるペア集合を用意します。そしてユーザから入力が想定された入力との類似度がある一定上の場合にその返事を返します。

    今回触れなかった点

    今回解説した仕組みでユーザからの入力に対して返事を返せますが、実際にはもう少し複雑な処理が存在します。具体的にはユーザがバイトを探している場合などではどの地域のアルバイトを提示するかについての情報が必要なので聞き返す必要がありますが、現行のパン田一郎はこのような「聞き返す」という要件に一部ではありますが答えられる実装となっています。