Azure Cognitive Search 全文検索の新機能セマンティック検索を試せるデモ

# はじめに
組織内に貯まっている大量な構造化・非構造化データから、新たな価値を見出すためのフルマネージド全文検索サービスである [Azure Cognitive Search](https://www.youtube.com/watch?v=9GcjFofXdd0) を使えば、誰でも簡単に AI 搭載検索エンジンを開発することができます。

#新機能セマンティック検索とは
セマンティック検索はもともと Microsoft が Bing の検索結果の品質を大幅に向上させるための取り組みがベースとなっています。Bing の大規模なデータとディープニューラルネットワークを使って作成した構築済みモデルを利用して、クエリに対する記事の「意味」に基づいて記事をランク付けする新たなランキングアルゴリズムを有効にできるようになりました。内部的には、これは既存の頻度ベースのランカー（[Okapi BM25](https://ja.wikipedia.org/wiki/Okapi_BM25)）によって返される結果の次に適用されるランカーです。この新たなセマンティックランカーに加えて、セマンティックキャプションとセマンティックアンサーという新たな抽出要約機能が追加されました。

セマンティック検索機能の追加は長い全文検索の歴史におけるブレークスルーと言えるでしょう。

今回はこれらの新機能をテストしたりデモしたりする機能を [Simple Cognitive Search Tester](https://github.com/nohanaga/Simple-Cognitive-Search-Tester) に追加したのでその紹介を行います。

#使い方
[Docs](https://docs.microsoft.com/azure/search/semantic-search-overview) の手順に従って登録を済ませます。

1. リージョンおよびサービス レベルに関する要件を確認します。
1. プレビュー プログラムに登録します。 要求の処理には、最大で 2 営業日かかります。
1. 受け入れが済み次第、セマンティック キャプションとハイライトを返すようにクエリを作成または修正します。
1. クエリにプロパティをいくつか追加して、セマンティック回答も返すようにします。
1. 必要に応じて、スペルチェックを呼び出し、精度とリコールを最大化します。

9月17日現在、セマンティック検索機能を使用するには[サインアップ](https://aka.ms/SemanticSearchPreviewSignup)からパブリックプレビューの申請が必要です。また、以下のような条件もあります。セマンティック検索は、Standard レベルでのみ有効にすることができ、それ以外のプランは対象外です。

|レベル|リージョン|サインアップ|価格|
|:--|:--|:--|:--|
|スタンダード レベル (S1、S2、S3)|米国中北部、米国西部、米国西部 2、米国東部 2、北ヨーロッパ、西ヨーロッパ|必須|[価格表](https://azure.microsoft.com/ja-jp/pricing/details/search/)|

#セマンティックランキング
目玉機能のセマンティックランキングはクエリーと結果の関連性が大幅に向上しています。これは、Microsoft の持つ技術ドキュメントの巨大なライブラリである Microsoft Docs で行った A/Bテストの結果により実証されています。3語以上の長いクエリでも成果が出ています。

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/69ed000e-b2fd-99aa-11e6-1d258d118b88.png)

この新しいランカーによる結果を比較できるツール **Semantic Search Diff Tool** を追加しました。左側が既存のランカーによる結果で、右側がセマンティックランカーによる結果です。これまでの検索結果ではリリースノートがトップに来ていたのが、セマンティックランカーでは、求めている結果により近い結果がトップに再ランキングされていることが分かります。このデモデータは、[Azure Cognitive Search Workshop](https://github.com/nohanaga/Azure-Cognitive-Search-Workshop) のものをそのまま使っています。現在の実装では、パフォーマンス上の理由から最初からセマンティックランカーを適用することはできません、あくまでも既存ランカーの結果に対して実行されるということに注意が必要です。

![006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/55546a1c-175e-0a5d-0be7-d65dd941c1e6.jpeg)

セマンティックランキング側の `@rsc` の値は、`@search.rerankerScore` の略でセマンティックランカーによって計算された数値が太字で表示されます。この数値が大きい順に関連度の高さを表します。

#セマンティックアンサー
セマンティックアンサーは、検索ドキュメントから答えにもっとも近いと思われる一節を取り出して表示する特殊なレスポンスです。たまに Bing の検索結果のタイトルの上に出てくる文章です。

セマンティックアンサーを返すには、回答の言語特性を持つフレーズまたは文が検索ドキュメントに存在している必要があり、検索クエリ自体が質問として提示されている必要があります。Cognitive Search は、機械読解モデルを使用して最良の答えを選択します。モデルは、利用可能なコンテンツから一連の潜在的な回答を生成し、**十分に高い信頼水準に達するときだけ**、セマンティックアンサーを提案します。


![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/28e52cef-628a-0ba1-903e-2a18a10eab50.png)

セマンティックアンサーなどのすべての機能を試すには、**Semantic Search** メニューを選択します。検索クエリーには、「機械学習の定義について教えて」と入力しています。この場合はセマンティックアンサーが生成されていますね。

![003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/1559a769-2a48-1d00-1bc4-311a6037f801.jpeg)

この青い箱の部分です。質問文の回答になっていると思われる文章を抽出しています。
さらに、オレンジ色でハイライトしている部分を、**セマンティックハイライト**と呼びます。これは、セマンティックアンサーの中の**最も関連性の高いセクション**を自動的に強調表示できる機能となります。

#セマンティックキャプション
また、ピンポイントでセマンティックアンサーが得られなった場合でも、**セマンティックキャプション**と言って、検索結果のタイトルの下に表示されている、関連性の高い検索結果の一部を取り出すことができます。

![004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/d9854ef9-eaef-af4b-ef4b-1e7f3ad762b5.jpeg)

セマンティックキャプションに対してもセマンティックハイライトが入る場合があります。

#CSV エクスポート
あとで検索結果をエクセルとかで比較したいって方用に CSV エクスポートボタンを追加しておきました。

![005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/974a7b95-6aea-155c-f243-7983d7673691.jpeg)

#ダウンロード
Simple Cognitive Search Tester は、[こちら](https://github.com/nohanaga/Simple-Cognitive-Search-Tester)の GitHub からダウンロードできます。接続情報を入力してすぐに使えます。

#参考
https://qiita.com/nohanaga/items/2a90539f7667fa9e486a

###セマンティック検索のリクエストパラメータ作成
REST API をご自分で呼ぶ場合は、こちらの [Docs](https://docs.microsoft.com/azure/search/semantic-how-to-query-request) を参照してください。