Needle in a Haystack評価(ニードルインアヘイスタックヒョウカ)
LLMの長コンテキスト能力を測るベンチマーク手法。長文(hay = 干し草の山)の中に特定情報(needle = 針)を埋め込み、モデルがそれを正確に取り出せるか検証する。コンテキスト長と位置ごとの精度分布を可視化できる。
Needle in a Haystack評価とは
Needle in a Haystack(NIAH)は2023年末にGregory Kamradtが公開した、LLMの長コンテキスト処理能力を測るベンチマーク手法です。「干し草の山(Haystack)の中から針(Needle)を見つける」という比喩通り、長大なテキストの中に埋め込んだ特定情報を正確に取り出せるかを評価します。
テストの仕組み
- Haystack(背景テキスト): 長い無関係のテキスト(Paul Grahamのエッセイや小説など)を用意
- Needle(埋め込む情報): 特定の事実文を作成(例:「サンタクロースが好きな食べ物はマジックマッシュルームのピザです」)
- 挿入位置を変えてテスト: コンテキストの先頭・中央・末尾など複数位置に順次挿入
- 質問: 「サンタクロースが好きな食べ物は何ですか?」と質問
- 正解率をヒートマップで可視化: コンテキスト長(X軸)×挿入位置(Y軸)×スコア(色)
def niah_test(
client,
model: str,
haystack_text: str,
needle: str,
question: str,
expected_answer: str,
context_length: int,
depth_percent: float # 0.0=先頭, 1.0=末尾
) -> float:
truncated_haystack = haystack_text[:context_length]
insert_idx = int(len(truncated_haystack) * depth_percent)
full_context = (
truncated_haystack[:insert_idx]
+ f"\n\n{needle}\n\n"
+ truncated_haystack[insert_idx:]
)
response = client.messages.create(
model=model,
max_tokens=100,
messages=[{"role": "user", "content": f"{full_context}\n\n質問: {question}"}]
)
answer = response.content[0].text
return 1.0 if expected_answer.lower() in answer.lower() else 0.0
主要モデルのNIAH結果(2024-2025年)
Gemini 1.5 Pro(100万トークン): ほぼ全域で98%以上の精度。Googleが2024年2月に公開した結果が業界に衝撃を与え、100万トークン全域での高精度を示したことでロングコンテキスト競争が加速しました。
Claude 3 Opus(200Kトークン): 200Kトークン全域で95%以上。中央部での精度も維持しており安定したロングコンテキスト性能として評価が高い。
GPT-4 Turbo(128Kトークン): 先頭・末尾は高精度だが中央部(40〜60%付近)で精度低下。Lost in the Middle現象が顕著に現れるヒートマップとして広く引用されます。
NIAHの限界と批判
「刺さりすぎ」問題: 実際の用途では単純な事実の取り出しではなく複合的な推論が必要です。NIAHは「見つけられるか」だけを測り「理解・推論できるか」を測れません。
ハック可能性: モデルがNIAH専用のヒューリスティックを学習してしまう可能性があります。
発展版 Multi-Document NIAH: 単一Needleではなく複数の情報を埋め込み、それらを組み合わせた推論を要求するより現実的な評価形式も登場しています。
NIAH関連ベンチマーク比較
NIAH(オリジナル)は単一事実の再現を測定。Multi-hop NIAHは複数事実の結合推論。RULERは複数タスク・複数深度の総合評価。LongBenchは実際の長文タスク(QA/要約/コード)での評価。∞Benchは100K〜1Mトークンの多タスク評価です。
まとめ
Needle in a Haystack評価は視覚的にわかりやすいヒートマップでLLMのロングコンテキスト能力を可視化する手法として定着しました。Lost in the Middle問題の発見・定量化に大きく貢献し、フロンティアモデルの開発競争の指標として広く使われています。ただし単純な記憶テストに過ぎないため、実用的な長文理解力の評価にはLongBenchやRULERなど複合的なベンチマークとの併用が推奨されます。