<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Thomas Veasey - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Thomas Veasey - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/jp/search-labs/author/thomas-veasey</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/thomas-veasey</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/thomas-veasey.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Tue, 22 Sep 2026 20:44:35 GMT</lastBuildDate>
  <item>
    <title><![CDATA[HNSWグラフのマージを高速化する]]></title>
    <description><![CDATA[複数の HNSW グラフを構築する際のオーバーヘッドを削減するために、特にグラフのマージにかかるコストを削減するために私たちが行ってきた作業について説明します。]]></description>
    <content:encoded><![CDATA[<p>以前、複数の<a href="https://www.elastic.co/jp/search-labs/blog/hnsw-graph"> HNSW グラフを</a> 検索する必要がある場合に生じるいくつかの課題と、その課題をどのように軽減できるか<a href="https://www.elastic.co/jp/search-labs/blog/multi-graph-vector-search"> について説明しました 。</a>当時、私たちは計画していたさらなる改善点についても触れました。この投稿はその作業の集大成です。</p><p>なぜ複数のグラフを使用するのかと疑問に思うかもしれません。これは、Lucene のアーキテクチャ上の選択である不変セグメントによる副作用です。ほとんどのアーキテクチャ上の選択と同様に、長所と短所があります。たとえば、最近 Serverless Elasticsearch が GA になりました。この文脈において、私たちは不変セグメントから、効率的なインデックス レプリケーションや、インデックスとクエリの計算を分離して個別に自動スケーリングする機能など、非常に大きなメリットを得ています。ベクトル量子化の場合、セグメントのマージにより、パラメータを更新してデータ特性に適合させることができます。これに沿って、データ特性を測定し、インデックスの選択を再検討する機会を持つことで得られる他の利点もあると考えています。</p><p>この投稿では、複数の HNSW グラフを構築する際のオーバーヘッドを大幅に削減し、特にグラフのマージにかかるコストを削減するために私たちが行ってきた作業について説明します。</p><h3>背景</h3><p>管理可能な数のセグメントを維持するために、Lucene はセグメントをマージする必要があるかどうかを定期的に確認します。これは、現在のセグメント数が、基本セグメント サイズとマージ ポリシーによって決定されるターゲット セグメント数を超えているかどうかを確認することになります。カウントを超過すると、Lucene は制約に違反しながらセグメントのグループを結合します。このプロセスについては<a href="https://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html">他の場所で</a>詳しく説明されています。</p><p>Lucene は、書き込み増幅の対数的増加を実現するため、同様のサイズのセグメントを結合することを選択します。ベクトル インデックスの場合、書き込み増幅はベクトルがグラフに挿入される回数です。Luceneはセグメントを約10個のグループにまとめ、マージしようとします。その結果、ベクトルはグラフに約挿入されます。ここで、 はインデックス ベクトル数、 予想される基本セグメント ベクトル数です。対数増加のため、巨大なインデックスの場合でも書き込み増幅は 1 桁になります。ただし、グラフのマージに費やされる合計時間は、書き込み増幅に直線的に比例します。</p><p>HNSW グラフをマージする際には、最大セグメントのグラフを保持し、他のセグメントのベクトルをそのグラフに挿入するという、小さな最適化をすでに行っています。これが上記の 9/10 要因の理由です。以下では、マージするすべてのグラフの情報を使用することで、どのように大幅に改善できるかを示します。</p><h3>HNSW グラフのマージ</h3><p>これまでは、最大のグラフを保持し、他のグラフからベクトルを挿入し、それらを含むグラフは無視していました。以下で利用する重要な洞察は、破棄する各 HNSW グラフには、それに含まれるベクトルに関する重要な近接情報が含まれているということです。この情報を使用して、少なくとも一部のベクトルの挿入を高速化したいと考えています。</p><p>これは任意のマージポリシーを構築するために使用できるアトミック操作であるため、小さなグラフを大きなグラフに挿入する問題に焦点を当てます。</p><p>戦略は、 の頂点のサブセットを見つけて、大きなグラフに挿入することです。次に、小さなグラフ内のこれらの頂点の接続性を使用して、残りの頂点の挿入を高速化します。以下では、小さいグラフと大きいグラフの頂点 の隣接点をそれぞれ と で表します。図式的にプロセスは次のとおりです。</p><p><code>MERGE-HNSW</code></p><p><code>Inputs </code><code> and </code></p><p><code>1</code><code>Find </code><code> to insert into </code><code> using COMPUTE-JOIN-SET</code>
<code>2</code><code>Insert each vertex </code><code> into </code>
<code>3</code><code>for </code><code> do</code>
<code>4</code>
<code>5</code>
<code>6</code><code>FAST-SEARCH-LAYER</code>
<code>7</code><code>SELECT-NEIGHBORS-HEURISTIC</code>
<code>8</code></p><p>以下で説明する手順 (1 行目) を使用して、セットを計算します。次に、標準の HNSW 挿入手順 (2 行目) を使用して、 内のすべての頂点を大きなグラフに挿入します。挿入していない各頂点については、挿入した隣接頂点と、大きなグラフ内でのその隣接頂点を見つけます (4 行目と 5 行目)。このセットでシードされた<code>FAST-SEARCH-LAYER</code>手順 (6 行目) を使用して、HNSW<a href="https://arxiv.org/pdf/1603.09320">論文</a>から<code>SELECT-NEIGHBORS-HEURISTIC</code>の候補を検索します (7 行目)。実際には、 <code>SEARCH-LAYER</code> <code>INSERT</code>メソッド (論文のアルゴリズム 1) の候補セットを見つけるために置き換えていますが、それ以外は変更されていません。最後に、先ほど挿入した頂点を (行 8) に追加します。</p><p>これが機能するためには、 内のすべての頂点が内に少なくとも 1 つの隣接頂点を持つ必要があることは明らかです。実際、 内のすべての頂点に対して、  (あるに対して) が最大のレイヤー接続性であることが必要です。実際の HNSW グラフでは、頂点次数がかなり広がっていることがわかります。下の図は、Lucene HNSW グラフの最下層の頂点次数の典型的な累積密度関数を示しています。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc815e1a9c3bb0d06/6a17e178ec0f89308a5a6564/44f001b3a1bc6627e172fed5c52a02cfdcb4cd66-1324x898.png" alt="HNSWグラフ: 頂点次数分布の例" /><p>に固定値を使用することと、それを頂点次数の関数にすることを検討しました。この2番目の選択肢は、グラフの品質への影響を最小限に抑えながら大幅なスピードアップにつながるため、次の方法を採用しました。</p><p>定義により、  | は小さなグラフの頂点の次数に等しいことに注意してください。下限が 2 の場合、次数が 2 未満のすべての頂点が挿入されます。</p><p>単純な計算の議論によれば、 慎重に選択すれば、約に直接挿入するだけでよいことがわかります。具体的には、グラフの端の頂点の 1 つをに挿入すると、グラフのエッジに色を付けます。すると、 内に少なくとも 個の 隣接頂点を持つためには、少なくとも 個の 辺を色付けする必要があることがわかります。さらに、我々は</p><p>ここで、 小さなグラフ内の平均頂点次数です。J内の各頂点に対して、最大での辺を色付けします。したがって、色付けすると予想されるエッジの総数は最大でとなります。慎重に選択することで、この辺の数に近い色を塗ることができると期待しており、すべての頂点をカバーするには満たす必要がある。</p><p>これは、 を意味します。</p><p><code>SEARCH-LAYER</code>が実行時間を支配すると、マージ時間を最大高速化できる可能性があります。書き込み増幅の対数的増加を考慮すると、非常に大きなインデックスの場合でも、通常は 1 つのグラフを構築する場合と比べて構築時間が 2 倍になるだけです。</p><p>この戦略のリスクは、グラフの品質が損なわれることです。最初は何も実行しない<code>FAST-SEARCH-LAYER</code>を試しました。これにより、特に単一のセグメントにマージするときに、レイテンシの関数としてのリコールが影響を受ける程度にグラフの品質が低下することがわかりました。次に、グラフの限定的な検索を使用して、さまざまな代替案を検討しました。結局、最も効果的な選択は最も単純なものでした。<code>SEARCH-LAYER</code>を使用しますが、 <code>ef_construction</code>は低くします。このパラメータ化により、優れた品質のグラフを実現しながらも、マージ時間を平均で 30% 強短縮することができました。</p><h3>結合セットの計算</h3><p>適切な結合セットを見つけることは、HNSW グラフ カバー問題として定式化できます。貪欲ヒューリスティックは、最適なグラフカバーを近似するためのシンプルで効果的なヒューリスティックです。私たちが採用するアプローチでは、ゲインが減少する順に頂点を 1 つずつ選択してに追加します。ゲインは次のように定義されます。</p><p>ここで、 におけるベクトル の近傍の数を表し、 は 指示関数である。ゲインには、 に追加した頂点の数の変化、つまりが含まれます。これは、カバーされていない頂点を追加することで目標に近づくためです。中央のオレンジ色の頂点のゲイン計算を下の図に示します。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7a353d56fa09af5f/6a17e17a2f4a5c33f7fa8825/fe11cd55a7d94d9e0b0f4d47ea309a99075c355d-540x474.png" alt="HNSWグラフの結合集合Jに追加する頂点ゲイン" /><p>各頂点に対して次の状態を維持します。</p><ol><li><p>古くなっても、</p></li><li><p>そのゲイン 、</p></li><li><p>内の隣接頂点の数はと表され、</p></li><li><p>タイブレークに使用される範囲 [0,1] 内の乱数。</p></li></ol><p>結合セットを計算するための疑似コードは次のとおりです。</p><p><code>COMPUTE-JOIN-SET</code></p><p><code>Inputs </code></p><p><code>1</code>
<code>2</code>
<code>3</code><code>for </code><code> do</code>
<code>4</code>
<code>5</code>
<code>6</code>
<code>7</code><code>while </code><code> do
8</code><code> maximum gain vertex in </code>
<code>9</code><code>Remove the state for </code><code> from </code>
<code>10</code><code>if </code><code> is not stale then</code>
<code>11</code>
<code>12</code>
<code>13</code><code>for </code><code> do</code>
<code>14</code><code>mark </code><code> as stale if </code>
<code>15</code><code>mark neighbors of </code><code> stale if </code><code>
16</code><code>
17</code><code>else
18</code><code>
19</code><code>if </code><code> then
20</code><code>
21</code><code>return </code></p><p>まず 1 行目から 5 行目で状態を初期化します。</p><p>メイン ループの各反復では、最初に最大ゲイン頂点 (行 8) を抽出し、同点の場合はランダムに決定します。変更を加える前に、頂点のゲインが古くなっているかどうかを確認する必要があります。特に、 に頂点を追加するたびに、他の頂点のゲインに影響を与えます。</p><ol><li><p>すべての隣接ノードはに追加の隣接ノードを持つため、ゲインは変化する可能性がある（14行目）</p></li><li><p>いずれかの隣接セルが完全にカバーされている場合、その隣接セルのゲインはすべて変化する可能性があります（14～16行目）</p></li></ol><p>ゲインは遅延方式で再計算されるため、頂点をに挿入する場合にのみ、その頂点のゲインを再計算します (18 ～ 20 行目)。ゲインは常に減少するだけなので、挿入すべき頂点を見逃すことは決してありません。</p><p>いつ終了するかを決定するには、 に追加した頂点の合計増加を追跡するだけでよいことに注意してください。さらに、 の場合、少なくとも 1 つの頂点のゲインはゼロではないため、常に進歩します。</p><h3>成果</h3><p>私たちは、サポートされている 3 つの距離メトリック (ユークリッド、コサイン、内積) をカバーする 4 つのデータセットで実験を実行しました。</p><ol><li><p>quora-E5-small: 522931文書、384次元、コサイン類似度を使用、</p></li><li><p>cohere-wikipedia-v2: 100万文書、768次元、コサイン類似度を使用。</p></li><li><p>要点: 100万文書、960次元、ユークリッド距離を使用、</p></li><li><p>cohere-wikipedia-v3: 100 万件のドキュメント、1024 次元、最大内積を使用します。</p></li></ol><p>各データセットに対して、2 つの量子化レベルを評価します。</p><ol><li><p>int8 – 次元ごとに1バイトの整数を使用し、</p></li><li><p>BBQ – 次元ごとに 1 ビットを使用します。</p></li></ol><p>最後に、各実験について、2 つの検索深度で検索品質を評価し、インデックスを構築した後と、単一のセグメントに強制的にマージした後を調べます。</p><p>要約すると、グラフの品質を維持しながら、インデックス作成とマージの速度を一貫して大幅に向上させ、すべてのケースで検索パフォーマンスを実現できます。</p><h4>実験1: int8量子化</h4><p>ベースラインから候補、つまり提案された変更までの平均的な高速化は次のとおりです。</p><p>インデックス時間の高速化: <strong>1.28</strong> </p><p>強制マージの高速化: <strong>1.72</strong></p><p>これは実行時間の次の内訳に対応する。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8422be122ef1a9c9/6a17e17bbe6086522e00467d/5f9f6d487b4c74c4998aa47465912c1a9743e928-734x479.png" alt="ベースラインと候補のマージ戦略のインデックスとマージ時間" /><p>完全性のために正確な時間は</p><p></p><p>索引</p><p></p><p>マージ</p><p></p><p>データセット</p><p>ベースライン</p><p>候補者</p><p>構築</p><p>候補者</p><p>quora-E5-small</p><p>112.41秒</p><p>81.55秒</p><p>113.81秒</p><p>70.87秒</p><p>ウィキコヒアv2</p><p>158.1秒</p><p>122.95秒</p><p>425.20秒</p><p>239.28秒</p><p>要旨</p><p>141.82秒</p><p>119.26秒</p><p>536.07秒</p><p>279.05秒</p><p>ウィキコヒアv3</p><p>211.86秒</p><p>168.22秒</p><p>654.97秒</p><p>414.12秒</p><p>以下に、複数のセグメントを持つインデックス（すべてのベクトルをインデックスした後のデフォルトのマージ戦略の最終結果）と単一セグメントへの強制マージ後のインデックスの、2 つの検索深度（recall@10 と recall@100）と、単一セグメントへの強制マージ後の、候補（破線）とベースラインを比較したリコール対レイテンシのグラフを示します。曲線が高く、左に寄っているほど良好であり、これは、より低いレイテンシでより高い再現性を意味します。</p><p>ご覧のとおり、複数のセグメント インデックスの場合、候補は Cohere v3 データセットの方が優れており、他のすべてのデータセットではわずかに劣りますが、ほぼ同等です。単一セグメントに統合した後、リコール曲線はすべてのケースでほぼ同じになります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf674622469bf6a90/6a17e17dfbc5f874a84919c9/9195297f19f90b172d832ba56bdada7b0d8a768b-985x392.png" alt="インデックス構築後のレイテンシと@10および@100の関係を思い出してください" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltde89f7e94ac823f4/6a17e17fe9ea876429a9c507/c866f32d579ae2b841e92ca733dd29c0e214ac6b-986x386.png" alt="単一セグメントにマージした後のレイテンシと@10および@100のリコール" /><h4>実験2：BBQ量子化</h4><p>ベースラインから候補までの平均的な高速化は次のとおりです。</p><p>インデックス時間の高速化: <strong>1.33</strong> </p><p>強制マージの高速化: <strong>1.34</strong></p><p>これは実行時間の次の内訳に対応する。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5b0eb305222fa5c2/6a17e18125daab514f08a18c/11be0cf6b63480dc703409329357ea4847b55051-740x415.png" alt="ベースラインと候補のマージ戦略のインデックスとマージ時間" /><p>完全性のために正確な時間は</p><p></p><p>索引</p><p></p><p>マージ</p><p></p><p>データセット</p><p>ベースライン</p><p>候補者</p><p>構築</p><p>候補者</p><p>quora-E5-small</p><p>70.71秒</p><p>58.25秒</p><p>59.38秒</p><p>40.15秒</p><p>ウィキコヒアv2</p><p>203.08秒</p><p>142.27秒</p><p>107.27秒</p><p>85.68秒</p><p>要旨</p><p>110.35秒</p><p>105.52秒</p><p>323.66秒</p><p>202.2秒</p><p>ウィキコヒアv3</p><p>313.43秒</p><p>190.63秒</p><p>165.98秒</p><p>159.95秒</p><p>複数のセグメント インデックスの場合、ベースラインがわずかに優れている cohere v2 を除き、ほぼすべてのデータセットで候補の方が優れています。単一セグメントインデックスの場合、リコール曲線はすべてのケースでほぼ同じです。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb12174abeadbcdd1/6a17e1822f4a5c4cc2fa8829/7da1be27bab5a7f5f9c9a1882ea35761a4a0ba5c-973x383.png" alt="インデックス構築後のレイテンシと@10および@100の関係を思い出してください" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf1b88d4f7fec9905/6a17e184414c64a8de9450b4/a26af30a56c55a12addee7e4fb7e8f606f366668-979x386.png" alt="@10と@100を1つのセグメントに統合した場合のレイテンシを思い出してください" /><h3>まとめ</h3><p>このブログで説明したアルゴリズムは、今後リリースされる Lucene 10.2 およびそれに基づく Elasticsearch リリースで利用できるようになります。ユーザーは、これらの新しいバージョンで改善されたマージ パフォーマンスと短縮されたインデックス構築時間を活用できるようになります。この変更は、Lucene と Elasticsearch をベクター検索とハイブリッド検索に高速かつ効率的にするための継続的な取り組みの一環です。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/hnsw-graphs-speed-up-merging</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/hnsw-graphs-speed-up-merging</guid>
    <category><![CDATA[Vector Database]]></category>
    <category><![CDATA[Lucene]]></category>
    <dc:creator><![CDATA[Thomas Veasey,Mayya Sharipova]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9fca6a01d0541cfb/6a17e187033c8d46486bb0e1/49a6c880f5dedd0fa502ece5be124824ee218cc0-1792x1024.png" length="0" type="image/png"/>
    <pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[検索関連性の評価パート1－BEIRベンチマーク]]></title>
    <description><![CDATA[検索評価プロセスを改善するためのヒントやテクニックとともに、BEIRベンチマークをよりよく理解した上で検索システムを評価する方法を学びましょう。]]></description>
    <content:encoded><![CDATA[<p>これは、BEIRベンチマークをより深く理解するという観点から、独自の検索システムを評価する方法について検討するブログ記事シリーズの最初の投稿です。BEIRをよりよく理解するために、検索評価プロセスを改善するための具体的なヒントやテクニックを紹介します。また、評価の信頼性を下げる一般的な落とし穴も紹介します。最後に、LLMは検索エンジニアに強力な新しいツールを提供することを指摘し、検索の評価にLLMをどのように使用できるかを例を挙げて示します。</p><h2>検索関連性評価におけるBEIRベンチマークの理解</h2><p>あらゆるシステムを改善するには、それがどの程度うまく機能しているかを測定できる必要があります。検索の観点では、<a href="https://arxiv.org/abs/2104.08663">BEIR</a>（または<a href="https://huggingface.co/spaces/mteb/leaderboard">MTEB</a>リーダーボードの検索セクションに相当するもの）が情報検索コミュニティの「聖杯」と考えられており、それ自体は驚くことではありません。これは、さまざまなタスクにわたる多様なデータセットを備えた、非常によく構造化されたベンチマークです。具体的には、以下の領域が対象となります。</p><ul><li><p>引数取得（ArguAna、Touche2020）</p></li><li><p>オープンドメインQA（HotpotQA、Natural Questions、FiQA）</p></li><li><p>パッセージ検索（MSMARCO）</p></li><li><p>重複質問取得（Quora、CQADupstack）</p></li><li><p>ファクトチェック（FEVER、Climate-FEVER、Scifact）</p></li><li><p>バイオメディカル情報検索（TREC-COVID、NFCorpus、BioASQ）</p></li><li><p>エンティティ検索（DBPedia）</p></li><li><p>引用予測（SCIDOCS）</p></li></ul><p>これは、システムが返す上位結果の中で、各タスク例で最も関連性の高いドキュメントをシステムがどの程度一致させたかに関する単一の統計であるnDCG@10を提供します。人間が操作する検索システムでは、上位結果の関連性が非常に重要です。しかし、検索の評価には多くのニュアンスがあり、単一の要約統計では見逃してしまうものがあります。</p><h2>BEIRデータセットの構造</h2><p>各ベンチマークには3つのアーティファクトがあります。</p><ul><li><p>取得すべきコーパスや文書</p></li><li><p>クエリ</p></li><li><p>クエリの関連性判断（別名 <code>qrels</code>）</p></li></ul><p>関連性判定は、ゼロ以上のスコアとして提供されます。0以外のスコアは、ドキュメントがクエリに多少関連していることを示します。</p><p>データセット</p><p>コーパスのサイズ</p><p>テストセット内のクエリ数</p><p>肯定的にラベル付けされた#qrels</p><p>ゼロに等しい#qrels</p><p>コーパス内の#duplicates</p><p>Arguana</p><p>8,674</p><p>1,406</p><p>1,406</p><p>0</p><p>96</p><p>Climate-FEVER</p><p>5,416,593</p><p>1,535</p><p>4,681</p><p>0</p><p>0</p><p>DBPedia</p><p>4,635,922</p><p>400</p><p>15,286</p><p>28,229</p><p>0</p><p>FEVER</p><p>5,416,568</p><p>6,666</p><p>7,937</p><p>0</p><p>0</p><p>FiQA-2018</p><p>57,638</p><p>648</p><p>1,706</p><p>0</p><p>0</p><p>HotpotQA</p><p>5,233,329</p><p>7,405</p><p>14,810</p><p>0</p><p>0</p><p>Natural Questions</p><p>2,681,468</p><p>3,452</p><p>4,021</p><p>0</p><p>16,781</p><p>NFCorpus</p><p>3,633</p><p>323</p><p>12,334</p><p>0</p><p>80</p><p>Quora</p><p>522,931</p><p>10,000</p><p>15,675</p><p>0</p><p>1,092</p><p>SCIDOCS</p><p>25,657</p><p>1,000</p><p>4,928</p><p>25,000</p><p>2</p><p>Scifact</p><p>5,183</p><p>300</p><p>339</p><p>0</p><p>0</p><p>Touche2020</p><p>382,545</p><p>49</p><p>932</p><p>1,982</p><p>5,357</p><p>TREC-COVID</p><p>171,332</p><p>50</p><p>24,763</p><p>41,663</p><p>0</p><p>MSMARCO</p><p>8,841,823</p><p>6,980</p><p>7,437</p><p>0</p><p>324</p><p>CQADupstack (sum)</p><p>457,199</p><p>13,145</p><p>23,703</p><p>0</p><p>0</p><p><strong>表1</strong>：データセットの統計。数値はデータセットのテスト部分（ <code>MSMARCO</code>の場合は<code>dev</code> ）で計算されました。</p><p><strong>表1</strong>は、<code>BEIR</code>ベンチマークを構成するデータセットの統計を示しています。これには、コーパス内のドキュメント数、テストデータセット内のクエリ数、<code>qrels</code>ファイル内の正/負（クエリ、ドキュメント）ペアの数などが含まれます。データをざっと見てみると、すぐに次のことが推測できます。</p><ul><li><p>ほとんどのデータセットには、<code>qrels</code>ファイル内に負の関係、つまりゼロスコアが含まれていません。これは、ドキュメントが与えられたクエリに対して明確に無関係であることを示します。</p></li><li><p>クエリごとの平均ドキュメント関係数（<code>#qrels</code>/<code>#queries</code>）は、<code>ArguAna</code>の場合1.0から<code>TREC-COVID</code>の493.5まで変化しますが、大部分のケースでは値が<code>&lt;</code>5です。</p></li><li><p>一部のデータセットでは、コーパス内に重複したドキュメントが存在するため、ドキュメントがクエリに関連していると見なされても、その重複は関連していないなど、誤った評価につながる場合があります。例えば、<code>ArguAna</code>では、クエリに関連するとマークされたドキュメントが1つしかない、重複したドキュメントペアを96件確認しました。重複も含め初期qrelsリストを「拡張」することで、 <code>nDCG@10</code>スコアが平均で約1%相対的に増加することが観測されました。</p></li></ul>{
  "_id": "test-economy-epiasghbf-pro02b",
  "title": "economic policy international africa society gender house believes feminisation",
  "text": "Again employment needs to be contextualised with …",
  "metadata": {}
}
{
  "_id": "test-society-epiasghbf-pro02b",
  "title": "economic policy international africa society gender house believes feminisation",
  "text": "Again employment needs to be contextualised with …",
  "metadata": {}
}
<p><strong>ArguAnaの重複ペアの例。qrelsファイルでは、（反論として）最初のものだけがクエリ「test-economy-epiasghbf-pro02a」に関連しているようです。</strong></p><p>MTEBリーダーボード上のモデルを比較する場合、平均的な検索品質に焦点を当てたくなることがあります。これはモデル全体の品質を示す良い指標ですが、必ずしもモデルのパフォーマンスを正確に示すわけではありません。結果はデータセットごとに報告されるため、異なるデータセットが検索タスクとどれほど密接に関連しているかを理解し、最も関連性の高いものだけを使用してモデルを再スコアリングする価値があります。さらに深く掘り下げたい場合は、さまざまなデータセットコーパスとのトピックの重複を追加で確認することもできます。品質基準をトピック別に階層化することで、トピックごとの長所と短所をより細かく評価できます。</p><p>ここで重要な注意点は、ドキュメントが<code>qrels</code>ファイル内でマークされていない場合、デフォルトではクエリとは無関係であると見なされることです。この領域をさらに掘り下げ、「評価者が（クエリ、ドキュメント）ペアに対して、グラウンドトゥルース情報がない場合、どれくらいの頻度で提示されるか？」という問いに光を当てるための証拠を収集します。これが重要な理由は、浅いマークアップしか利用できない（したがって、すべての関連文書がそのようなラベル付けされているわけではない）場合、1つの情報検索システムが、異なる関連（しかしマークされていない）ドキュメントを単に「選択」して表面化させるため、別のシステムよりも劣っていると判断される可能性があるためです。これは高品質の評価セットを作成する際によくある時限爆弾で、特に大規模なデータセットの場合に顕著です。手動でのラベル付けは、通常、現在のシステムによって返される上位の結果に重点を置くため、盲点にある関連ドキュメントを見逃す可能性があります。したがって、通常は、より広範囲な浅いマークアップよりも、より少ないクエリのより完全なマークアップにより多くのリソースを集中させることが好ましいです。</p><h2>検索関連性評価におけるBEIRベンチマークの活用</h2><p>分析を開始するために、次のシナリオを実装します（<a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/evaluating-search-relevance-part-1/retrieve-and-rerank.ipynb">ノートブック</a>を参照）。</p><ol><li><p>まず、各データセットのコーパスをElasticsearchインデックスにロードします。</p></li><li><p>テストセットの各クエリについて、BM25の上位100件の文書を取得します。</p></li><li><p>取得したドキュメントを、さまざまなSOTA再ランク付けモデルを使用して再ランク付けします。</p></li><li><p>最後に、ステップ2（取得後）とステップ3（リランキング後）の上位10件のドキュメントの「判定率」をレポートします。つまり、<code>qrels</code>ファイルにスコアがある上位ドキュメント10件の平均割合を算出します。</p></li></ol><p>使用したモデルのリランキングのリストは次のとおりです。</p><ul><li><p><a href="https://docs.cohere.com/reference/rerank">Cohereの</a><code>rerank-english-v2.0</code>と <code>rerank-english-v3.0</code></p></li><li><p><a href="https://huggingface.co/BAAI/bge-reranker-base">BGEベース</a></p></li><li><p><a href="https://huggingface.co/mixedbread-ai/mxbai-rerank-xsmall-v1">mxbai-rerank-xsmall-v1</a></p></li><li><p><a href="https://huggingface.co/cross-encoder/ms-marco-MiniLM-L-6-v2">MiniLM-L-6-v2</a></p></li></ul><p></p><p>検索</p><p>リランキング</p><p></p><p></p><p></p><p></p><p>データセット</p><p>BM25 (%)</p><p>Cohere Rerank v2 (%)</p><p>Cohereリランク v3(%)</p><p>BGEベース (%)</p><p>mxbai-rerank-xsmall-v1 (%)</p><p>MiniLM-L-6-v2 (%)</p><p>Arguana</p><p>7.54</p><p>4.87</p><p>7.87</p><p>4.52</p><p>4.53</p><p>6.84</p><p>Climate-FEVER</p><p>5.75</p><p>6.24</p><p>8.15</p><p>9.36</p><p>7.79</p><p>7.58</p><p>DBPedia</p><p>61.18</p><p>60.78</p><p>64.15</p><p>63.9</p><p>63.5</p><p>67.62</p><p>FEVER</p><p>8.89</p><p>9.97</p><p>10.08</p><p>10.19</p><p>9.88</p><p>9.88</p><p>FiQa-2018</p><p>7.02</p><p>11.02</p><p>10.77</p><p>8.43</p><p>9.1</p><p>9.44</p><p>HotpotQA</p><p>12.59</p><p>14.5</p><p>14.76</p><p>15.1</p><p>14.02</p><p>14.42</p><p>Natural Questions</p><p>5.94</p><p>8.84</p><p>8.71</p><p>8.37</p><p>8.14</p><p>8.34</p><p>NFCorpus</p><p>31.67</p><p>32.9</p><p>33.91</p><p>30.63</p><p>32.77</p><p>32.45</p><p>Quora</p><p>12.2</p><p>10.46</p><p>13.04</p><p>11.26</p><p>12.58</p><p>12.78</p><p>SCIDOCS</p><p>8.62</p><p>9.41</p><p>9.71</p><p>8.04</p><p>8.79</p><p>8.52</p><p>Scifact</p><p>9.07</p><p>9.57</p><p>9.77</p><p>9.3</p><p>9.1</p><p>9.17</p><p>Touche2020</p><p>38.78</p><p>30.41</p><p>32.24</p><p>33.06</p><p>37.96</p><p>33.67</p><p>TREC-COVID</p><p>92.4</p><p>98.4</p><p>98.2</p><p>93.8</p><p>99.6</p><p>97.4</p><p>MSMARCO</p><p>3.97</p><p>6.00</p><p>6.03</p><p>6.07</p><p>5.47</p><p>6.11</p><p>CQADupstack (avg.)</p><p>5.47</p><p>6.32</p><p>6.87</p><p>5.89</p><p>6.22</p><p>6.16</p><p><strong>表 2</strong>：上位10件の取得/リランキングされたドキュメントに基づいて計算された（データセット、リランカー）ペアごとの判定率</p><p><strong>表</strong>2から、<code>TREC-COVID</code> （カバレッジ90%超）、<code>DBPedia</code> （～65% ）、<code>Touche2020</code> 、<code>nfcorpus</code> （～35% ）を除き、大半のデータセットの検索後またはリランキング付け後のラベリング率は5%から10%を少し超える程度であることがわかります。これは、マークされていないドキュメントがすべて関連性があるという意味ではありませんが、それらのサブセット（特に上位に配置されたもの）が正である可能性があります。</p><p>汎用命令調整言語モデルの登場により、関連性の判断を自動化できる可能性のある強力な新しいツールが生まれました。これらの方法は通常、検索のためにオンラインで使用するには計算コストがかかりすぎますが、ここではオフライン評価に焦点を当てます。以下では、これらを使用して、BEIRデータセットの一部が浅いマークアップに悩まされているという証拠を調査します。</p><p>この仮説をさらに調査するために、MSMARCOに焦点を当て、100件のクエリのサブセットと、（Cohere v2で）リランキングされた上位5つのドキュメントのうち、現在関連性があるとマークされていないものを選択することにしました。私たちは 2 つの異なる評価方法を採用しました。まず、慎重に調整されたプロンプト（これについては後の投稿で詳説します）を使用して、最近リリースされた<a href="https://huggingface.co/microsoft/Phi-3-mini-4k-instruct">Phi-3-mini-4k</a>モデルを準備し、クエリに対するドキュメントの関連性（または関連性の欠如）を予測しました。並行して、これらのケースは手動でラベル付けされ、LLMの出力と人間の判断との一致率も評価されました。全体として、以下の2つの結論が導き出されます。</p><ul><li><p>LLMの応答と人間の判断の間の一致率は約80％で、その方向性において十分な出発点であるように思われます。</p></li><li><p>57.6％のケース（人間の判断に基づく）で、返されたドキュメントが実際にクエリに関連していることが判明しました。言い換えれば、100件のクエリに対して107件のドキュメントに関連性があると判断されましたが、少なくとも0.576 x 5 x 100 = 288の追加のドキュメントが実際には関連しています！</p></li></ul><p>以下は、<code>MSMARCO</code>/<code>dev</code> データセットから抽出された、クエリ、注釈付きの正のドキュメント（<code>qrels</code>から）、不完全なマークアップによる偽陰性のドキュメントを含む例です。</p><p>例1：</p>{
  "query":
    {
        "_id": 155234,
        "text": "do bigger tires affect gas mileage"
    },
  "positive_doc":
    {
        "_id": 502713,
        "text": "Tire Width versus Gas Mileage. Tire width is one of the only tire size factors that can influence gas mileage in a positive way. For example, a narrow tire will have less wind resistance, rolling resistance, and weight; thus increasing gas mileage.",
    },
    "negative_doc":
    {
        "_id": 7073658,
        "text": "Tire Size and Width Influences Gas Mileage. There are two things to consider when thinking about tires and their effect on gas mileage; one is wind resistance, and the other is rolling resistance. When a car is driving at higher speeds, it experiences higher wind resistance; this means lower fuel economy."
    }
}
<p>例2：</p>{
  "query":
    {
        "_id": 300674,
        "text": "how many years did william bradford serve as governor of plymouth colony?"
    },
  "positive_doc":
    {
        "_id": 7067032,
        "text": "http://en.wikipedia.org/wiki/William_Bradford_(Plymouth_Colony_governor) William Bradford (c.1590 \u00e2\u0080\u0093 1657) was an English Separatist leader in Leiden, Holland and in Plymouth Colony was a signatory to the Mayflower Compact. He served as Plymouth Colony Governor five times covering about thirty years between 1621 and 1657."
    },
    "negative_doc":
    {
        "_id": 2495763,
        "text": "William Bradford was the governor of Plymouth Colony for 30 years. The colony was founded by people called Puritans. They were some of the first people from England to settle in what is now the United States. Bradford helped make Plymouth the first lasting colony in New England."
    }
}
<p>このような特定のクエリを手動で評価することは、nDCG@10のような定量的尺度を補完する検索品質を理解する上で一般的に役立つ手法です。検索に変更を加えるときに常に実行する代表的なクエリのセットがあれば、統計には表示されない、パフォーマンスの変化に関する重要な定性情報が得られます。例えば、検索で返される誤った結果についてより深い洞察を得ることができます。取得した結果の中で明らかな誤りを特定したり、ドメイン固有の用語の誤解釈などの関連する誤りのクラスを特定したりすることができます。</p><p>私たちの結果は、 <code>MSMARCO</code>評価に関する関連研究と一致しています。例えば、<a href="https://arxiv.org/pdf/2109.00062">Arabzadehら</a>は同様の手順を踏んでおり、クラウドソーシングされたワーカーに選好判定を行わせています。特に、彼らは、多くの場合、リランキングモジュールによって返されたドキュメントがMSMARCO <code>qrels</code>ファイル内のドキュメントよりも選好されるということを示しています。もう一つの証拠は、<a href="https://arxiv.org/pdf/2010.08191">RocketQA</a>リランカーの著者らによるもので、リランキングされたドキュメントの70％以上が手動検査後に関連性があると判断されたと報告しています。</p><p>更新 - 9月9日：データセットの慎重な再評価の結果、関連ドキュメントの事例が15件追加で特定され、合計数は273件から288件に増加しました。</p><h2>主なポイントと次のステップ</h2><ul><li><p>ベンチマークやモデルの比較にとって、より優れたグラウンドトゥルースの追求は極めて重要であるため、終わりがありません。LLMは、慎重に使用し、適切な指示に従って調整すれば、いくつかの評価領域で役立つ可能性があります。</p></li><li><p>より一般的には、ベンチマークが完璧になることは決してないことを考えると、純粋なスコアの比較から、統計的に有意な差異を捕捉するより堅牢な手法に切り替えることが望ましいかもしれません。<a href="https://arxiv.org/pdf/2109.00062">Arabzadehら</a>の研究はこのことを示す良い例であり、彼らは調査結果に基づいて、さまざまな実行間での有意な差（または有意でない差）を示す95%信頼区間を構築しています。付属の<a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/evaluating-search-relevance-part-1/retrieve-and-rerank.ipynb">ノートブック</a>では、<a href="https://en.wikipedia.org/wiki/Bootstrapping_(statistics)">ブートストラッピング</a>を使用した信頼区間の実装を提供しています。</p></li><li><p>エンドユーザーの視点からは、ベンチマークの結果を読む際にタスクの整合性を考えることが有用です。例えば、RAGパイプラインを構築し、最も一般的なユースケースがさまざまなソースから複数の情報を集めることであると知っているAIエンジニアにとっては、BEIRベンチマーク全体のグローバル平均ではなく、HotpotQAのようなマルチホップQAデータセットで検索モデルのパフォーマンスを評価する方が有意義です。</p></li></ul><p>次の<a href="https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-2">ブログ記事</a>では、LLMとしてのPhi-3の使用と、関連性を予測するようにチューニングする過程をさらに詳しく説明します。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-1</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-1</guid>
    <category><![CDATA[MLの調査]]></category>
    <category><![CDATA[Python]]></category>
    <dc:creator><![CDATA[Thanos Papaoikonomou,Thomas Veasey]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9d9912c8d4187096/6a1704f5b0367d30e672bc17/54a6e5197f5721b36fc65f27387d29803ed35589-721x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 16 Jul 2024 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>