
みなさんこんにちは。エンジニアの佐藤です。今回は再ランキングモデル(reranker model)を取り上げたいと思います。
ハイブリッド検索の弱点と再ランキングモデル
(この節は一般的な話題ですので、この方面に詳しい方は読み飛ばしていただいても構いません。)
大規模言語モデル(LLM)による質問回答システムの実装方法として、RAG(Retrieval-Augumented Generation)があります。簡単に言えば、質問回答に必要な知識を収集して、質問に対応する回答をLLMで生成して、ユーザーに返信するものです。あなたが全くの専門外の質問を受け、分厚い書籍を紹介されて「この本を参照して回答してください。」と指示されたら、目次や索引を確認し、該当箇所を読み込み、参考箇所を添えて回答するでしょう。RAGシステムが実行していることはまさにこのようなことです。
RAGシステムの現在の情報技術の一般的な対処は、ハイブリッド検索でしょう。ハイブリッド検索はキーワード検索とベクトル検索を組み合わせたスコアで候補文書をランキングする技術です。ベクトル検索では文章を「テキスト埋め込みモデル」でベクトルに変換し、質問文と候補文書間の類似度を評価します。しかし、キーワードの一致でビシッと検索できる場合は良いのですが、ベクトル検索による「文章の意味による検索」の感度の良し悪しは、なかなか予見が難しいところがあります。
(弊社ブログ「より良い RAG を作るための Vector DB 基礎」、拙稿「色の言語表現にあいまい検索はどう反応するのか」『「短縮化」と「共通用語化」でテキスト埋め込みを改善』もご覧いただけますと幸いです。)
この「ベクトル検索の予見の難しさ」をカバーする方法の一つが、再ランキングモデルです。再ランキングモデルは、質問文と候補文書を突き合わせ(ペアワイズ評価)、適合性を数値評価します。
典型的には、以下のように使います。
- ハイブリッド検索では、候補文書を多めに収集する。
- 再ラインキングモデルで、ハイブリッド検索で収集された候補文書をさらに選抜する。
(こちらのGoogle Cloudブログの図が、メリットをわかりやすく図示しています。なお、このブログで紹介されているsemantic-ranker-fast-004は、本ブログの実験でも使用しています。)
もちろん、再ランキングモデルによる適合性評価が、常に意図したものであるという保証はありません。しかし、「文章表現のすべて」を一度に相手にするテキスト埋め込みモデルと異なり、再ランキングモデルは「質問文章の範囲での評価」である分、仕事はやりやすそうです。(筆者はモデル開発の知識がないので、ここではこれ以上は立ち入りません。)
実験してみる
とは言っても、ハイブリッド検索だけでもそれなりの性能になることが多いのも確かです。そこで今回の実験では、再ランキングモデルが実際に効果を発揮したケースを紹介したいと思います。
実験システム
文書(コーパス)
題材に選んだのは、以下のSalesforce製品ヘルプ文書です。
簡単に説明しますと、OmniStudioとは、Salsforce Industry Cloud(現在は「Agentforce 360」シリーズに改名)の実装基盤となるテクノロジー群の総称で、Salesforce Platformより広範囲な機能をノーコードで実装することを目標に、元はVlocity社が開発したものをSalesforceが2020年に買収したものです。当初は管理パッケージ製品でしたが、その後一部機能がSalesforce Platformに取り込まれて現在に至ります。
このような経緯があり、現状のOmniStudioは、旧実装と新実装が混在する状態になっており、製品機能の調査が難しい場合があります。
モデル
テキスト埋め込みモデルには Google Gemini Embeddings 2 を、再ランキングモデルには、 Vertex AI Ranking API(semantic-ranker-fast-004) を使用しました。
いずれも本稿執筆時点では一般利用できる最新のモデルと考えられると思います。
キーワード検索と検索実行環境
キーワード検索と検索実行環境には、PostgreSQL 18を利用しました。(MacOS上で実行しています。)
今回のコーパスはすべて英語文書のため、キーワード検索のトークン生成はto_tsvector('english',...)を設定しました。
ベクトル検索にあたっては、pgvectorのHNSWインデックスを設定しました。
以下が該当するカラムとインデックスの設定になります。
CREATE TABLE IF NOT EXISTS documents ( id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY, doc_id text UNIQUE NOT NULL, content text, fts tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED, embedding vector(768) ); CREATE INDEX IF NOT EXISTS documents_fts_idx ON documents USING gin(fts); CREATE INDEX IF NOT EXISTS documents_embedding_idx ON documents USING hnsw(embedding vector_cosine_ops); CREATE INDEX IF NOT EXISTS documents_node_id_idx ON documents (node_id);
チューニングはいろいろあると思いますが、まずは一番標準的なスタートラインの設定にしたつもりです。
ハイブリッド検索のスコア配分
こちらも、まずは一番標準的なスタートラインということで、キーワード検索とベクトル検索のスコアを等しい重みづけで加算しました。以下のようなクエリを実行しました。(%sはクエリする行数になります。)
WITH full_text AS ( SELECT id, row_number() OVER ( ORDER BY ts_rank_cd(fts, websearch_to_tsquery(%s)) DESC ) AS rank_ix FROM filtered WHERE fts @@ websearch_to_tsquery(%s) LIMIT %s * 2 ), semantic AS ( SELECT id, row_number() OVER ( ORDER BY embedding <=> %s ) AS rank_ix FROM filtered LIMIT %s * 2 ) SELECT filtered.doc_id, filtered.content, filtered.doc_metadata FROM full_text FULL OUTER JOIN semantic ON full_text.id = semantic.id JOIN filtered ON coalesce(full_text.id, semantic.id) = filtered.id ORDER BY coalesce(1.0 / (50 + full_text.rank_ix), 0.0) + coalesce(1.0 / (50 + semantic.rank_ix), 0.0) DESC LIMIT %s
探したいものは
前置きが長くなりましたが、上記のシステムで、さまざまな質問に対応する、以下の2つのランキングを観察します。
- ハイブリッド検索で上位10件を選抜
- ハイブリッド検索上位100件を、再ランキングモデルで上位10件に選抜
上位10位に含まれれば、RAGシステムは大規模言語モデルにそのコンテンツを紹介します。反対に、上位10位に入れなければ、その文書の情報が回答に含められる可能性はありません。
果たして、ハイブリッド検索だけでは拾えないが、ハイブリッド検索を広め(10倍)に取って再ラインキングモデルで選抜することで拾えた、回答に必要な文書というものは存在するのでしょうか?また、存在する場合は、質問はどのような内容で、拾い上げられた文書はどのような内容だったのでしょうか?
以下に、見つけ出したケースを2つ紹介したいと思います。
探し出された「再ランキングモデルが役立つ」ケース
質問: can't export components with data packs after switching to new designer(拙訳: 新しいデザイナーに切り替えてから、data packにコンポーネントをエクスポートできません)
解説しますと、前述の通り、OmniStudioは、元Vlocity社の製品だったものをSalesforceが買収し、その後一部をSalesforce Platformへと取り込んでいる機能群です。ですので、旧製品の一部の仕様が変更されています。質問にあるエクスポート機能は、旧デザイナーでは提供されていましたが、Salesforce Platformへと移植された新デザイナーではサポートされていない機能です。
このことはSalesforce Helpの以下に書かれています。
Omnistudio Frequently Asked Questions (FAQs)
Q . Is some functionality not supported in the standard designer?
A. Exporting and importing directly from the standard designer using data packs isn't supported; use Salesforce CLI instead.
(拙訳: Q. 標準デザイナーでサポートされていない機能はありますか?
A. 標準デザイナーから data pack を使って直接エクスポート・インポートすることはサポートされていません。代わりに Salesforce CLI を使用してください。)
このヘルプページを、それぞれの検索システムは拾い出すことができたでしょうか。
再ランキングモデルを利用した検索結果は以下のようになりました。(上ほどスコアが高い)
- Omnistudio Standard Designer
- Export or Import an Omnistudio Data Mapper
- Omnistudio Frequently Asked Questions (FAQs) <= 目的の文書
- Enable the Omnistudio Standard Designer
- Best Practices for Using the Omnistudio Standard Designer
- Export and Import Flexcards
- Export and Import Omniscripts
- Import a Data Pack (Managed Package)
- Create a DataPack or a MultiPack (Managed Package)
- Access Omnistudio Designer Components from the List View
ハイブリッド検索のみの場合は以下の検索結果となり、目的の文書が上位10件に含まれることはありませんでした。
- Feature Support Changes with Standard Designers
- Exporting Omniscripts (Managed Package)
- Exporting Vlocity Layouts and Cards (Managed Package)
- Export or Import an Omnistudio Data Mapper
- Exporting Vlocity Layouts and Cards (Managed Package)
- Enable the Omnistudio Standard Designer
- Import a Data Pack (Managed Package)
- Omnistudio Component Access Issues and Potential Causes
- Supported Data Pack Object Types (Managed Package)
- Create a DataPack or a MultiPack (Managed Package)
2つを比べてみると、再ランキングモデルが補った、ハイブリッド検索の弱点が見えてくると思います。もう一度質問文を見てみましょう。
can't export components with data packs after switching to new designer
以下のような傾向があると思います。
類似文書の混在に弱い
今回のコーパスには旧製品と新製品の文書が混在しており、それぞれは似ているものの、同一ではありません。今回は新バージョンの機能不全に関する質問ですが、"data packs"という旧製品機能の名称がある分、ハイブリッド検索では旧製品の情報が多くヒットし、目的の文書を圏外へと押し出してしまいました。
漠然とした質問に弱い
今回の質問は一般的な用語のみが使われ、製品機能の名称や特異的単語利用などを捕まえるキーワードサーチが効きにくい状況になっています。
機能語的な修飾表現に弱い
「can't」は明らかな否定表現ですが、「switching to」も、文章の前提を大きく修飾します。こういう表現は、ベクトル検索のランキングには反映されにくいようです。再ランキングモデルは「新製品の事象」「機能制限」という文脈を読み取り、狙った文章を拾い出したように見えます。
今回拾われた文書のテキスト埋め込みベクトルをUMAPで2次元マッピングし、ベクトル検索で特異性が見つけられるのか観察したのが以下の図です。

