QnAMakerの辞書登録機能APIを使ってみる

QnAMakerの辞書登録APIを使ってみます。

#背景
質問と回答のリストやWebURLを指定するだけで超簡単にFAQボット作れる便利なAPIではあるものの、実際導入しようとすると、「取扱説明書」と「取説」を一緒の扱いにしてほしいとか**同異義語**登録したくなるけどどの程度まで精度上がるの？とかわからなかったのでちょっと試してみる。

#前提
- QnAMakerをデプロイし公開済
- QnAMakerの基本的な画面操作は理解している
- この[Azureサポートに関するFAQサイト](https://azure.microsoft.com/ja-jp/support/faq/)のFAQデータをknowledgebaseに登録した状態
- ブラウザはChrome（他ブラウザでも使えますがFireFoxだとTest入力で使いづらいので注意）

FAQデータ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/15debd50-e7b2-c449-9466-c989b14d981f.png)

QnAMaker画面
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/138282bd-e823-1fba-3253-a465b8d3c8d8.png)

#QnAMakerに辞書登録なんてあったんだ？
ひっそりあるんです。Documentationクリックして
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/9332e5a7-2fa6-52d9-f615-70d6ca356e26.png)

メニューからAPI Referenceをクリックすると
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/91fa54c1-c275-f08f-24f9-bccb4fdd0b1d.png)

QnAMakerのAPIリファレンスが見れます。今回で言うとAlterationsってのが辞書登録機能ですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/349827bd-81ed-a918-d8ed-2ba6d2394461.png)

使い方こんな。詳しくは「API」とか「json」とかで検索するともっと詳しく調べられると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/070c0965-5374-a942-ca2b-f65cbabc6bc3.png)

#テストコンソール使い方
API使うツールはPostmanとかありますがこのDocument画面でもテストで利用できるっぽいんで使ってみます。[Open API testing console]クリックして
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/d6acf1c9-9f3f-dbcf-fa5d-2595a6c99177.png)

こんな画面になるので
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/f508c8ad-3b2f-3f7c-f9eb-23414741c309.png)

QnAMakerのサブスクリプションKey入れてってことっぽいのでAzure上にあるCognitiveserviceリソース（QnAMaker管理API）の
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/0af7378c-a6cf-404f-e164-aa32c2a71b50.png)

Key入れまして
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/169464a8-6a6c-573f-5a92-1cef4a502bbe.png)

ひとまずこのまま[Send]実行してみると
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/02d5df4e-32de-2a82-661b-4fbc3997fd85.png)

なんかこんなの出た。大丈夫っぽい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/5c3eebef-efd7-8308-9a3d-eab4e95e366b.png)

※ステータスコードとかRESTはそのAPIごとで違う場合があるようですが[ここ](https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa)とか参考になるかも。[QnAMakerAPIDocument](https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/5ac266295b4ccd1554da75fd)見ても200ってのがなさそうなので204で正常ってことなのかなと理解。（違ったら是非教えてください）
じゃ実際別の文言で登録してみます。

#検証
##事前確認
###knowledgebaseに登録した質問と回答
**Qnestion:**`Azure サポートはどこで受けられますか?`
**Answer:**`サポートは、Microsoft Azure が提供されている市場で受けることができます。一般提供 (GA) の直後は、一部の特定のサービスを一部のリージョンで受けられないことがあります。`

>【注意】質問データが以下の状態になってます。
- クエスチョンが半角
- `Azure`と`サポート`の間に半角スペース入ってる

###事前スコア値確認

| 質問       |相違点 |    スコア値    |
|:-----------------|:------------------|:------------------|
| Azure サポートはどこで受けられますか？ |クエスチョンを全角に変更 |78.73|
| Azureサポートはどこで受けられますか?| 間の半角スペース抜く| 78.76|
| アジュール サポートはどこで受けられますか? | 「Azure」を「アジュール」に変更 |33.32|
| Azure supportはどこで受けられますか? | 「サポート」を「support」に変更 |69.46        |
| Azur supportはどこで受けられますか? | 「Azure」を「Azur」に変更 |37.32        |

正しい答え返してはくれるけど全角半角やスペース変わっただけでも結構スコア値下がってしまいます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/f21c8ada-1fc6-1903-71cd-dda1bb8d5f3a.png)


##Alterations登録
いざ。じゃまず。Request bodyの中に以下を入力して[Send]クリックしクエスチョンマークの半角全角を登録します。

```:json
{
  "wordAlterations": [
    {
      "alterations": [
        "?",
        "？"
      ]
    }
  ]
}
```

うん。登録できたっぽい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/9b22acaf-dbf2-d296-b540-72b9cb49119f.png)

試しに[Download alterations](https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/5ac266295b4ccd1554da75fc/console)って方で実行するとちゃんと登録されてることがわかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/57fc165f-af7e-cd2f-6d75-7ca79a2692e4.png)

##QnAMakerTestで試してみるが…？
…ん？スコア値変わらないじゃないか。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/269aa205-6db7-1646-ab73-cb1a122c0c6f.png)

Save and train＆PUBLISHしてもブラウザリロードしても何しても変わらない…
よし。落ち着け。他も試してみよう。

```:json
{
  "wordAlterations": [
    {
      "alterations": [
        "Azure",
        "アジュール",
        "Azur"
      ]
    },
    {
      "alterations": [
        "サポート",
        "support"
      ]
    }
  ]
}
```

