English translation is not available yet. Showing Russian content.

Как измерять faithfulness для long-form ответов (1000+ токенов)?

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

Faithfulness (правдивость) в RAG — это степень, в которой сгенерированный ответ опирается на предоставленный контекст, а не содержит галлюцинаций. Для длинных ответов (1000+ токенов) простая метрика всего ответа недостаточна: нужна гранулярная оценка каждого утверждения. Основные подходы: Sentence-level NLI, Claim extraction, Semantic similarity и QA-based верификация. Наиболее надёжны комбинации методов, автоматизируемые через инструменты вроде RAGAS и ALCE.


1. Термин: Faithfulness (правдивость) в контексте RAG

Что это: свойство ответа LLM быть «верным» по отношению к переданному контексту (документам, извлечённым retrieval-модулем). Ответ не должен содержать фактов, отсутствующих в контексте, или искажать их.

Почему важно: галлюцинации (hallucinations) — главная проблема RAG. Без faithfulness даже идеальный retrieval не даст качественного ответа. Для long-form ответов (например, суммаризация статьи, многостраничный отчет) риск частичных галлюцинаций кратно выше, так как LLM может «додумать» детали в процессе генерации.

Термин Long-form ответ: текст длиной от 1000 токенов (примерно 750 слов), часто содержащий несколько абзацев и множество фактов.


2. Проблема измерения faithfulness для long-form

АспектПроблемаСледствие
Масштаб1000+ токенов → много отдельных фактовНужна гранулярная проверка каждого факта
Частичные галлюцинацииОдно предложение может быть частично невернымПростая бинарная метрика (правда/ложь) не работает
КомпозициональностьLLM может перекомбинировать факты из разных мест контекстаНужно проверять не только факты по отдельности, но и их связи
Зашумлённость контекстаКонтекст часто содержит избыточные или нерелевантные чанкиМетрика должна отличать опору на релевантную часть контекста

По этим причинам метрики на уровне всего ответа (например, BLEU, ROUGE) не подходят: они не улавливают галлюцинации, если лексика похожа.


3. Подход 1: Sentence-level NLI (Natural Language Inference)

Идея: разбить ответ на отдельные предложения, для каждого определить отношение к контексту: entailment (следует), contradiction (противоречит) или neutral (нейтрально). Faithfulness = доля предложений с entailment.

Реализация

from transformers import pipeline
nli = pipeline("text-classification", model="MoritzLaurer/DeBERTa-v3-base-mnli-fever-docnli")
# Пример: ответ разбит на предложения spacy или nltk
sentences = ["The capital of France is Paris.", "The population is 2 million."]
context = "Paris is the capital of France with a population of over 2 million."

results = []
for sent in sentences:
    pred = nli(f"{context} </s> {sent}")[0]
    results.append(pred['label'])  # 'ENTAILMENT', 'CONTRADICTION', 'NEUTRAL'
faithfulness = sum(1 for r in results if r == 'ENTAILMENT') / len(results)

Плюсы простая реализация, детерминированно.
Минусы NLI-модели часто не масштабируются на длинные контексты (ограничение 512 токенов); одно предложение может содержать несколько фактов — entailment одного факта не гарантирует истинности другого.


4. Подход 2: Claim Extraction (извлечение утверждений)

Идея: разбить ответ не на предложения, а на атомарные утверждения (claims) — законченные фактические высказывания. Затем каждое утверждение верифицировать по контексту (можно снова через NLI или LLM-as-a-judge).

Пример извлечения утверждений (через LLM-промпт):

Prompt: "Разбей следующий текст на отдельные фактические утверждения. Каждое утверждение должно быть одним простым предложением, содержащим ровно один факт. Ответь списком, каждое утверждение с новой строки."

Метрики:

  • Precision (точность): доля утверждений, поддерживаемых контекстом, среди всех извлечённых утверждений.
  • Recall (полнота): доля утверждений, поддерживаемых контекстом, среди всех утверждений, которые должны быть в ответе (золотой стандарт).
  • F1 — гармоническое среднее.

Плюсы гранулярность, улавливает частичные галлюцинации.
Минусы требует хорошего экстрактора утверждений (часто LLM), дороже по вычислительным ресурсам.


5. Подход 3: Semantic Similarity (семантическая близость)

Идея: вычислить косинусную близость между эмбеддингом всего ответа и эмбеддингом контекста (или его объединения). Если ответ семантически близок к контексту, faithfulness считается высокой.

Реализация

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
answer_emb = model.encode(answer_text)
context_emb = model.encode(context_text)
similarity = cosine_similarity([answer_emb], [context_emb])[0][0]

Плюсы быстро, не требует разбивки.
Минусы очень грубая метрика — ответ может быть семантически похожим, но содержать неверные детали. Не улавливает частичные галлюцинации. Полезна только как быстрый фильтр.


6. Подход 4: QA-based (вопросно-ответный)

Идея: сгенерировать вопросы из ответа (question generation), затем с помощью extractive QA модели (или LLM) проверить, можно ли извлечь ответ на каждый вопрос из контекста. Если вопрос сформулирован корректно и контекст содержит ответ, то факт считается истинным.

