English translation is not available yet. Showing Russian content.

Как вы тестируете long-context capability модели (бенчмарки: RULER, Needle in a Haystack)?

Краткий тезис

Тестирование long-context capability (способности модели обрабатывать длинные контексты) необходимо для оценки, насколько хорошо модель может извлекать и использовать информацию из больших объёмов текста (до сотен тысяч токенов). Основные бенчмарки — Needle in a Haystack (простое извлечение одного факта) и RULER (многофакторное рассуждение). Дополнительно используют LongBench и ZeroSCROLLS. Ключевая метрика — recall (полнота извлечения) на разных длинах контекста и позициях «иголки». Хорошие модели показывают recall >95% на 100k токенов, топовые — до 1M.


1. Зачем тестировать long-context capability

Современные LLM (GPT-4, Claude, Gemini, Llama 3.1) заявляют поддержку контекстов от 128k до 2M токенов. Однако на практике модель может «забывать» информацию в середине контекста (lost in the middle). Тестирование нужно для:

  • Выбора модели под задачу (RAG, анализ документов, агенты с длинной историей).
  • Диагностики — где модель теряет информацию: на какой длине, на каких позициях.
  • Сравнения моделей при фиксированной длине.
  • Мониторинга регрессий после fine-tuning или обновления.

Long-context capability — это не просто «помещается ли контекст», а способность точно извлекать и рассуждать на основе информации из любой части контекста.


2. Бенчмарк Needle in a Haystack (NIAH)

Needle in a Haystack (игла в стоге сена) — простой, но показательный тест. Идея: вставить один факт («иголку») в длинный нерелевантный текст («стог»), затем задать вопрос об этом факте.

Структура теста

  • Стог: синтетический текст (например, повторяющиеся предложения о Полане или выдержки из книг).
  • Иголка: одно предложение с уникальным фактом (например, «Любимый цвет Алисы — синий»).
  • Вопрос: «Какой любимый цвет Алисы?»
  • Параметры: длина контекста (от 1k до 128k/1M токенов) и позиция иголки (начало, середина, конец).

Метрика: recall — доля правильных ответов (или точное совпадение факта) для каждой комбинации длина × позиция. Обычно строят тепловую карту.

Интерпретация

  • Идеальная модель — зелёная карта (recall >95% везде).
  • Проблема lost in the middle — снижение recall при иголке в середине контекста.
  • Падение на больших длинах — ограничение модели.

Пример кода для запуска NIAH (упрощённо):

import numpy as np
from tqdm import tqdm

