生成AI

Azure OpenAIとAzure AI Searchを用いたRAG技術による文書検索の向上

はじめに

東京エレクトロンデバイスのエンジニア、Seijiです。
Azure OpenAIとAzure AI Searchを用いたRAG技術による文書検索環境では、登録された文書から回答を入手し回答することができます。
しかし、RAGを構成したもののいまいち良い回答を得ることができない等無いでしょうか?いくつか確認するポイントはありますが、今回はその中から検索手法について解説していきます  

Azure OpenAIとRAGの動作概要

チャットで入力した文字を元に社内文書から検索しているわけですが、処理を簡単に分解すると次のような流れとなります。

チャット入力から回答を得るまでの流れ

①チャットに質問を入力

②Azure OpenAIモデルをトークン化し、さらにEmbeddingモデルがベクトル化

③バックエンド処理として検索エンジンから質問文から検索  ☚検索エンジンから正しく検索できることが重要

④検索結果をAzure OpenAIへ渡す

⑤検索結果を元にAzure OpenAIが回答を生成

⑥回答を返信

解説する機能

テキスト検索

ベクトル検索

ハイブリッド検索

セマンティックハイブリッド検索 ←おすすめ

テキスト検索

テキスト検索は従来からある検索手法です。特定のキーワードやフレーズが文書に含まれているかどうかを基に検索を行います。    

            

BM25アルゴリズムとは?

参考:BM25 関連性 (スコアリング) – Azure AI Search | Microsoft Learn

ベクトル検索

ベクトル検索は、単語を数値化してベクトル表現に変換します。そして、検索元のキーワードやフレーズのベクトル数値と、検索先のベクトル数値の類似度を基に検索を行います。

単語を数値化

             

数値化したものを2次元のベクトル空間に各単語をマッピング

     

キーワード検索では「犬」と入力すれば、「犬」が書かれたページを見つけますが、
ベクトル検索なら「チワワ」や「ドックフード」のような関連する言葉のページも見つけられます。

             

ベクトル検索参考:ベクトルの関連性とランク付け – Azure AI Search | Microsoft Learn

ハイブリッド検索

ハイブリッド検索は、これまで紹介したテキスト検索とベクトル検索を合わせた検索手法です。          テキスト検索で得た結果とベクトル検索で得た結果をさらにRRFアルゴリズムでスコアを算出し結果の良いものを選択します。キーワード検索の明確さとベクトル検索の柔軟性を併せ持つため、より高い精度で文書を検索することが可能です。                    しかし、ハイブリッド検索は精度高く検索できますが、意味的な類似性を考慮するため、

特定のキーワードやフレーズが含まれる検索は難しい場合があると言われています。

※RRFアルゴリズムとは?

RRF(Reciprocal Rank Fusion)アルゴリズムは、複数の検索結果を統合して、最も関連性の高い結果を提供する手法です。各検索結果の順位を逆数に変換し、それらを合計して新しい順位を決定します。これにより、異なる検索方法(例えば、フルテキスト検索とベクトル検索)の結果を効果的に融合できます

参考:ハイブリッド検索のスコアリング (RRF) – Azure AI Search | Microsoft Learn

セマンティックハイブリッド検索

ハイブリッド検索をさらに進化させたのが、検索エンジンである「Azure AI Search」の独自機能として提供される  セマンティックハイブリッド検索です。                                セマンティックハイブリッド検索は、ハイブリッド検索による検索結果をさらにMicrosoftの深層学習モデルを使って再度スコアリングします。深層学習モデルは単純にキーワードをマッチングするだけではなくクエリの意味内容や文脈を理解し検索しますので、意味的な関連性を重視した検索に強いと言われており、Microsoft社が実施した定量評価では最もランキング精度が高かったと報告しています

セマンテックランク参考

セマンティック ランク付け – Azure AI Search | Microsoft Learn

まとめ

各検索手法についてまとめた表です。

おわりに

本記事では、検索エンジンにおける検索手法について記載しました。次回は、それぞれの検索手法で実際にAzure OpenAIからの回答にどのような違いがあるかを検証してみたいと思います。