FrameworkのDeepDive(全然深くないですが)も折り返し地点になってきました。Maker」について、書きたいと思います。本シリーズの成果物は以下のGitHubにあがっております。Makerとは、あらかじめ「問い合わせ」と「回答」のペアを作成しておき、「問い合わせ」に近い内容の質問があった場合、それに対する「回答」を返すものです。Makerに以下のような「問い合わせ」と「回答」のペア(以降、QAデータと呼びます)を作成しておいたとします。問い合わせ:Azureとはなんですか?回答:イケてるパブリッククラウドです。Makerに「Azureとはなんですか?」という質問を投げると、もちろん「イケてるパブリッククラウドです。」という答えが返ってきます。Makerに質問を投げる場合のインターフェースは、RestfulなAPIです。日本語の微妙な揺らぎも対応してくれます。「Azureとはなんでしょうか?」という質問にもきちっと回答をしてくれます。どんな揺らぎでも完璧に回答してくれるわけではないので、ある程度調整は必要になります。Service以外からも利用することは可能です。インターフェースはRestfulなAPIなので汎用性が非常に高く、あらゆるサービスとの親和性は高いです。Makerのような一問一答のサービスは、ヘルプデスク業務の代替として頻繁に使われるチャットボットと非常に相性がよく、仲良くペアで登場することが多いですね。APIでアクセスします。Makerの内部的なシステム構成をご説明します。Makerの価格やサイズの検討で迷うことになってしまいます。Makerは、以下の3つのコンポーネントから成り立っています。Makerを管理するサービス管理者向けのインターフェースです。初期の問い合わせや回答のペアの投入、運用フェーズにおける問い合わせや回答のメンテナンスなどを行います。Searchに格納されます。Searchは全文検索エンジンです。Searchに対して行われます。Endpointです。Searchへの検索をよりわかりやすいインターフェースに変換してくれています。APIインタフェースを使えばよいのです。Searchに格納されたデータを取得することで実現されます。MakerのポータルはAzureのポータルとは全く別物です。個人的には統合しないでほしいなと思っております。Makerのメンテナンスだけお客様に任せることができます。Machineなど)も見えてしまい、その制御や運用がとても煩雑になりそうな気がします。Makerの利用フロー(初期設定から運用まで)をご説明します。Makerは、Cognitiveサービスの一つ、つまりAIです。最初は赤ちゃんで何も知りませんので、最初に色々教え込む必要がありますし、リリース後も面倒を見てあげなければいけません。このあたり、他のAIサービスと同様ですね。Makerの設定を行います。Makerポータルの両方で実施します。Makerのポータルから、問い合わせと回答のペアの初期データを登録します。初期データの登録方法は、CSVで投入する、指定したURLのWebページの構造を解析してQAデータを取り込むなど様々な方法があります。APIを発行して取得します。APIを書かなくても、それをラップしたSDKが提供されているので、今回はそちらを使うこととします。4.利用ログの分析ユーザーの利用ログを取得し、適切な回答を返すことができなかったケースを分析します。Insightsにログを出力するようにします。5.チューニング4で取得したログの分析結果をもとにQAデータを追加・修正することで、より精度の高い回答ができるようにします。Makerの設定から始めます。以下のURLにログインします。In」をクリックします。AzureのサブスクリプションにログインしているMicrosoftアカウントでログインします。base」をクリックします。service」をクリックします。Azureポータルに遷移します。上図の各項目を以下の要領で入力して、最後に「作成」をクリックします。Makerを識別する名前をつけます。サブスクリプションご利用のAzureのサブスクリプションを選択します。Makerの価格レベルを選択します。以下の「Free」と「Standard」の2つから選択します。価格レベルの選択で大きく異なるのは「ドキュメント」と「トランザクション」です。Free無料のプランです。3つのドキュメントを登録できます。ここでいう「ドキュメント」とは、後述するデータソースと同義であり、データソースとは、初期のQAデータを登録するための源泉です。CSV、PDF、Webページなど様々なデータソースを選択することができます。Makerからアップロードすることで一度に大量のQAを登録することができます。Freeのプランのドキュメント登録上限は3つまでなので、例えば、異なるCSVのデータを3つまで登録できます。CSV1つ、PDF1つ、Webページ1つといった組み合わせも可能です。3つ以上のドキュメントを登録したい場合は、どれか一つのドキュメントを削除するしかありません。ドキュメントを削除すると、そのドキュメントによってアップロードされたQAデータは削除されます。あるCSVによってアップロードしたQAデータがあるとしますと、そのCSVのドキュメントを削除すると、そのCSVによってアップロードされたQAも削除されてしまいましすので、注意が必要です。Freeプランでは各ドキュメントのサイズも1MBまでに制限されています。1MB以上のCSVを登録することはできません。他にも、「トランザクション」という概念があります。Makerに登録されているQAデータを管理するためのAPIの呼び出しのことです。先程ご説明した下図の(1)に当たる部分です。Freeプランでは、トランザクションの発行は1秒間に最大3回までに制限されています。このAPIはQAデータを登録するときにしか呼び出されないため、この制限がネックになることは通常の運用ではないと思われます。App上で処理されるので、こういった制限はありません。Standardこのプランは有料で、2019年8月14日時点で東日本のリージョンでは、月額10$になっています。ドキュメントは無制限に登録できることが最大の特徴です。Makerが配置されるデータセンターの場所を選択します。一般的には、ユーザーが利用する場所に近い場所を選択します。Makerが配置されるリソースグループを選択します。Searchの価格レベルを決定します。Searchの価格は色々な要素により変わります。詳細は以下のURLをご参照下さい。Makerに関わるところのみご説明致します。baseとQAデータの関係になります。IDを指定することで、回答を取得する対象を絞ることができます。baseからのみ取得するということが可能です。Searchのインデックスの数に依存します。SearchのBASICプランでは、インデックス数が15です。baseを作成することができます。baseとして利用されるものが一つ確保されるためだそうです。SearchのStorageです。Search上に多くのインデックスが作成されるので、このStrageの容量が多く必要になります。文章の内容によって、登録されるインデックスの数が異なるので、例えば一概に登録するCSVの容量がXXXだから、Storageの容量がYYYになるとはいい切れません。Search)のサイジングの難しいところです。多めのStorageを確保しておくしかなさそうな気がしています。Searchが配置される場所です。ユーザーが利用する場所に近いほうが一般的にはよいとされています。Appのホスト名になります。Azure内で一意である必要があります。Appが配置される場所です。ユーザーが利用する場所に近いほうが一般的にはよいとされています。Insightsに記録できますので、必ず有効にして下さい。今回は特に、「利用ログの分析」のフェーズで必要になります。Insightsが配置される場所です。ユーザーが利用する場所に近いほうが一般的にはよいとされています。Makerのサービスを選択します。Makerを選択して下さい。Makerのサービスを作成する際に「名前」に入力したものを選択して下さい。データソースを選択することができます。ここでは何も指定しません。Makerの管理画面から一つずつポチポチ手で入力しましょう。KB」をクリックします。Makerの設定は完了です。初期データを登録します。以下のCSVを作成しますAzureとはなんですか?,イケてるパブリッククラウドです。※ファイル名の拡張子はtxtとしてください。csvだと登録できません。bases」→「azure-faq」の順にクリックして下さい。「SETTINGS」をクリックします。train」をクリックします。上部メニューの「EDIT」をクリックします。すると、先程CSVで登録したQAが表示されているのが確認できます。ここで、登録したQAデータをテストできる便利なツールを紹介します。上部メニューの「Test」をクリックします。チャットウィンドウが表示されます。「Azureとはなんですか?」と入力してEnterをポチると、先程登録した回答が返ってくることが確認できます。ここで「Azureとはなんですか?」の下にある「Inspect」をクリックします。Socre」というものがあります。これは、問い合わせに対して、どれくらいの精度で高い回答を返すことができたかを示す値で、最高は100です。以下の例は、問い合わせと全く同じ文章を入力しているので、完全一致となり100となっています。試しにちょっと文章を変えて、「Azureってなに?」とすると、スコアが1.49となりました。次に、これをPublishするという作業を行います。Framework上に構築したチャットボットアプリケーションからQAデータが取得できるようになります。上部メニューの「PUBLISH」をクリックして、「Publish」というボタンをクリックします。時間がかかりますので、待ちましょう。Publishが完了すると以下の画面が表示されます。見られるとまずいところは隠してあります。以下の3つの値をメモって下さい。後でアプリケーションの連携の際に使用します。QnAKnowledgebaseId/knowledgebases/XXXX/generateAnswerの「XXXX」の部分をメモして下さい。QnAEndpointHostNamehtts://〜で始まるURLすべてをメモして下さい。QnAAuthKey「EndpointKey」の後に続く文字列をすべてメモして下さい。Makerに登録したQAデータを取得できるようにします。C#ならば、専用のSDKが用意されているので、それを使うこととします。MakerのQAデータを取得できるようにします。Studioで開きます。必要なパッケージをインストールするところから始めます。「ツール(T)」→「NuGetパッケージマネージャー(N)」→「ソリューションのNuGetパッケージの管理(N)」の順にクリックします。下記のようにテキストボックスに「Microsoft.Bot.Builder.AI.QnA」と入力して、Enterをポチると、同名のパッケージが表示されるので、選択してインストールをします。appSettings.jsonを以下のように変更します。"先程メモしたQnAEndpointHostNameの値"}EchoBot.csを以下のように修正します。DIコンテナから取得してます。Coreが自動でDIコンテナに入れてくれています。ILoggerインターフェースの実装をDIコンテナから取得します。Insightsにログが出力されます。インスタンスを指定します。指定した3つの値を入れます。MakerからQAデータを取得する際にしているオプションのインスタンスを生成します。以下の指定は、スコアの高い順から10件取得し、スコアが50以上のものを取得するということを表しています。Makerにアクセスして回答を取得します。回答情報を格納したresponse変数がNULLではなく、回答が1つ以上あった場合、その回答を表示します。それ以外は、適切な回答が見つからなかった旨のメッセージを表示します。Insightsにロギングします。検索しやすいように特定のイベントIDを指定します。DIコンテナから取得してます。Coreが自動でDIコンテナに入れてくれています。ILoggerインターフェースの実装をDIコンテナから取得します。Insightsにログが出力されます。インスタンスを指定します。指定した3つの値を入れます。MakerからQAデータを取得する際にしているオプションのインスタンスを生成します。以下の指定は、スコアの高い順から10件取得し、スコアが50以上のものを取得するということを表しています。Makerにアクセスして回答を取得します。回答情報を格納したresponse変数がNULLではなく、回答が1つ以上あった場合、その回答を表示します。それ以外は、適切な回答が見つからなかった旨のメッセージを表示します。Insightsにロギングします。検索しやすいように特定のイベントIDを指定します。cancellationToken);}}}}}Program.csを以下のように修正します。ILoggerインターフェースに特定の実装をDIするための手順になります。ConfigureLoggingメソッドで行います。Insightsのインストゥルメーションキーを設定します。Insightsに送信されるよう設定を行います。ILoggerインターフェースに特定の実装をDIするための手順になります。ConfigureLoggingメソッドで行います。Insightsのインストゥルメーションキーを設定します。Insightsに送信されるよう設定を行います。Emulaterを起動して、動作確認します。事前に登録した問い合わせに対する回答が帰ってきているのがわかります。found.」になります。次に利用ログの分析をします。ユーザーの問い合わせに対して適切な質問を返せなかった場合、それを抽出して分析、そしてチューニングが必要になります。これはどんなAIサービスでも同じかと思います。Insightsにログを出すようEchoBot.csを修正しました。Insightsにログがあるはずです。Serviceがあるリソースグループにアクセスします。Insightsのリソースがあるので、それをクリックします。左部のメニューから「ログ(Analytics)」をクリックします。クエリを入力するところに以下のクエリを入力します。desc「Azureってなに?」という問い合わせがログにありますね。これが適切な回答を返せなかった問い合わせになります。次章では、この結果をもとにチューニングしてみましょう。チューニングチューニングには主に以下の3つの手法があります。「1.新しいQAデータの登録」は、利用ログの中に全く未知な問い合わせが多数あったときに、それを新しいQAデータとして登録します。Insightsについて知りたがっているユーザーが多くいると判断できる場合に、それを新しいQAデータとして登録します。「2.代替フレーズの追加」については、既存のQAデータの中に適切な回答があるのだけど、微妙な表記の揺れによって回答が返せなかった場合に行われる対処です。先の例で言えば「Azureってなに?」の問い合わせには回答を返すことができませんでした。これは既存のQAデータに登録されている「Azureとはなんですか?」とは異なる微妙な表記の揺れ(「とはなんですか?」と「ってなに?」の違い)によって、生じたスコアの違いによるものです。Makerのスコアは50以下でしたので、回答を返すことができませんでした。この場合は、「Azureとはなんですか?」という問い合わせの代替フレーズとして「Azureってなに?」を追加することによって解決します。最後の「3.同義語の追加」については、似ているんだけど異なる言葉のために低スコアになってしまったときの対処です。Azureとはなんですか?」という問いについては、先に登録したQAデータでは低スコアになってしまいます。Azure」は別の言葉として判断されたため、低スコアになってしまいます。Azure」を登録すればこの問題は解決します。うんちくが長くなってしまいました。先の分析結果に基づき早速チューニングしてみましょう。今回の対処方法は「2.代替フレーズの追加」に該当します。phrasing」をクリックします。train」をクリックします。上部メニューの「PUBLISH」をクリックして、「Publish」というボタンをクリックします。ほら、今度はちゃんと回答を返すことができました。次に同義語を登録するパターンもご紹介したいと思います。先にご説明した「3.同義語の追加」の場合の対応ですね。Makerがあるリソースグループにアクセスします。Serviceで、名前が「azure-qna-maker」のリソースがあるので、それをクリックします。左部メニューの「概要」をクリックして、「エンドポイント」の項目に書いてあるURLをメモします。左部メニューの「キー」をクリックして、「キー1」に書いてある値をメモします。以下の内容のHTTPリクエストを発行することにより同義語を登録できます。Azure」を登録する例です。Makerなしではいけていけません。雑誌等の執筆依頼を受付しております。役に立たなかった0人がこの投稿は役に立ったと言っています。コメントをキャンセルメールアドレスは表示されません。Reserved.本サイトに掲載されている社名、製品名、サービス名等は各社の商標または登録商標です。プライバシーポリシーお問い合わせ。