def run_needle_test(model, tokenizer, max_lengths, positions, needle, haystack_template):
    results = {}
    for length in tqdm(max_lengths):
        for pos in positions:
            haystack = haystack_template * (length // len(haystack_template))
            # Вставляем иголку на нужную позицию (в процентах от длины)
            insert_idx = int(len(haystack) * pos / 100)
            context = haystack[:insert_idx] + needle + haystack[insert_idx:]
            prompt = f"Контекст: {context}\nВопрос: {needle_question}"
            answer = model.generate(prompt)
            correct = check_answer(answer, needle_answer)
            results[(length, pos)] = correct
    return results

Ограничения NIAH

  • Только один факт, нет рассуждений.
  • Синтетический контекст — не отражает реальные документы.
  • Не проверяет множественные факты или логические цепочки.

3. Бенчмарк RULER (2025)

RULER (Reasoning with Long-context Evaluation and Retrieval) — более сложный бенчмарк, разработанный для преодоления ограничений NIAH. Включает несколько типов задач:

Тип задачиОписаниеПример
Single NeedleАналог NIAH, но с разными типами фактов (числа, имена, даты).«В каком году родился X?»
Multi NeedleНесколько фактов в разных позициях.«Перечисли все города, упомянутые в тексте».
Variable TrackingОтслеживание изменений переменной (например, счётчика).«Сколько раз встречается число 7?»
Common Word ExtractionИзвлечение часто встречающегося слова.«Какое слово самое частое?»
Question AnsweringВопросы по сюжету длинного рассказа.«Почему герой пошёл в лес?»

Метрики RULER

  • Accuracy для каждого подзадания.
  • Recall@k для задач извлечения.
  • F1 для QA.
  • Composite score — среднее по всем задачам.

Преимущества RULER

  • Проверяет не только извлечение, но и рассуждение.
  • Использует натуральные тексты (рассказы, статьи).
  • Масштабируется до 128k токенов.

Результаты (2025):

  • Лучшие модели (GPT-4, Claude 3.5) держат >90% accuracy до 64k, падение на 128k.
  • Модели с RoPE и YaRN (например, Llama 3.1 405B) показывают стабильность до 128k.

4. LongBench и другие бенчмарки

LongBench — набор из 21 задачи на длинный контекст (QA, summarization, few-shot learning). Длины от 5k до 15k токенов. Метрики: ROUGE, F1, accuracy. Позволяет сравнить модели на разнообразных сценариях.

ZeroSCROLLS — бенчмарк для оценки понимания длинных документов (книги, научные статьи). Включает задачи: извлечение, ответы на вопросы, реферирование.

SCROLLS — предшественник ZeroSCROLLS, но с меньшими длинами.

L-Eval — краудсорсинговый бенчмарк с реальными вопросами по длинным документам.

Сравнение бенчмарков

БенчмаркМакс. длинаТип контентаЗадачиМетрики
Needle in a Haystackдо 1M токеновСинтетическийИзвлечение одного фактаRecall
RULERдо 128kСмешанный (синт. + натур.)Извлечение, рассуждение, отслеживаниеAccuracy, F1
LongBenchдо 15kНатуральный (статьи, диалоги)QA, summarization, few-shotROUGE, F1
ZeroSCROLLSдо 100kКниги, научные статьиQA, извлечение, реферированиеF1, ROUGE

5. Как проводить тестирование: практические шаги

  1. Выбор бенчмарка:

    • Для быстрой проверки — NIAH (синтетика, легко интерпретировать).
    • Для детальной оценки — RULER (много задач).
    • Для реальных сценариев — LongBench или ZeroSCROLLS.
  2. Подготовка окружения:

    • Фиксируем длину контекста (например, 4k, 8k, 16k, 32k, 64k, 128k).
    • Для NIAH: выбираем 5-10 позиций иголки (0%, 25%, 50%, 75%, 100%).
    • Для RULER: используем официальный скрипт (github.com/hsiehjackson/RULER).
  3. Запуск:

    • Используем batch inference для ускорения.
    • Для каждой комбинации длина × позиция запускаем несколько прогонов (seed) для усреднения.
  4. Анализ:

    • Строим тепловую карту (ось X — длина, ось Y — позиция, цвет — recall).
    • Считаем средний recall по всем позициям для каждой длины.
    • Сравниваем с baseline (например, GPT-4).
  5. Интерпретация:

    • Если recall падает ниже 90% на длине 32k — модель плохо держит контекст.
    • Если падение только в середине — проблема lost in the middle (можно исправить изменением позиционирования в промпте).
    • Если recall падает равномерно — ограничение attention.

6. Ограничения и подводные камни

  • Синтетические данные не отражают реальную сложность (шумы, противоречия, многослойность).
  • Зависимость от промпта: формулировка вопроса сильно влияет на результат. Нужно стандартизировать.
  • Токенизация: разные модели по-разному считают токены (например, Llama 3 использует 128k токенов, но реальная длина может быть меньше из-за BPE).
  • Позиционное кодирование: модели с RoPE (Rotary Position Embedding) могут экстраполировать за пределы обученной длины, но с потерей качества.
  • Воспроизводимость: результаты могут меняться при изменении seed, температуры, top-p. Лучше использовать greedy decoding (temperature=0).

7. Как улучшить long-context performance модели

  • Position Interpolation (PI) — растягивание позиционных кодировок.
  • YaRN (Yet another RoPE extensioN) — улучшенная интерполяция с сохранением относительных расстояний.
  • LongLoRAfine-tuning с разреженным attention для длинных контекстов.
  • Ring Attention / FlashAttention-2 — эффективное вычисление attention для длинных последовательностей.
  • Agentic RAG — разбиение длинного контекста на части и итеративный поиск (но это уже не pure long-context, а обходное решение).

Пет-проект для закрепления

Задача: Реализовать автоматизированный тест long-context capability для выбранной open-source модели (например, Llama 3.1 8B) с использованием бенчмарка NIAH и визуализацией результатов.

Инструменты:

  • Python, Hugging Face Transformers, PyTorch.
  • Библиотеки: matplotlib, seaborn, tqdm.
  • Модель: meta-llama/Meta-Llama-3.1-8B-Instruct (или меньшая, если ограничены ресурсы).

Шаги:

  1. Сгенерировать синтетический «стог» (например, повторяющиеся предложения «The quick brown fox jumps over the lazy dog.»).
  2. Подготовить 10 иголок с разными фактами (числа, имена, цвета).
  3. Для каждой длины контекста (1k, 2k, 4k, 8k, 16k, 32k) и каждой позиции (0%, 25%, 50%, 75%, 100%) сгенерировать промпт и получить ответ модели.
  4. Проверить ответ на точное совпадение факта (или использовать LLM-as-judge для мягкой оценки).
  5. Построить тепловую карту recall.
  6. Сделать выводы: на какой длине модель начинает терять информацию, есть ли эффект lost in the middle.

Ожидаемый результат: Тепловая карта и отчёт с рекомендациями (например, «Модель стабильна до 8k, на 16k recall падает до 70% в середине контекста»).


Связь с другими вопросами

ВопросТема
5Оценка качества retrieval в RAG
2Проблема lost in the middle
3Стратегии chunking
10Self-RAG и когда использовать
1Проектирование RAG для 10k документов
7Уменьшение latency RAG

Навигация