Microsoft AzureのQnA Makerが面白いのでなにかに使いたい

この記事はfreee Developers Advent Calendar 2018の4日目です。

みなさまこんにちは。
スモールビジネスAIラボという場所で機械学習をやっているKenji Usuiです。

実は私、最近機械学習関係のサービスをガンガン提供しているMicrosoftが気になってしょうがありません。そこで、今回は前から気になっていたQnA Makerを使ってchatbot APIの作成に挑戦してみました。

一言で言うと

便利&簡単すぎて59分で記事の一番下までできました🤔

QnA Makerとは?

Microsoftが提供している機械学習系サービス(Cognitive Service) の一つで、既存のコンテンツからQ&A形式でデータを抽出することができます。ヘルプがあるサービスであればそれを読み込むだけで自動でQ&A形式の対応表が作成されます。さらに、AzureのBotサービスであるWeb App Botから容易に接続することができるためQnA Makerの結果をそのままbotのAPIとして公開することができます。

azure.microsoft.com

QnA Makerを使ってみる

Knowledge Baseの作成

Knowledge Base(以下KB)を作成しましょう。KBとはQ&A形式のリストのことです。作り方はテキストをアップロードしたりweb上のコンテンツを読み込ませることができます。もちろん日本語も対応済みです。

それでは早速作ってみましょう。
KBの作成はポータルからはできないので専用のページから行います。専用ページにポータルと同じアカウントでログインしたらページ上部のタブから「Create a knowledge base」を選びます。表示されたstepの順番に操作していけばOKです。さっそく順番に見ていきましょう。

step1 QnA Makerのリソース作成

普通にAzureでサービスを使うのと同じようにまずはQnA Makerのリソースを作成します。 portalにログインして「リソースの作成」からQnA Makerを探して作成すればOKです。 特別な項目はないので普通に作れば問題ないはず。

step2 QnA Makerのリソースに接続

step1で作成したQnA Makerのリソースに接続します。 選ぶだけなので問題なく見つけられると思います。

step3 Name your KB

名前をつけてあげてください。

step4 KBのデータ入力

KBを作成するためにデータを入力します。web上のコンテンツを入力とする場合はURLを入力すればOKです。たとえば、ヘルプページを渡すと自動でクローリングしてヘルプの内容を取得してきてくれます。ヘルプのホームのURLを渡せば自動で配下にあるヘルプを読んでくれるようです。めちゃくちゃ楽。他にもテキストをアップロードすることもできるようです。
今回は会計freeeのヘルプページを入力としました。

step5 KBの作成を実行

Create your KBをクリックすることで処理が開始します。今回は10分程度で完了しました。たぶんwebかテキストで処理時間が大きく変わると思います。

KBの作成が完了するとどんなQ&Aが作成されたのか一覧が見られます。こんなふうに質問と回答が紐付いた形で保存されています。 「連結会計・連結決算とは」という質問に回答が書かれている。回答には最初に「ページを印刷」があり、そのあとに回答文が作られている (なぜか「ページを印刷」が残ってしまった)

気になることがあればQ&Aは削除や編集ができますし「Add QnA pair」から手動で追加することも可能です。 どのような質問に回答が紐付いているのか知りたい人は「Test」から簡易的なchat機能で調べることができます。 「クレジットカード」というキーワードに対して回答が表示されている

APIの公開

確認が完了したら上部のPUBLISHからAPIを公開します。ポチっとするとちょっと待ったら完了します。公開したらエンドポイントのkeyなどが表示されます。

POST /knowledgebases/[QnAKnowledgebaseId]/generateAnswer
Host: [QnAEndpointHostName]
Authorization: EndpointKey [QnAAuthKey]
Content-Type: application/json
{"question":"<Your question>"}

これを使ってQnA Makerと公式に連携できるbotサービスWeb App Botと連携しましょう。

Web App Botと接続する

Web App BotはAzureのサービスの一つで汎用的なbotサービスを提供する機能です。これをQnA MakerのAPIと接続してbotを作りましょう。

azure.microsoft.com

まずはWeb App Botのリソースを作成します。
普通にportalから作成するのですが「ボットテンプレート」の項目はQuestion and Answerを選択してください(SDK v3に居ます) Question And Answerを選択したスクリーンショット

あとは普通に作成すればOKです。作成が完了したらアプリケーション設定を開いてQnA Makerに接続します。先程公開したAPIの QnAAuthKey, QnAEndpointHostName, QnAKnowledgebaseId を設定します。入力したら保存しましょう。

これで設定は完了です。このbotは作成したQnA Makerと接続されました。なんて簡単なんでしょう!
Web App Botは簡単にテストできる機能であるwebチャットでテストがありますのでそれで簡易的にテストをします。開くとchatのUIがでてくるのでここで思う存分テストします。画像のとおりQnA Maker側でテストしたときと同じ結果が返ってきました。 QnA Makerと同じく、「クレジットカード」に対する回答が返ってきている

あとは普通にweb app botを公開するのと同じようにやれば良いので省略します。

感想とかゆるふわ

やってみるとわかるのですがQnA Makerの抽出能力はビジネスとして使うならばそのまま使えるとは言い難いです。しかし、ゼロからQ&Aを作ることを考えると十分に作業量を減らしてくれます。
このくらい手軽にQ&Aとbotを作れるなら社内のナレッジ展開にも使えるのではと思いました。Web App Botはslack連携もできますし。

KBはQ&A形式のデータをクラウド上に蓄積しておきbotに直接接続できるというのは便利です。DBの理解などが不要なので非エンジニアでもKBを編集することで運用が可能になります。 chatbotの運用で回答文の変更は結構な頻度で起きるのでこれは便利そう。

今回使ったWeb App Botは汎用bot frameworkなのでいろいろと作り込みがいもありそうです。例えばスコア順に複数の回答を返すこともできます。他にもslackなどと連携することも可能なのでいろんな使いみちがあるのではないでしょうか?QnA Makerの手軽さを考えるといろいろと面白いことができそうです。

という感じで非常に便利なのでみなさんもぜひQnA MakerとWeb App Bot使ってみてください。 明日のAdvent Calendarはtohashiさんです。お楽しみに!