Как вы оцениваете faithfulness без ground truth (если нет правильного ответа)?

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

Оценка faithfulness (верности фактам) без эталонного ответа — ключевая задача для RAG-систем в продакшене, где размеченные данные отсутствуют. Основные подходы: self-check (LLM проверяет свой ответ), NLI-модели (проверка логического следования), RAGAS (автоматическая генерация вопросов) и human-in-the-loop (выборочная Review|ручная проверка). Каждый метод имеет компромиссы между точностью, стоимостью и автоматизацией; на практике часто комбинируют несколько подходов.


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

Faithfulness — мера того, насколько сгенерированный ответ соответствует предоставленному контексту (документам, retrieved chunks). В RAG это критично: LLM может «галлюцинировать» (добавлять факты, которых нет в контексте) или искажать информацию. Оценка faithfulness без ground truth (эталонного ответа) означает, что у нас нет заранее известного правильного ответа — мы проверяем только согласованность ответа с контекстом.

Почему это сложно

  • Нет «золотого стандарта» для сравнения.
  • LLM может дать правдоподобный, но неверный ответ.
  • Контекст может быть противоречивым или неполным.

2. Self-check (самопроверка LLM)

Self-check — метод, при котором та же LLM (или другая) оценивает свой ответ на соответствие контексту. Обычно это делается через prompt engineering: модель просят ответить «Yes»/«No» и указать confidence (уверенность).

Пример промпта

Context: {context}
Answer: {answer}
Is the answer fully supported by the context? Respond with "Yes" or "No" and a confidence score (0-1).

Плюсы

  • Не требует внешних моделей или разметки.
  • Быстро и дёшево.

Минусы

  • LLM может быть необъективна (склонна подтверждать свой ответ).
  • Зависит от качества промпта и модели.

Метрика доля ответов, где LLM сказала «Yes» с высокой уверенностью (>0.9). Но это лишь прокси, так как модель может ошибаться.


3. NLI models (Natural Language Inference)

NLI — задача определения логической связи между двумя текстами: entailment (следует), contradiction (противоречит) или neutral (нейтрально). Для оценки faithfulness берут пару (контекст, ответ) и проверяют, следует ли ответ из контекста.

Популярные модели DeBERTa-NLI, BART-NLI, T5-NLI. Они обучены на датасетах вроде SNLI, MNLI.

Пример использования (Python с Hugging Face):

from transformers import pipeline
nli = pipeline("text-classification", model="microsoft/deberta-large-mnli")
result = nli(f"Context: {context} Answer: {answer}")
# result: {'label': 'ENTAILMENT', 'score': 0.98}

Плюсы

  • Независимая оценка, не зависит от генерации.
  • Хорошо работает на коротких текстах.

Минусы

  • Модели могут плохо обрабатывать длинные контексты.
  • Чувствительны к формулировкам.

Сравнение self-check vs NLI

КритерийSelf-checkNLI
Зависимость от генерацииДа (та же модель)Нет
ТочностьСредняя (смещение)Высокая (обучена)
СкоростьБыстроМедленнее (требует GPU)
ИнтерпретируемостьНизкаяВысокая (entailment/contradiction)

4. RAGAS faithfulness metric

RAGAS — библиотека для автоматической оценки RAG-систем. Её метрика faithfulness работает без ground truth через генерацию вопросов.

Алгоритм

  1. Из ответа LLM извлекаются утверждения (claims).
  2. Для каждого утверждения генерируется вопрос (через LLM).
  3. Вопрос задаётся к контексту, и проверяется, можно ли на него ответить, используя только контекст.
  4. Faithfulness = доля утверждений, на которые можно ответить по контексту.

Формула (упрощённо):

faithfulness = (число supported claims) / (общее число claims)

Пример кода

from ragas import evaluate
from ragas.metrics import faithfulness

dataset = ...  # ваш датасет с контекстом и ответами
score = evaluate(dataset, metrics=[faithfulness])
print(score['faithfulness'])

Плюсы

  • Полностью автоматизировано.
  • Не требует эталонов.

Минусы

  • Зависит от качества генерации вопросов (LLM может сгенерировать плохой вопрос).
  • Дороже, чем self-check (много вызовов LLM).

5. Human-in-the-loop (человек в цикле)

Human-in-the-loop — выборочная ручная проверка ответов. Обычно семплируют 5–10% всех ответов и просят аннотаторов оценить faithfulness по шкале (например, 1–5).

Метрики:

  • Cohen's kappa — согласие между аннотаторами.
  • Accuracy — доля ответов, признанных верными.

Когда использовать

  • Для валидации автоматических метрик.
  • При высоких требованиях к качеству (медицина, юриспруденция).
  • Для сбора данных для fine-tuning NLI-модели.

Плюсы

  • Самый надёжный метод.
  • Позволяет выявить тонкие ошибки.

Минусы

  • Дорого и медленно.
  • Не масштабируется.

6. Комбинированный подход (Ensemble)

На практике часто комбинируют методы для повышения надёжности:

  • Self-check как быстрый фильтр (отсекает явные галлюцинации).
  • NLI для более точной проверки оставшихся ответов.
  • RAGAS для периодического аудита.
  • Human-in-the-loop для калибровки и валидации.

Пример пайплайна

def faithfulness_score(context, answer):
    # 1. Self-check
    if self_check(context, answer)['confidence'] < 0.8:
        return 0.0
    # 2. NLI
    nli_result = nli_pipeline(f"Context: {context} Answer: {answer}")
    if nli_result['label'] == 'CONTRADICTION':
        return 0.3
    elif nli_result['label'] == 'NEUTRAL':
        return 0.6
    else:
        return 1.0

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

  • Self-check может давать ложные срабатывания (LLM считает ответ верным, хотя он неверен).
  • NLI-модели могут путать entailment с нейтральным, если контекст длинный или содержит много деталей.
  • RAGAS требует много вызовов LLM (дорого) и может пропускать тонкие искажения.
  • Human-in-the-loop страдает от субъективности и усталости аннотаторов.

Рекомендация не полагаться на один метод; использовать как минимум два автоматических + периодическую ручную проверку.


8. Практические советы для собеседования

  • Начните с определения faithfulness и почему это важно.
  • Упомяните trade-off между автоматизацией и точностью.
  • Приведите пример кода для NLI или RAGAS.
  • Обсудите, когда какой метод выбирать: для быстрого прототипа — self-check, для продакшена — NLI + RAGAS, для критических систем — human-in-the-loop.
  • Свяжите с другими темами оценка retrieval, Self-RAG, LLM-as-a-judge.

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

Задача Реализовать пайплайн оценки faithfulness для RAG-системы без ground truth.

Инструменты

Шаги:

  1. Соберите датасет из 100 пар (контекст, ответ) от вашей RAG-системы.
  2. Реализуйте три модуля: self-check (через LLM), NLI (через DeBERTa), RAGAS.
  3. Сравните результаты: постройте confusion matrix между методами.
  4. Выберите 20 примеров, где методы расходятся, и отдайте на ручную проверку.
  5. Посчитайте корреляцию каждого метода с human judgement (Spearman).

Ожидаемый результат

  • Таблица с точностью каждого метода относительно human evaluation.
  • Вывод о том, какой метод лучше всего подходит для вашего сценария.

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

ВопросТема
5Оценка retrieval (без ground truth)
10Self-RAG (внутренняя проверка)
15RAGAS метрики
20Human-in-the-loop
25LLM как судья

Навигация