Перейти к содержанию

Точность ответа (Answer Precision)

Метрика Answer Precision измеряет, насколько точно фактический ответ совпадает с эталонным (ожидаемым) ответом, используя исключительно алгоритмические методы -- без вызовов LLM. Это делает её самой быстрой и дешёвой метрикой в библиотеке.

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

Как это работает

Метрика объединяет пять подоценок с помощью взвешенного степенного среднего (weighted power mean):

graph TD
    A[Actual Output] --> C[1. Exact Match]
    B[Expected Output] --> C
    A --> D[2. Character Similarity]
    B --> D
    A --> E[3. Token Precision]
    B --> E
    A --> F[4. Numeric Agreement]
    B --> F
    A --> G[5. Token Containment]
    B --> G
    C --> H[Weighted Power Mean]
    D --> H
    E --> H
    F --> H
    G --> H
    H --> I[Final Score 0.0-1.0]

Компоненты подоценок

Каждая подоценка отвечает за определённый аспект совпадения:

Компонент Вес Описание
Exact Match 0.25 Бинарная оценка: 1.0, если выходы идентичны (без учёта регистра)
Character Similarity 0.25 Коэффициент сходства SequenceMatcher между строками
Token Precision 0.20 Коэффициент перекрытия множеств токенов
Numeric Agreement 0.15 Согласованность числовых значений (с допуском)
Token Containment 0.15 Доля ожидаемых токенов, содержащихся в фактическом ответе

Exact Match -- самый строгий компонент. Если ответы идентичны (после приведения к нижнему регистру), этот компонент равен 1.0, иначе 0.0.

Character Similarity использует алгоритм SequenceMatcher из стандартной библиотеки Python для вычисления посимвольного сходства строк. Учитывает порядок символов.

Token Precision разбивает оба текста на токены (слова), удаляет стоп-слова и вычисляет коэффициент перекрытия множеств. Не учитывает порядок слов.

Numeric Agreement извлекает числовые значения из обоих текстов и проверяет, совпадают ли они в пределах заданных допусков (абсолютного и относительного). Особенно полезно для финансовых и статистических данных.

Token Containment измеряет, какая доля токенов эталонного ответа присутствует в фактическом ответе. Помогает обнаружить ситуации, когда ответ содержит все нужные слова, но с дополнительным шумом.

Параметры

Параметр Тип По умолчанию Описание
threshold float 0.6 Минимальный балл для прохождения теста
token_stopwords set Английские стоп-слова Слова, игнорируемые при сравнении токенов
numeric_tolerance_abs float 0.01 Абсолютный допуск для числовых сравнений
numeric_tolerance_rel float 0.05 Относительный допуск для числовых сравнений
power_p float 0.3 Показатель степенного среднего

Параметр power_p управляет тем, как подоценки объединяются. При power_p < 1 результат смещается в сторону наименьших подоценок (более строгая оценка). При power_p > 1 -- в сторону наибольших (более лояльная). Значение 0.3 по умолчанию делает метрику достаточно строгой: если хотя бы один аспект совпадения низкий, общий балл снижается.

Обязательные поля

Поле Обязательно
input Да
actual_output Да
expected_output Да

Требуется эталонный ответ

В отличие от большинства метрик, Answer Precision требует expected_output, поскольку напрямую сравнивает фактический и ожидаемый ответы.

Использование

from eval_lib import AnswerPrecisionMetric, EvalTestCase, evaluate
import asyncio

test_case = EvalTestCase(
    input="What is 2 + 2?",
    actual_output="The answer is 4.",
    expected_output="4"
)

metric = AnswerPrecisionMetric(threshold=0.6)

results = asyncio.run(evaluate([test_case], [metric]))

Стоимость

0 вызовов LLM API -- метрика полностью алгоритмическая, что делает её самой быстрой и дешёвой из всех доступных метрик. Идеально подходит для CI/CD пайплайнов и регрессионного тестирования.

Лучшие сценарии использования

  • Фактологические вопросы-ответы, где ответы имеют чёткие ожидаемые значения
  • Числовые задачи (финансовые расчёты, статистика) -- благодаря компоненту Numeric Agreement
  • Задачи классификации, где ответ должен совпадать с меткой
  • Регрессионное тестирование -- быстрая детерминированная оценка без зависимости от внешних API
  • CI/CD пайплайны, где важна скорость и стабильность результатов

Практические советы

  1. Настройте стоп-слова для вашего языка, если вы работаете не с английскими текстами. По умолчанию используются английские стоп-слова.
  2. Увеличьте числовые допуски (numeric_tolerance_abs, numeric_tolerance_rel), если ваша задача допускает приблизительные числовые ответы.
  3. Используйте совместно с Answer Relevancy для полной картины: Answer Precision проверяет формальное совпадение, а Answer Relevancy -- семантическую релевантность.