Galirage Inc.
🚀

Azure AI Searchの裏側【RAGの精度改善手法】

はじめまして、ますみです!

株式会社Galirage(ガリレージ)という「生成AIに特化して、システム開発・アドバイザリー支援・研修支援をしているIT企業」で、代表をしております^^

自己紹介.png

この記事では「Microsoft Ignite 2024」に参加したセッションの中の「Azure AI Search: RAG for better results, larger scale, faster answers」における発表内容を解説します!

Azure AI Searchの裏側で、このようなRAGの精度改善が行われていたのかと感心するような面白い内容でした!


Pablo Castroさんの講演の様子

セッション概要【Azure AI Search for RAG: retrieval for better results, scale & answers】

Pablo Castro氏(CVP & Distinguished Engineer, Azure AI Search)による「Azure AI Search for RAG: retrieval for better results, scale & answers」セッションでは、Azure AI Searchの内部で実装されているRAGによる検索精度向上について解説されました。

全体の構成としては、次の4つの階層に分けた上で、それぞれの階層でどのようなRAG精度改善のアプローチをしているかを解説しています。

  • L0(Query)
  • L1(Recall)
  • L2(Ranking)
  • L3(Synthetic)

本記事では、実際にPabloさんの講演を聞きに行った著者自ら、その内容を詳細に解説していきます。

RAGの基本構造【Whole-Stack Approach】

RAGRetrieval-Augmented Generationの略称です。

RAGを初めて学ぶ方は、下記の記事をご参照ください。

https://zenn.dev/umi_mori/books/llm-rag-langchain-python/viewer/what-is-rag

まずは、Indexの作成からスタートして、作成されたIndexに対して、Retrievalを行います。


そして、RAGの全体構成として、L0(Query)、L1(Recall)、L2(Ranking)、L3(Synthetic)の4つの階層に分けて、それぞれにおけるRAGの精度改善アプローチを施しています。

  • L0(Query)は、検索クエリの書き換えをします。
  • L1(Recall)は、関連文書の検索をします。
  • L2(Ranking)は、高精度の再ランキングをします。
  • L3(Synthetic)は、最終的な回答を生成します。

各階層(およびIndexing)において、これまでのアプローチと、今回発表された新しいアプローチは、以下の通りです。

Indexing L0(Query) L1(Recall) L2(Ranking) L3(Synthetic)
Existing - End-to-end data ingestion
- Integrated vectorization
- Transparent quantization
- Synonyms
- Spelling corrections
- Search query language
- Query vectorization
- Vector search
- Keyword search across 56 languages
- Hybrid retrieval
- Oversampling & rescoring
- Semantic ranking - Contextual captions
- Extractive answers
New - Structure-aware chunking using Document Intelligence
- Markdown support
- Vectors trained with MRL
- Query Rewriting - New Reranker - More to come!

そして、これらの各階層において、次の4つの特性を挙げることがエンタープライズ利用において重要という話もありました。

  • Performance Quality / 正確性
  • Cost / コスト
  • Safety Concerns / 安全性
  • Latency / 応答速度

さらに、より具体的に、今回新しく導入した手法を具体的にするために、下記のようにより具体的な用語に置き換えて説明していきます。

  • L0:Query Preprocessing
  • L1:Candidate Retrieval
  • L2:Reranking
  • L3:Synthesis


講義中に思ったのですが、この図示化の仕方、めちゃくちゃわかりやすいなと思い、少しだけ感心してしまいました。

そして、今回発表された新しいアプローチは、主として、以下の二つの手法です。

  1. Query Rewriting: SLM-based query rewriting
  2. RAG-tuned L2 ranker

さらに、「Higher relevance & lower latency」と発表されたように、精度と速度の両面での改善が図られています。

それぞれについて、詳しく解説していきます。

新機能①【Query Rewriting: SLM-based query rewriting(L0)】

まず、Query Rewriting(クエリの書き換え手法)が紹介されました。

Azure AI SearchではParaphrasingを用いて、検索クエリを多様化させます。

これにより、単純なキーワードを入力としたとしても、検索対象の文書と関連度の高い文書を取得できるようになります。

例えば、"data ingestion in azure search"というクエリを入力した場合、以下のようなクエリに書き換えられます。

  • "how to ingest data into Azure Search"
  • "how to import data into Azure Search"
  • "how to add data to Azure Search"
  • "how to integrate data into Azure Search"
  • "setting up data ingestion for Azure Search"
  • "setting up data ingestion in Azure Search"
  • "integrating data into Azure Search platform"
  • "how to insert data into Azure Search"
  • "steps to add data to Azure Search"
  • "Azure Search data import guide"

このように生成結果を確認したい場合は、"debug": "queryRewrites"というパラメータを渡します。

より具体的なクエリ書き換えのエンジンとして、クエリ書き換えに特化したSLM(Small Language Model)を使用しています。

Microsoftの実験結果では、以下のような成果が報告されています。

  • キーワード検索(ベクトルなし)で+8ポイント
  • ハイブリッド検索(低リコールシナリオ)で+5ポイント

私の主観からすると、かなり条件が絞られていることもあり、そこまで大きなインパクトを示しているものではないため、シナリオ次第かなという所感です。

手軽に利用することができるため、とりあえず試してみて、効果があるかどうかを確認するのが良いかもしれません。

新機能②【RAG-tuned L2 ranker(L2)】

次に、L2フェーズでのRAG用の再ランキングモデルが紹介されました。

この新しい再ランキングモデルでは、実世界のデータセットにおいて**+22ポイント**の精度向上をしました。

これまでの再ランキングモデルとの比較では、大体8ポイントほどの改善が見られます(画像を見る限り)。

