最近、DeepSearchの精度向上に非常に興味を持ち、さまざまな論文や各社の研究レポートを調べてみました。そんな中、jina.aiという企業が提案する、rerankを参考にした精度向上アプローチがとても興味深かったので、皆さんにも紹介しようと思います。
原文はこちら⇩
1. URL Rankingとは
この手法は「URL Ranking」と呼ばれており、DeepSearch特有の課題に対処するための手法となります。
具体的には、LLMが検索をするときに、まずあるキーワードで検索を行い、数十件のウェブページをざっとチェック。その後、各ページ内にあるリンク先もクリックして確認し、また別のキーワードで再検索するというプロセスを繰り返すため、最終的に数百件のページを参照することが通常です。しかし、どのページの情報を参照するかは必ずしも一定ではなく、ランダムに選ばれてしまう場合もあるのです。
この不安定さが、deepsearchの精度にばらつきを生む原因となっていました。
そこで、jina.aiはベクトル検索で用いられるrerank処理を参考に、各URLにもランキングを付与して評価するというアプローチを提案しました。
2. ランキング指標
主なランキング基準は以下となります。
1. 最終更新日時(Last Update Time)
DeepSearchでは、最新情報を参照することが重要ですので、古い情報よりも更新された最新情報を優先するという考え方です。
2.ドメイン構造(Path Structure)
URLのドメイン構造を分析することで、内容が類似しているかどうかを判断します。似たドメインが多数存在する場合、その情報は重複している可能性が高く、重要度が下がると考えられます。
3.ドメイン出现頻度(Frequency Signals)
特定のURLが頻繁に出現する場合、その情報はより重要で信頼性が高いと見なされます。
4.セマンティックな関連性(Semantic Relevance)
質問内容と、URLに付随するテキスト(例:タイトル)との類似度を計算し、どれだけ関連性があるかを評価します。
これらの基準に基づいて、最終的には質の高い上位4件のウェブサイトが参照候補として選ばれます。
jina.aiによれば、この手法の導入でDeepSearchの精度が大幅に向上し、安定性も確保されたとのことです。(ただし、具体的に数値でどのくらい向上したかは特に記載されていません)
調整可能なパラメータは以下となります⇩
// Calculate boosted weights
export const rankURLs = (urlItems: SearchSnippet[], options: any = {}, trackers: TrackerContext): any[] => {
// Default parameters for boosting - can be overridden
const {
freqFactor = 0.5, // How much to boost based on term frequency
hostnameBoostFactor = 0.5, // How much to boost based on hostname frequency
pathBoostFactor = 0.4, // How much to boost based on path frequency
decayFactor = 0.8, // Decay factor for longer paths (0-1)
jinaRerankFactor = 0.8, // How much to boost based on Jina reranking
minBoost = 0, // Minimum boost score
maxBoost = 5, // Maximum boost score cap
question = '', // Optional question for Jina reranking
boostHostnames = [], // Optional hostnames to boost
} = options;
3. 動作確認
jina.aiのDeepSearchはオープンソースで公開されているため、実際に試してみました。
「RAGの精度改善手法教えてください」と質問すると、以下のような回答が返ってきました。結果は概ね良好で、出力も安定しており、複数回試しても参照されるサイトはほぼ同じでした。
(ちなみに、jina.aiは中国人によって設立された企業のため、DeepSearchでは中国語のウェブサイトが優先的に参照される設定になっています。そのため、日本語で質問しても主に中国語のサイトが参照され、結果が生成されました。)
最後まとめた結果:
興味ある方試してみてください: