Needle In A Haystack (NIAH)
Needle in a Haystack(NIAH)は、長いコンテキストの任意の深さに隠された1つの事実をLLMが見つけられるかをテストします。起源、結果、バリエーション、限界を解説します。
干し草の山から針を探す (NIAH) は、長い無関係なテキスト(干し草の山)の中の指定位置に単一の事実(針)を隠し、大規模言語モデル (LLM)にそれを検索させる評価です。コンテキスト長と針の位置を変えてテストを繰り返すと、モデルがコンテキストウィンドウのどの位置で情報を見つけられなくなるかを示すヒートマップが得られます。Greg Kamradtは2023年11月にオープンソースのNIAHリポジトリとともにこのテストを発表しました。Paul Grahamのエッセイ集に「晴れた日にサンフランシスコでする最高のことは、サンドイッチを食べてDolores Parkに座ることです」という文を隠し、各モデルにサンフランシスコでする最高のことを尋ねました。最初の実験では、128K-トークンのウィンドウを持つOpenAIのGPT-4 Turboと、200KのClaude 2.1をテストしました。
テストの仕組み#
干し草の山を目標トークン数に切り詰め、その長さに対する割合で指定した位置(先頭の0%から末尾の100%まで)に針を挿入し、モデルの回答を針と照合して採点します。完全な実行では、次の2つの軸を網羅します。
針は周囲のエッセイとは無関係なため、このテストではアテンション機構の能力の一つ、つまり長いプロンプトのどこにあっても特定の一節を見つけてコピーする能力を切り分けて評価します。
主な結果#
Kamradtの最初のヒートマップでは、GPT-4 Turboは約73Kトークンを超えると針を見失い、特に深さが約7%~50%の位置にある場合に失敗しました。これは、同じ年にLost in the Middle研究が測定した、プロンプト中ほどでの弱点に近い結果です。Claude 2.1は元のプロンプトで27%のスコアでしたが、Anthropicはプロンプトエンジニアリングの変更によってプロンプトエンジニアリングスコアを98%に引き上げました。Claudeの回答を「コンテキスト内で最も関連性の高い文は次のとおりです:」で始める方法です。NIAHはモデル発表時の標準的なグラフになりました。GoogleのGemini 1.5レポートは少なくとも1,000万トークンまで99%超の検索率を示し、音声や動画の干し草の山にもテストを拡張しました。またAnthropicは、Claude 3 Opusが再現率99%を超え、針がテキストに人為的に挿入されたようだと指摘することもあったと報告しました。
バリエーションと限界#
通常のNIAHは、質問と針でキーワードが共通しているため、語彙検索に近く、現在では最先端モデルが飽和しています。より難しいバリエーションでは、針が求める内容を変えます。
- パスキー検索: 繰り返しの埋め草テキストに隠したランダムな数字です。NIAHの登場前、2023年にLandmark Attentionのテストに使われました。
- 複数の針と集約: NVIDIAのRULERベンチマークは複数のキーと値を隠し、変数追跡や一般語の集約を加えます。32Kトークン以上をうたう17モデルのうち、32Kで十分な性能を示したのは半数だけでした。
- 文字列の完全一致なし: NoLiMaでは、質問と針の語彙的な重複がほとんどないように質問を作ります。32Kトークンでは、13モデル中11モデルのスコアが短いコンテキストでのスコアの半分を下回りました。
入力が長くなるにつれて、こうした難しいテストで明らかになる精度低下はコンテキスト劣化と呼ばれます。NIAHは、外部のベクトル検索がモデルの読み込み前に文章を選ぶ検索拡張生成 (RAG)とも、既知の対象ではなく未知の逸脱を探す異常検知とも異なります。
画像の中の針#
コンピュータービジョンでも、同じ表現は小物体検出を指します。航空画像の人物、衛星画像の船、あるいは医用画像解析における病理スライド全体のスキャン画像内の腫瘍細胞などです。障害となるのは解像度です。Ultralytics YOLO26はデフォルトで各画像の長辺を640ピクセルにリサイズするため、4,000ピクセルのドローン映像は6分の1未満に縮小され、10ピクセルの歩行者は幅が2ピクセル未満になります。SAHIによるスライス推論では、256 × 256タイルなどの重複スライスに対してネイティブ解像度でYOLO26を実行し、バウンディングボックスを統合します。SAHI論文でのVisDroneおよびxView航空画像データセットのテストでは、スライス処理により、3種類の検出器で物体検出のAPが5.1%~6.8%向上しました。










