2020年5月7日木曜日

初歩の雑談対話システムをAndroidで作ってみました(その1)

要旨】自然言語処理と機械学習をJavaで学ぶための優れた書籍があります。その中に、形態素解析を利用した雑談対話システム(Therapist BOTのような)作成の演習問題があります。その仕様に沿ったAndroidアプリを自作しました。具体的に作ることで、課題や発展の方向が見えてきます。

雑談対話システム
 人間とコンピュータが自然言語で対話するシステムは最近注目されています。明確な目的を持ったシステムとして、コンピュータの操作や情報検索、チケット予約や口座開設・解約、一般事務手続き等々に使われるものもあります。一方では、何気ない会話で心を和ませるといった雑談対話システムがあります。このような雑談システムは、Therapist BOT(セラピストボット)として、実際に運用され効果をあげています。

 雑談対話のルーツは、1960年代にMITで開発されたELIZA(イライザ)にあるようです。これは現代のような機械学習などにはよらずに、パターンマッチングに基づく規則で生成した応答文を返すものでしたが、その後の対話システムに大きな影響を与えたとのことです。このような背景のもとで、本記事では、自然言語処理の勉強の一貫として、雑談対話システムを取り上げます。

Javaを用いて自然言語処理の理論を理解する
 現代の自然言語処理は、機械学習と深い関係を持っています。その理論を勉強する場合に、例題をプログラムとして実際に作成して理解を深めることが重要です。そのために、ここでは図1に示したテキスト[1]を用います。多くの人々がPythonでプログラミングするのに対して、小生は、Javaを愛用しています。このテキストは、読み返すほどに深みの増す説明と、それをJavaプログラムで丁寧に補強している点が素晴らしいです。


形態素解析に基づく初歩の雑談対話システム(Java利用)
 SiriやGoogle Assistantなど、おなじみの対話システムが既に存在しますが、ここでは、自然言語処理を理解する一貫として、初歩的なものですが自作します。上記テキストには、かなり深い一連の自然言語解析が説明されています。ここでは、そのうちの、浅いレベルの解析である形態素解析を基にした雑談システムの例を使います。これは、Java言語で約360行(コメントと空白行を含む)程度のコンパクトなプログラムです。形態素解析には、MeCabを使っていますが、それ以外は独自に作成しています。その要点は以下のようです。

  • 疑問文か叙述文かを判定
  • 名詞(一般、サ変接続、固有)をトピックとして抽出
  • 質問文の場合は、5W1Hを考慮してトピックと組合せた応答文候補を作成
  • 叙述文の場合は、トピックの前後に適当な言葉いれた応答文候補を作成
  • 入力に含まれるキーワードを独自辞書で置換
  • その置換とトピックを組み合わせて応答文候補を作成
  • 曖昧で無難な言葉を乱数で決めて応答文候補を作成
  • 上記で応答文候補を作成する場合、それぞれに一定のスコアを与える
  • ただし、そのスコアにも乱数を付加して候補選択に多様性を持たせる
  • 以上のようにして、最終的にスコアが最高の応答文を採用する
  • キーワード対応辞書や付加文の強化により応答の質は向上させられる

MIT App Inventorを使った雑談対話システムとする
 上に述べたJavaプログラムの仕様に沿って、MIT App InventorでAnroid用アプリを作成しました。App Inventorには、この仕様を実現するためのテキスト処理ブロックは十分に備えられています。ここで問題は、形態素解析のMeCabがそのままでは使えないことです。しかしながら、調べた結果、幸いにも、Web用にMeCab APIが使えることが分かりました。そのうちの一つである[2]を使うことで、解決です。その部分を図2に示します。


作成した雑談対話システムの実行例
 作成したAndroid版の雑談対話システムの実行例を図3に示します。ユーザ入力とコンピュータの応答は以下の通りでした。なぜその応答になったかは、図中の説明をご覧いただきたく。

  • あなた:私の名前は神太郎です
  • BOT:私の名前はAkanです。
  • あなた:お元気ですか?
  • BOT:はい!
  • あなた:運動はいいですよ
  • BOT:なるほど
  • あなた:夏はまもなくですね。
  • BOT:そろそろ夏ですね。


 とても実用的とは言えませんが、上記の受け応え、何とか成り立っているようにもみえます。上にも書いたとおり、適用分野や利用目的に応じて、キーワード対応辞書や、付加文の補強によって、これよりは良くして行くことは出来そうです。また、今回は、形態素解析結果の情報しか利用していませんが、さらに、係り受け解析や意味解析、文脈解析など深い解析を利用することも考えられます。必ずしも甘くないように思いますが、それらについては、別途報告したいと思います。

 なお、英語を対象とした、これよりも少し単純な別の雑談対話システムの例もあります。こちらもご覧下さい。

参考資料
[1] 杉本 徹、岩下志乃:Javaで学ぶ自然言語処理と機械学習、オーム社、平成30年9月発行
[2] MECAPI - MeCab Web Service (MeCab API)
https://maapi.net/apis/mecapi

0 件のコメント:

コメントを投稿