クラウドインテグレーションサービス「雲斗」のブログ

芝公園にある創研情報株式会社がAWS を 中心にクラウドの基本から便利な使いかたまでをお伝えしていきます。

人工知能・機械学習

自然言語による対話システムについて調べてみました

2017/04/21

つい数か月前までAI/machine learning(機械学習)について全く知らなかったプログラマA(47歳独身)です。
業務で必要となるため自然言語による対話システムについて調べてみたのですが、分からない事だらけでした。
それでもこの業界にいる限り今後避けて通れない分野で、まだまだ技術的には流動的なので今から取り組むべき事だけは理解できました。

さっそくですが、今回主に調査したのはMicrosoft Azure(以下MS Azure)、Google Cloud Platform(以下GCP)、IBM Bluemix Watson(以下IBM Watson)、NTTドコモ(以下ドコモ)のサービスです。

これらのサービスを利用してどのようなアプリケーションを構築できるのか考えたのですが、サービスの利用には段階・方法があるようです。

  1. サービス側で学習させたMLモデル(以下モデル)の機能をAPI呼び出し
  2. サービス側で提供したモデルに対し利用者が学習データ(コーパス)を用意して学習させた後に利用する
  3. サービス側で提供したモデルをカスタマイズしたりイチからモデルを構築のうえサービス上で利用する

1は各サービス側でビッグデータ等によりモデルを学習させておき、利用側は意識しなくてもAPI経由で音声を認識(Speech to Text)したり、音声を合成したり(Text to Speech)したり、言語を翻訳したりというものです。

2は挨拶のように色々な言い回しがあったり、専門用語のパターン等を利用側でコーパスとして用意しモデルを学習させたうえで利用するというものです。サービス側はベースのモデルと学習のための環境(API)を用意し、利用側はこの環境を使ってモデルを学習させた後にAPI経由で機能を利用します。(1のパターンでもこの機能を提供しているケースもあります。)

3は1や2では機能的に過不足がある場合等、サービス側から提供されたモデル(テンプレート)を利用側でカスタマイズしたり、新たに自分でモデルを考えるというものです。"TensorFlow"、"ニューラルネットワーク"、"ディープラーニング"といった用語で検索すればモデル構築についての情報は沢山出てきます...が、正直読んでも良くわかりませんでした。行列計算と微分...すいません、昔は分かってたはずですがm(_ _)m

1->3で難易度はだんだんあがるのかというと3だけ次元が違う気がします。(モデル構築を専門?でやっている方でも上手く動作するモデルについて理論的に説明できない場合もあるそうなので、結果的に動作すればOKの世界?)

色々調べていくと、結局1~3どの場合でもコーパスの精度しだいでアウトプットの質も変わってしまうのでモデル構築とコーパスの抽出がキモとなるらしいです。(「教師あり学習」の場合)

 

各サービスの現状と技術的に今後どちらの方向に進んで行くのか考える際、ドコモのロードマップ「図表 自然対話プラットフォームの進化と適用領域の拡大」が参考になりました。
上記図表の「技術の進化」を抜き出します。(便宜上、連番を付与しました。)

  1. 音声認識、意図解釈、知識Q&A
  2. シナリオ対話、雑談対話
  3. 先読み、行動・状況
  4. 推定自律学習(知識の広がり)

この図表に当てはめると各サービスはAとBのシナリオ対話あたりまで網羅している段階で、モデルのアウトプットの質を上げていくためにまだまだ学習し続けている状況のようです。(例えば、IBM WatsonではAPI呼出し時のユーザデータ再利用を許可しない場合、ヘッダに"X-Watson-Learning-Opt-Out"を設定する必要があります。)

各サービスとも念頭に置いているユースケースはいわゆる「タスク指向対話システム」のように思われます。(Apple「Siri」やドコモ「しゃべってコンシェル」など特定の目的をもって「自然言語」で対話するシステムの事ですが、例えばSiriに「◯◯に電話をかけて」と「コマンド」を送れば電話をかけてくれるというアレです。)

どういう事かというと、MS LUIS (Language Understanding Intelligent Service)やIBM Watson Conversation等は話しかけられた自然言語の「意図」(intent)を解釈してくれるところまでやってくれるのですが、その後どのような応答、アクションをするかは利用側アプリケーションにゆだねられているのです。LUISやIBM Watson Conversationが自動的に応答してくれる、というような事はありません。応答の仕組みとして会話フロー(Dialog)を作成するツールやIBM WatsonのR&R(Retrieve&Rank)のようなナレッジ検索結果を最適化してくれるような要素技術は提供してくれますが、これらを組み合わせてアプリを作成する必要があるのです。

例えば音声による天気案内アプリを作ろうと思えば、開発者は以下のような作業が必要となります。

事前に準備
  • 案内に必要な天気に関連した会話例データ(コーパス)を作成
  • コーパスでモデルを事前に学習させる
  • 全体の会話フローを作成
アプリケーションの処理フロー(全体の流れは事前に定義した会話フローによる)
  • 利用者の音声をテキスト変換(Speech to Text)
  • 事前に学習したモデルでテキストから「意図」を判定
  • 「意図」により別途天気API等を呼出し応答テキストを得る
  • 応答テキストを音声データに変換(Text to Speech)

ちょっと考えると分かるとおり、会話フローは作りこめばそれなりに自然な会話になるのですが、「天気案内」以外の話題を振られても「意図」が理解できず応答できないのです。
この辺に対応するため?ドコモは会話フローから外れた場合でも自然な応答ができるよう「雑談対話」というサービスを用意しています。人間とアプリケーションの対話では特定の意図を持ったものだけでなく、フローに乗らない(意図を判定できない)発話が良くあるためこの辺りは今後重要な技術になりそうです。(詳しく調査していませんが、ユーザーローカルは「全自動会話API」で自然な受け答えや雑談を返信するAIエンジンを提供しています。)

以上途中経過ですがGoogle先生から教わった知識をサマリしてみました。
(現在も継続調査中ですので認識違いをご指摘いただけますと幸いです。)

◆クラウドインテグレーションサービス「雲斗」以下のページからアクセス出来ます。

-人工知能・機械学習

Bitnami