Microsoft が Azure Cognitive Search による RAG システムの定量評価結果を公表

Microsoft は 18 日、Azure Cognitive Search を用いた RAG システムの定量的評価結果を[公表](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167)し、Azure Cognitive Search 独自の検索機能である、[セマンティックハイブリッド検索（ハイブリッド＋セマンティックランカー）](https://qiita.com/nohanaga/items/e156d8be60622b42e8eb#%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89%E6%A4%9C%E7%B4%A2)が最も高い品質を示すことが分かりました。また、チャンク分割戦略についての参考になるインサイトも提供しています。

Azure Cognitive Search のセマンティックハイブリッド検索の解説は[こちら](https://qiita.com/nohanaga/items/e156d8be60622b42e8eb)を参照ください。今回用いる用語の簡単な解説は以下です。

- ハイブリッド検索：BM25 ベースのキーワード検索とベクトル類似度検索結果のそれぞれ上位 50 件を、[RRF](https://learn.microsoft.com/azure/search/vector-search-ranking#reciprocal-rank-fusion-rrf-for-hybrid-queries) を使用して結果を統合します。
- ハイブリッド＋セマンティックランカー：ハイブリッド検索の結果上位 50 件を、リランク（並び替え）て新たにスコアを生成しています。本記事ではセマンティックハイブリッド検索の事を指します。

## 評価結果
精度の評価には、顧客データセット（許可済）、[BEIR](https://github.com/beir-cellar/beir)、[Miracl](https://github.com/project-miracl/miracl) を使用して比較しています。
### 検索モードの比較
1. **セマンティックハイブリッド検索**が最もランキング品質(NDCG@3)が高かった
    - 品質はセマンティックハイブリッド＞ハイブリッド＞ベクトル＞キーワードの順で高い
1. 9 種類の検索クエリーに対して、**セマンティックハイブリッド検索**が最も NDCG@3 が高かった

### チャンク分割の比較
1. チャンク化あり・なしの比較では**チャンク化あり**のほうが Recall@50 が高かった
1. チャンクサイズが**小さい**ほど Recall@50 が高かった
1. チャンク間の**重複を 25%, 512 トークン**が最も Recall@50 が高かった
1. セマンティックハイブリッド検索が**最も欲しいチャンクを返す**

# 詳細：検索モードの比較
## 1. セマンティックハイブリッド検索が最もランキング品質(NDCG@3)が高かった
各評価データで検索モードごとにランキング結果の品質を評価し、高品質なドキュメントをどれだけ適切に提示できるかを [NDCG](https://ja.wikipedia.org/wiki/DCG#nDCG%EF%BC%88%E6%AD%A3%E8%A6%8F%E5%8C%96%E6%B8%9B%E6%90%8D%E7%B4%AF%E7%A9%8D%E5%88%A9%E5%BE%97%EF%BC%89)@3と NDCG@10 で比較しています。以下の表から、品質はセマンティックハイブリッド＞ハイブリッド＞ベクトル＞キーワードの順で高いことが分かります。[(出典)](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167#toc-hId--1217763962)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/e5e272ea-dc1f-755a-10ce-7ce7956559f5.png)

Multilingual Academic(MIRACL) データセットにおけるセマンティックハイブリッド検索のスコアが非常に高いのは、先日[最新モデルにアップデート](https://qiita.com/nohanaga/items/2e0d3ffd894011ec1e57)したのが影響しているのでしょうか。この点の記載は見当たりませんでした。あとキーワード＋セマンティックランカーの組み合わせデータが無いですが、こちらも気になるところです。

# 2. 9 種類の検索クエリーに対して、セマンティックハイブリッド検索が最も NDCG@3 が高かった
まず投入したクエリの分類方法が非常に参考になります。以下の表では、キーワードクエリのみがベクトル検索で著しく低く、重要単語のみで検索をかけるシナリオでのベクトル検索のみの利用はこの評価データでは適さないということが分かります。この場合、ベクトル検索が低くてもハイブリッド検索およびセマンティックハイブリッド検索では RRF の採用によってランキングを浮上させることが可能です。キーワードクエリ以外のクエリーはすべてセマンティックハイブリッド検索の結果が最も高くなっています。[(出典)](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167#toc-hId-1269748871)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/97b92a74-1f25-7279-f519-f44b07fb1acd.png)
クエリとドキュメントの用語の重複が少ない（言い換え）、スペルミスのあるクエリがキーワード検索では低く、**ハイブリッドやセマンティックハイブリッド検索で品質が向上**することが定量的に示されました。また、コンセプトを求めるクエリのような検索者の意図を汲んで回答する必要があるケースでも有効であることが分かります。以前私が [Azure OpenAI Developers セミナー第2回](https://www.youtube.com/watch?v=cEynsEWpXdA&t=3828s) で行ったデモのとおりの結果になったと言えます。


# 詳細：チャンク分割の比較
ドキュメントを `text-embedding-ada-002` モデルでベクトル化する前に適切なチャンク化を行うことにより Recall@50 が高くなることが示されました。

## 1. チャンク化あり・なしの比較では**チャンク化あり**のほうが Recall@50 が高かった
チャンク化あり・なしでの比較結果。クエリに対してドキュメントがどれくらい適合するかを表す Recall@50 を使って比較しています。Recall ですので上位 50 件にどれくらい検索漏れがあるかを見ています。上位 50 件の中に欲しい結果が入ってさえすれば、あとはセマンティックランカーが高品質な並び替えを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/3b28bfeb-4776-8f17-a64d-e7ed3a6b0b6e.png)

ドキュメントごとに単一ベクトル：各ドキュメントの最初の 4,096 個のトークンがベクトル化され、**残りを切り捨て**
チャンク化されたドキュメント：各ドキュメントを**25% 重複する 512 個のトークン チャンクに分割**した顧客のクエリ/ドキュメントを `text-embedding-ada-002` でベクトル化

トークン上限を超えるものを切り捨てているので、そりゃそうか　という感じです。

## 2. チャンクサイズが**小さい**ほど Recall@50 が高かった
顧客のクエリ/ドキュメント ベンチマークに対する `text-embedding-ada-002` モデルを使用したさまざまなチャンク サイズの Recall@50 比較。512 トークンで区切ったチャンクが最も Recall@50 が高いという結果になりました。[(出典)](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167#toc-hId--537705592)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/c5ab96de-671e-9e96-d86a-9b7903bd85a5.png)

## 3. チャンク間の**重複を 25%, 512 トークン**が最も Recall@50 が高かった
顧客クエリ/ドキュメント ベンチマークに対する、`text-embedding-ada-002` モデルを使用、512 トークン固定したさまざまなチャンク境界戦略の Recall@50 比較。チャンク間の**重複を 25%, 512 トークン**が最も Recall@50 が高いという結果になりました。[(出典)](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167#toc-hId--537705592)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/47cee2f3-a635-cd2b-1d7e-2564bb4406b2.png)
以前チャンク化を LangChain でやったところ overlap が日本語では機能しなかった記憶があります。自然な文と段落の境界でチャンクを区切ってベクトル化することも推奨されていますから、日本語向けにその辺の処理を書いてしまったほうがいいかもしません。

## 4. セマンティックハイブリッド検索が**最も欲しいチャンクを返す**
ここまでの評価によってドキュメントのチャンクは 512 トークンで、25% の重複が良い結果を示すことが分かりました。この条件を使って、検索結果上位1~5件（横軸）ごとに`高品質`とラベル付けしたチャンクが含まれる割合を検索モードごとに比較したグラフが以下です。[(出典)](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167#toc-hId-1949807241)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/fc524967-2151-cd71-7a80-edbeaf19d5ee.png)

この評価結果によって、チャンクは 512 トークンで、25% 重複させること。検索結果は上位 5 件として、セマンティックハイブリッド検索を使って検索することが最も高品質な結果が得られるということが分かりました。`512 x 5 = 2,560`トークン分のテキストを回答を生成する LLM の入力にすればよいということですね。

# 注意
セマンティックハイブリッド検索のセマンティックランカーは Microsoft 製の LLM である Turing モデルを使って、ハイブリッド検索の上位 50 件を並び替えます。この処理があるため、通常のキーワード検索よりもクエリーの実行時間が長くかかり、処理が重くなりますので精度とパフォーマンスのバランスを考慮した実装が必要です。

また、この評価ではユーザーからのクエリーをダイレクトに言語アナライザーに解析させるのではなく、いったん GPT モデルを利用した検索クエリーを生成してから検索しています。これは[例のアーキテクチャ](https://qiita.com/nohanaga/items/bbc0c1fba1ec53deeeed)と同様の実装となっていますが、実際に用いたプロンプトによって検索結果が変わるため、実際に使用するデータでの検証が重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/7a3fc18e-05a4-1fc2-e9bf-de7f4cb966bd.png)


# 参考
https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167

https://qiita.com/nohanaga/items/2e0d3ffd894011ec1e57