Pipeline

  1. Из ответа генерируются вопросы (обратная генерация).
  2. Каждый вопрос задаётся к контексту.
  3. Если модель QA находит ответ в контексте (с достаточной уверенностью), факт считается подтверждённым.

Метрика Answer Recall = доля вопросов, на которые найден ответ в контексте.

Пример через RAGAS

from ragas.metrics import Faithfulness
faithfulness = Faithfulness()
score = faithfulness.score(dataset)  # автоматически использует QA-based подход

Плюсы автоматически генерирует проверки, не требует ручной разметки.
Минусы качество зависит от модели QG (question generation) и QA; вопросы могут быть сформулированы неточно, пропуская часть фактов.


7. Сравнительная таблица подходов

ПодходГранулярностьВычислительная стоимостьТочность выявления галлюцинацийЗависимость от моделиАвтоматизация
Sentence-level NLIСредняя (предложения)Низкая (одна forward pass на предложение)Средняя (не улавливает частичные галлюцинации внутри предложения)NLI-модель (дообученная на противоречиях)Полная
Claim extractionВысокая (атомарные утверждения)Высокая (LLM для извлечения + верификация)ВысокаяLLM для извлечения, NLI/LLM для верификацииПолная (но сложная настройка)
Semantic similarityНизкая (весь ответ)Очень низкаяНизкаяЭмбеддинговая модельПолная
QA-basedВысокая (каждый сгенерированный вопрос)Высокая (QA-модель для каждого вопроса)Высокая (при хорошей QG)Модели QG и QAПолная (RAGAS)

8. Инструменты и бенчмарки

  • RAGAS — библиотека для оценки RAG. Метрика faithfulness реализована через QA-based подход (генерация вопросов + проверка). Можно расширить для long-form, увеличив количество генерируемых вопросов.
  • ALCE (Automatic Long-form Evaluation) — бенчмарк с датасетами ASQA (ответы на вопросы по статьям) и QAMPARI (множественные факты). Включает метрики faithfulness на уровне фактов.
  • DeepEval — платформа с ready-to-use метриками (Faithfulness, Hallucination). Использует LLM-as-a-judge.
  • TruLens — библиотека для observability RAG, позволяет задавать кастомные промпты для проверки faithfulness.

Рекомендация для long-form использовать RAGAS с модификацией — разбить ответ на смысловые блоки (по 500–1000 токенов) и оценивать faithfulness на каждом блоке отдельно, затем агрегировать (например, среднее или минимальная оценка).


9. Best practices и компромиссы

  1. Комбинируйте подходы используйте Claim extraction для точной оценки, а Semantic similarity как быстрый отбор аномалий.
  2. LLM-as-a-judge: задайте LLM промпт, в котором просите проверить каждое утверждение из ответа по контексту, выставляя 0/1. Это может быть точнее специализированных NLI-моделей, но дороже.
  3. Человеческая оценка как золотой стандарт для сбора метрик на тестовой выборке привлеките аннотаторов. Разметьте, какие факты в ответе верны относительно контекста.
  4. Агрегация для long-form используйте взвешенное среднее по длине утверждений, чтобы длинные фразы не игнорировались.
  5. Учитывайте релевантность контекста если контекст сам содержит противоречия или шум, faithfulness может быть несправедливо низким. В таком случае добавьте метрику context relevance.

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

Задача Реализовать сравнительный анализ методов оценки faithfulness на датасете long-form RAG ответов.

Инструменты Python, LangChain, RAGAS, Hugging Face Transformers (NLI модель MoritzLaurer/DeBERTa-v3-base-mnli-fever-docnli), OpenAI API (или локальная LLM для claim extraction).

Шаги:

  1. Собрать датасет (например, подмножество ASQA или сгенерировать вопросы к статьям из Wikipedia с помощью LLM).
  2. Для каждого запроса получить retrieval (например, через Chroma) и сгенерировать ответ (GPT-4 или local) длиной 1000–1500 токенов.
  3. Применить три подхода: Sentence-level NLI, Claim extraction (с LLM-extraction и NLI-верификацией), QA-based (через RAGAS).
  4. Сравнить метрики: доля выявленных галлюцинаций, время выполнения, корреляция с человеческой оценкой (привлеките 2–3 коллег для разметки 50 примеров).
  5. Построить таблицу результатов и сделать выводы: какой метод лучше подходит для long-form, какова точность каждого.

Ожидаемый результат Получите практический опыт оценки faithfulness, поймёте сильные и слабые стороны каждого метода, сможете обоснованно выбирать подход для production RAG.


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

ВопросТема
870Что такое Agentic RAG
872Как строить multi-step RAG пайплайны
873Routing и выбор источников в Agentic RAG
875Использование инструментов (tool use) в RAG
877Планирование (planning) действий агента
879Как оценивать cost длинных RAG-пайплайнов

Эти вопросы охватывают смежные аспекты Agentic RAG: от общей архитектуры до измерения стоимости и качества.


Навигация