ハンズオン:マイクロソフトは、プログラム可能な人工知能(AI)のためのCognitive Servicesと、それらを会話型ユーザーインターフェースで利用するためのBot Frameworkに多額の投資を行っています。使い始めるのはどれくらい簡単ですか?
AI機能であるCognitive Servicesは、2015年4月に開催された同社のBuild開発者カンファレンスで発表されました。当初のリリースでは、顔認識、音声認識、視覚コンテンツ認識、言語理解の4つのサービスのみが提供されていましたが、現在では20を超えるAPIに拡張されています。
事前に構築された専門 API である Cognitive Services は、独自のデータに基づいて一般化された予測分析を実行できる Azure Machine Learning とは異なることに注意してください。
それから約1年後、2016年3月のBuildイベントで、Microsoftは会話型ユーザーインターフェース(まだプレビュー段階)を構築するためのBot Frameworkを発表しました。ボットには何らかの言語解析サービスが必要なため、これはCognitive Servicesと自然に結びつきます。両サービスは(他の多くの機能とともに)Microsoftの機械学習およびAIソリューションであるCortana Intelligence Suiteに含まれています。
先日ロンドンで開催されたソフトウェア開発カンファレンスQCONにおいて、Microsoftの展示ブースはCognitive Servicesに特化しており、スポンサー付きトラックではあるものの、このテーマに関するプレゼンテーションをいくつか行いました。しかし、いくつか問題点もありました。「なぜシアトルが取り上げられていないのか、私には理解できません」とプレゼンターは述べました。なお、Bot FrameworkとLanguage Understanding Intelligent Service (LUIS)はどちらもまだプレビュー段階です。
ボットの主なユースケースは、営業と顧客サービスです。旅行や予約の予約、ホテルの検索、不具合の報告といったアクションが適しています。多くの場合、人間とのやり取りが望ましいですが、コストも高くなります。また、メッセージングサービスの普及により、そこに統合されたプレゼンスを持つことが有益であるという議論もあります。
Microsoftのプラットフォーム上でボットを構築するのはどれくらい難しいのでしょうか? Regボットの構築に着手しました。今回の主なサービスはコンテンツの提供なので、シンプルにするために、ボットはクエリに応じてサイト内のコンテンツを検索するだけにすることにしました。
可動部分がいくつかあります:
LUIS : ボットは解釈のためにテキストを LUIS に送信する必要があるため、LUIS アプリを作成して公開する必要があります。
Bot Framework:Microsoftのクラウドサービスは、ボットが通信に使用するチャネルを提供します。現在、Skype、Facebook Messenger、Webページウィジェット、Direct Line(ボットに直接接続できるREST API)、Slack、Microsoft Teams、Twilio経由のSMSなど、11のチャネルが用意されています。
Bing 検索 API : ボットはRegisterサイトを検索する方法を知っている必要があります。検索 API を使用するのが最も早い方法です。
ホスティング:ボット自体はWebサービスであるため、ボットをどこかにホストする必要があります。ツールではMicrosoft Azureが推奨されていますが、ASP.NET Web APIアプリケーションをホストできる環境であればどこでも構いません。LUISアプリもAzureでのみホストする必要があります。RegBotは無料のCognitive Servicesアカウントと、最も低価格の有料Webアプリホスティングサービスを使用しています。
Visual Studioをすぐに起動するのではなく、LUISから始めるのが理にかなっています。LUISは、テキスト文字列を受け取り、それをインテントと1つ以上のエンティティに解析するサービスです。インテントは動詞、エンティティは名詞と考えることができます。RegBotには現在、DoSearchとHelpという2つのインテントと、TechSubjectという1つのエンティティがあります。
LUISアプリを設定するには、インテントに一致するサンプルテキスト文字列を入力し、エンティティでタグ付けします。例えば、「マルウェアについて教えてください」は、Intent: DoSearch TechSubject: Malware となります。このページでLUISアプリをテストできます。
RegBot言語理解サービスのトレーニング
LUIS の作業が終わったら、いよいよコードを書き始めます。Visual Studio のボットアプリケーションテンプレートを見つけてインストールし、新規プロジェクトを開始して NuGet パッケージ(Microsoft のリポジトリからライブラリをダウンロードするパッケージ)を復元したところ、「GlobalConfiguration という名前が存在しません」というエラーが発生しました。ちょっと検索してみると、WebHost パッケージを追加すればいいことがわかりました。これが今日の開発のやり方です。様々な既成のパーツを組み合わせて、うまく動作するのを期待するのです。
残念ながら、Bot Application テンプレートは LUIS 向けに事前構成されていません。そこで、LUIS サポートを含む別のサンプルコードを探し、そこからいくつかの部分を借用することにしました。また、Bot Framework Emulator もダウンロードして、ローカルでボットをテストできるようにしました。
ボットをLUISアプリに接続するために、様々なアプリIDとシークレットキーを試してみました。Bot Frameworkの重要な機能は、コンテキストオブジェクトを使って会話を追跡し、アプリがユーザーとインタラクションできるようにすることです。RegBotはそれほど多くのインタラクションを必要としませんが、これをテストするために、ユーザーに何件の検索結果を表示するかを尋ねるコードを作成しました。これはたった1行のコードで実現できます。
PromptDialog.Number(context, AfterDoSearch, "いくつの結果を表示しますか?");
AfterDoSearch : これは、ユーザーが応答したときに呼び出されるメソッドの名前です。したがって、各インタラクションの種類ごとに個別のメソッドが必要です。このラッピングにより、状態管理が自動的に行われるため、大きなメリットがあります。
Bing Search API を動作させるのに予想以上に時間がかかりました。ニュース検索は便利な説明フィールドを備えているため、Web 検索よりも使いやすいことがわかりました。また、JSON レスポンスの構造を理解するのにも時間がかかりました。私が見落としていたのか、それとも Microsoft がもっと基本的なサンプルを用意してくれているのかは分かりません。
RegBotと通信するBot Frameworkエミュレータ
動作確認は完了し、RegBotをSkypeに接続してテストも成功しました。世界に公開するにはもう少し手順が必要なので、まだです。ただ、いくつか考えがあります。
Skype 経由で RegBot と会話中 (画像をクリックすると拡大します)
これは、シンプルで明確に定義されたユースケースに適しています。LUISはややブラックボックスですが、問題が発生したときにそれを確認して修正できるという利点があります。アプリが稼働したら、変更も簡単です。数時間の作業で独自のボットをコーディングできるのは素晴らしいことです。
とはいえ、どれもそれほど洗練されているわけではありません。短くて簡単な文以上のものを入力すると、LUISはすぐに混乱したり、処理を諦めたりしてしまいます。
さらに多くの Cognitive Services を介して音声認識とテキスト読み上げ機能を追加することは難しくありませんが、RegBot の場合は、Web コンテンツも読み上げてくれなければあまり役に立ちません。
私はこのプロジェクトに、ボットに懐疑的な立場から参加しました。確かに賢いのですが、一部のニッチなケース以外では役に立たないし、基本的な情報を収集した後に人間に引き渡すほどには賢くありません。
コールセンターのスタッフを数行のコードで置き換えることができるとしたら、誰もが目を輝かせるでしょう。しかし、今では、なぜほとんどの場合、これが良いアイデアではないのかを示すプロトタイプを簡単に作成できます。
より肯定的に言えば、ボットというコンセプトはユーザーとインタラクションを行う比較的新しい方法です。音声対応なので、車内や入力が難しい状況でも便利です。特にAIの難解な部分に関しては、まだ完成度が低いように感じますが、今後に期待したいところです。®