目的の文章(青星)はハイブリッド検索のみの検索結果(赤丸)の近傍にあったものの、今回はキーワード検索による評価も効かなかったため、ハイブリッド検索のランキングからは溢れてしまったのではないでしょうか。
もう一つの例を見てみましょう
質問: which old tools from industries package are no longer maintained?
(拙訳: industriesパッケージの古いツールのうち、もうメンテナンスされていないものはどれですか?)
この質問に対する最も適切な文書は、以下だと思われます。
LWC Omniscript Designer Considerations (Managed Package)
Permanently Unsupported
These functionalities, elements, and properties in Vlocity Insurance and Health Spring '20 and future releases.
...
(拙訳: 恒久的にサポート対象外
以下の機能・要素・プロパティは、Vlocity Insurance and Health Spring '20 以降のリリースにおいてサポートされません。
...)
再ランキングモデルを利用した検索結果は以下のようになりました。(上ほどスコアが高い)
- Legacy Features (Managed Package)
- Differences Between Omnistudio and Omnistudio for Managed Packages (Managed Package)
- Supported Features in Omnistudio and Omnistudio for Managed Packages (Managed Package)
- Migrate Your Components to Omnistudio Standard Runtime Using the Omnistudio Migration Assistant
- LWC Cards Considerations (Managed Package)
- LWC Omniscript Designer Considerations (Managed Package) <= 目的の文書
- Sectors in Financial Services Cloud
- Omnistudio for Managed Packages Basics
- Components That Visualize Groups and Relationships (Managed Package)
- OmniOut Supported Components (Managed Package)
ハイブリッド検索のみの場合は以下の検索結果となり、目的の文書が上位10件に含まれることはありませんでした。
- Legacy Features (Managed Package)
- Meeting Industry Challenges with Omnistudio (Managed Package)
- Tools and Processes for Troubleshooting (Managed Package)
- Supported Data Pack Object Types (Managed Package)
- Supported Features in Omnistudio and Omnistudio for Managed Packages (Managed Package)
- Feature Support Changes with Standard Designers
- Angular Features Not Supported in Omniscripts (Managed Package)
- Omnistudio
- Differences Between Omnistudio and Omnistudio for Managed Packages (Managed Package)
- Migrate Omnistudio Components from Vlocity Industries Managed Package and Standard Data Model to Omnistudio Standard Runtime
こちらも同様に、否定表現「no longer」を評価しないまま、tools, industry package, maintainといった用語にヒットした文書が多数検索されてきたように見えます。
拾われた文書のテキスト埋め込みのUMAP図は以下のようになりました。