具体的には、RAG用のチューニングを行なっており、プロダクションデータを参照して、多くのシナリオに対応できるように、8倍広いコンテキストウィンドウを取り込む設計が特徴です。

その他の改善機能【Structure-Aware Chunking(Indexing)】

その他の改善された機能として、Structure-Aware Chunkingという機能があります。

Azure AI Document Intelligenceと組み合わせることで、構造を意識したチャンク分割を行います。

見出しや表などを検出し、適切に分割することで情報を失わない工夫が施されています。

例えば、MarkdownやWordファイルなどにおいて、heading1~3をメタデータとして抽出して、各Chunkに付与します。

具体的な導入メリットは下記のとおりです。

  1. 表形式や箇条書きにも対応し、検索精度が向上
  2. MarkdownやHTMLの階層を維持し、適切にメタ情報の付与により検索精度が向上
  3. ユーザ側での事前加工の手間が減り、開発が効率化



その他の改善機能【Vector Compression(Indexing)】

Azure AI Searchでは、大規模データに対しても拡張性に対して、様々な工夫をしています。

その中の一つの機能として、Vector Compression(ベクトル圧縮)があります。

これは、In-memoryのストレージサイズを劇的に削減します。

ここで示された例では、1/96ものサイズ圧縮が可能で、膨大なドキュメントを効率良く扱えます。

具体的な要素技術としては、MRL vector prefix(マトリョーシカ表現学習)とBinary Quantization(バイナリ量子化)が挙げられます。

それでは、この1/96にした例における内訳を解説します。

元々のベクトルデータは、下記の計算により、11,719 MB(以下の3つの積)でした。

  • ベクトル数:1M(前提)
  • 埋め込む次元数:3,072 次元
  • 1次元あたりのバイト数:4バイト

これに対して、MRL vector prefixをとBinary Quantizationを適用することで、1/96まで軽量化されて、122 MBになりました。

  • ベクトル数:1M(前提)
  • 埋め込む次元数:1,024 次元(MRL vector prefixにより1/3)
  • 1次元あたりのバイト数:1/8バイト(Binary Quantizationにより1/32)

評価結果【Higher Relevance & Lower Latency】

まず応答速度における改善として、ランク付けの速度について、2.3倍の高速化が実現されました。

ここで、Chunkのサイズが128トークンの時は、旧バージョンでも新バージョンでも、どちらも約50msでした。

しかし、トークン数がより多い場合において、新バージョンは旧バージョンよりも高速にランク付けを行うことができました。

ここからの評価結果は、より多面的に捉えるために、各階層のスタックを測定し、複数の埋め込みモデル、圧縮アプローチ、データセット、業界、言語にわたって測定されています。

まず、L2 RankerとQuery Rewritingの評価結果を示しています。

ここでは、横軸に評価方法、縦軸に使用モデルと手法の組み合わせを示しています。

そして、今回の新手法(QR & L2)は、実世界のRAGアプリケーションにおいて、精度向上が著しいという結果になりました。

  • Customer Dataset:+43%
  • MIML Dataset:+33%
  • Support Dataset:+53%

さらに、複数の業界や言語においてお精度が向上しているを示しています。

業界としては、次の10業界をカバーしております。

  • Accounting & Tax Services / 会計・税務サービス
  • Banking / 銀行
  • Government Administration / 政府行政
  • Healthcare Administration / 医療行政
  • Healthcare Research / 医療研究
  • Human Resources / 人事
  • Industrial and Manufacturing / 産業・製造
  • Insurance / 保険
  • Legal / 法律
  • Product Manuals / 製品マニュアル

言語としては、次の7言語をカバーしております。

  • German / ドイツ語
  • English / 英語
  • Spanish / スペイン語
  • French / フランス語
  • Japanese / 日本語
  • Chinese(simplified) / 中国語(簡体字)
  • Chinese(traditional) / 中国語(繁体字)

さらに、スケールと品質についての改善が示されています。

元々のデータサイズは、11,719 MBでしたが、新しい手法を適用することで、122 MBまで圧縮されました。

元々のMRL x 3とBinary Quantizationを適用した場合、品質が92.23%までトレードオフで落ちてしまいました。

しかし、そこにOversampling 2x(2倍の候補を取得する方法)をすることで、品質を99.01%まで回復させることができました。

最後に、Semantic RankerとQuery Rewritingを組み合わせることで、品質を回復する方法が示されています。

ここでは、L1において、ada-002text-embed-003-large 256-dim + BQtext-embed-003-large 3072-dimの間で、Vector onlyとHybridとHybrid + OR + SRの品質を比較しています。

その結果、OR + SRを適用することで、新しい埋め込みを再ベクトル化や再インデックス化することなく、品質を向上させることができました。

大量のデータを扱っている場合は、再ベクトル化や再インデックス化にかかるオーバーヘッドを考慮する必要があります。

まとめ

本記事では、Azure AI Searchを支えるRAGの精度改善手法を解説しました。

クエリ書き換えや再ランキング、構造認識型チャンク分割、ベクトル圧縮など、多角的な最適化が盛り込まれています。

これらは、RAGの精度改善をする際に、役立つナレッジが多く、Azure AI Searchを使用しないアーキテクチャを構築する際にも参考になる内容でした。

最後に

最後まで読んでくださり、ありがとうございました!
この記事を通して、少しでもあなたの学びに役立てば幸いです!

宣伝:もしもよかったらご覧ください^^

AIとコミュニケーションする技術(インプレス出版)』という書籍を出版しました🎉

これからの未来において「変わらない知識」を見極めて、生成AIの業界において、読まれ続ける「バイブル」となる本をまとめ上げました。

かなり自信のある一冊なため、もしもよろしければ、ご一読いただけますと幸いです^^

参考文献

https://aka.ms/AISearch-QR

Galirage Inc.
Galirage Inc.

Discussion