>空白の全角半角の違いはAlterationsに登録できないっぽい…。400でエラーで帰ってきた。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/967f0f76-bddd-72c5-de90-ec4b0fe6c38c.png)

他の質問パターンも試してみる
「Azure」を「アジュール」に変えたパターン。ぉお！！33.32から68.62にスコアが上がった！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/612a69c0-8b01-1411-3243-eac32afe006c.png)

「サポート」を「support」に変えたパターン。ん？なぜ下がる…？
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/7e20c236-0114-e438-7371-e83c4dd1e813.png)

「Azure」を「Azur」に変えたパターン。こちらも37.32から68.62に上がった！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/45e6e5db-065d-3d0d-99da-4d2bc3b8689e.png)

##他パターンで試行
Microsoft はどの言語でサポートを提供していますか?の`Microsoft`を`マイクロソフト`で登録
「マイクロソフト はどの言語でサポートを提供していますか?」
登録前：44.86
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/68c419d7-e105-6d79-e3a7-edc2159c31be.png)
登録後：99
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/a63e8020-82fe-d2b2-8538-8fcd4bd13402.png)

さすがMicrosoft。（ってことなのか…？）

障害対応のサポートとは?の`障害`を`トラブル`で登録
トラブル対応のサポートとは?
登録前：36.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/84f597cf-7625-6989-84e8-7b0eb623c648.png)
登録後：80.81
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/b99667a8-6b9f-6b0f-69cc-3d721bf5e926.png)

Azure サポート プランを上位プランにアップグレードするには?の`アップグレード`を`upgrage`で登録
Azure サポート プランを上位プランにupgrageするには?
登録前：49.5
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/3cabef97-fb61-8c74-fbb4-e62deacf9ae8.png)
登録後：49.5
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/4a2a83a5-9b5b-de6d-8370-92498138613d.png)
変わらん…もしや英語や記号から日本語への代替が反応しないってことか？‥嫌な予感。

月額料金は 1 つの Azure プランが対象ですか? それともアカウント全体が対象になりますか?の`1`を`一`で登録
月額料金は 一 つの Azure プランが対象ですか? それともアカウント全体が対象になりますか?
登録前：12.35
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/71cd7b1f-eda7-2d75-b975-7a9a6b0ca06b.png)
登録後：100
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/f280d3d8-19c5-aad3-72e6-2c06fc53a274.png)
お？ってことは…

##数字の漢字変換試した
knowledgebaseこれで登録しといて
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/a381b144-2c72-110b-e1e5-62e6a1a18c02.png)
以下を登録

```:json
{
  "wordAlterations": [
    {
      "alterations": [
        "1",
        "一"
      ]
    },
    {
      "alterations": [
        "3",
        "三"
      ]
    },
    {
      "alterations": [
        "100",
        "百"
      ]
    },
    {
      "alterations": [
        "300",
        "三百"
      ]
    },
    {
      "alterations": [
        "一万",
        "10000",
        "10,000",
        "１００００",
        "１０，０００"
      ]
    },
    {
      "alterations": [
        "5000",
        "5,000",
        "五千",
        "５０００",
        "５，０００"
      ]
    }
  ]
}
```

お？なんかステータスコード500出してるんでひょっとしてすでに数字は登録されてるってこと？Download Alterationsを見ると
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/1f0325b7-4d6d-ded9-99aa-f6a824555c7e.png)
正常に登録できてるように見える…よくわからない…
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/4716e694-7498-b5a4-07a4-b196461cc91b.png)

そのまま試してみよう。
####数字テスト①
登録前：25.05
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/f0a10040-e85a-04a2-6905-0c4800c130ac.png)
登録後：49.17
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/5430b39d-4a0c-2b6c-5cce-e5407bc588d0.png)
お、あがった。

####数字テスト②
登録前：27.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/bc2fffdb-b2f7-37f1-7e10-632462c308b4.png)
登録後：53.47
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/62020083-2420-764e-a65e-f73ffbaaf31c.png)

####数字テスト③
登録前：27.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/546def03-5edf-b2fb-3854-034cf51a8cfa.png)
登録後：52.01
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/b975c25a-a899-88f5-f076-32f35f648160.png)

####数字テスト④
登録前：27.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/61867324-290c-ea8f-2c13-df8d3f990d4f.png)
登録後：27.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/eae1d7b0-2345-3cc3-6efb-22a3a75570a9.png)
あれ…？

####数字テスト⑤
登録前：24.16
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/647380cf-afaf-41fb-01c6-bca2e7b6a6e1.png)
登録後：46.37
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/7f876d74-3602-9fde-bc47-75f651fa2d29.png)

####数字テスト⑥
登録前：24.16
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/0fabb2e2-827b-1918-5728-8d1a863238cb.png)
登録後：46.37
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/2ee0bebf-dda5-b4f7-c8c4-676e0b81adeb.png)

#まとめ
- （まとめと言っておきながら）いまいちルールわからん
- 登録する意味はありそう
- ってことは数字とか単位（kg等）とか送り仮名違いとか日本語無数に登録しなきゃいけない…？
- もっと頑張って～Microsoftさん！
- 日本語って難しい

Watsonも数字苦手だったりするのでこの辺は日本語対応まだまだなことを実感してます。
このAPI使ってる人（特に日本で）で情報発信してる方見つからなかったので是非触ってみたことのある方やここに情報あるとかご存知な方、アップデート情報とか便利な登録方法とかあれば教えてください！