目的の文書(青星)は、ハイブリッド検索の結果(赤丸)と再ランキングモデルで選抜した結果(緑丸)の中に埋もれるようにして存在しており、拾い上げるためには再ランキングモデルで質問文章と個別比較することが必要だったのではと推測されます。
振り返って、どうか
再ランキングモデルは、特に言い回しが複雑な質問に対応する文書を紹介したいケースで必要になるように思われます。類似文書の読み分けや、漠然とした表現、機能語による修飾などを含む表現に対応した文章をヒットさせたい場合、再ランキングモデルはハイブリッド検索の弱点を補い、狙った文章を検索上位へと浮上させます。ナレッジ文書などで、複雑な前提の下での制限事項や料金設定を説明したい場合などに有効なのではないでしょうか。
再ランキングモデルはSalesforce Data 360では利用できるのか
Salesforce Data 360 ハイブリッド検索は再ランキングモデルをサポートしているのでしょうか?実のところ、公式情報ではこの点がはっきりしません。以下製品ヘルプによると、再ランキング機能はサポートされていますが、事前計算されたrecentyとpopularityを計算に組み込む形となっており、質問文とのペアワイズ評価ではないようです。(本稿執筆時点の調査結果です。)
Influence Hybrid Search Relevance Ranking
続くDeep Fusion Ranker Modelの説明(以下)では、考慮している気配はありますが、実際の評価基準ははっきりと書かれていません。
Deep Fusion Ranker Model: The Deep Fusion Ranker (DFR) model enhances search relevance by integrating traditional signals such as vector similarity, keyword matches, popularity, and recency with a deeper understanding of the query text. By leveraging deep learning techniques and transformer architectures, the model captures complex feature interactions and jointly scores records. The search results are accurate, refined, and contextually relevant. This model effectively handles missing and noisy data, which ensures reliable performance across diverse search scenarios.
(拙訳: Deep Fusion Ranker モデル: Deep Fusion Ranker (DFR) モデルは、ベクトル類似度、キーワード一致、人気度、新しさといった従来のシグナルを、クエリテキストへのより深い理解と統合することで、検索の関連性を高めます。深層学習の技術と Transformer アーキテクチャを活用し、複雑な特徴間の相互作用を捉えて、レコードを統合的にスコアリングします。検索結果は正確で、洗練され、文脈的に関連性の高いものとなります。本モデルは欠損データやノイズの多いデータにも効果的に対応し、多様な検索シナリオにおいて信頼性の高いパフォーマンスを保証します。)
情報明確化と、(もし現状ないなら)ペアワイズ評価を行う再ランキングモデルのサポートを期待したいところです。
最後までお読みいただき、ありがとうございました。