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

Reference Match

Метрика Reference Match вычисляет сходство эмбеддингов между actual_output и списком референсных текстов. Итоговый балл агрегируется с использованием максимального или среднего сходства по всем референсам. LLM-модель не требуется.

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

graph TD
    A[actual_output] --> B[1. Генерация эмбеддинга]
    C[references] --> D[2. Генерация эмбеддингов]
    B --> E[3. Косинусное сходство для каждого референса]
    D --> E
    E --> F[4. Агрегация: max или mean]
    F --> G[Итоговый балл 0.0-1.0]
  1. Эмбеддинг фактического выхода — преобразует actual_output в векторное представление
  2. Эмбеддинги референсов — преобразует каждый референсный текст в векторное представление
  3. Попарное сходство — вычисляет косинусное сходство между actual_output и каждым референсом
  4. Агрегация — берет max или mean всех баллов сходства

Параметры

Параметр Тип По умолчанию Описание
threshold float 0.7 Минимальный балл для прохождения
references list[str] обязательный Список референсных текстов для сравнения
aggregation str "max" Стратегия агрегации ("max" или "mean")
embedding_provider str "openai" Провайдер эмбеддингов ("openai" или "local")
model_name str по умолчанию провайдера Название модели эмбеддингов

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

Поле Обязательно
actual_output Да
references Да (через параметр)
input Нет
expected_output Нет

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

from eval_lib.metrics.vector_metrics import ReferenceMatchMetric
from eval_lib import EvalTestCase, evaluate
import asyncio

test_case = EvalTestCase(
    actual_output="Столица Франции — Париж, расположенный на берегу Сены."
)

metric = ReferenceMatchMetric(
    threshold=0.75,
    references=[
        "Париж — столица и крупнейший город Франции.",
        "Столицей Франции является Париж.",
        "Париж, расположенный на Сене, является столицей Франции."
    ],
    aggregation="max",
    embedding_provider="openai"
)

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

Стратегии агрегации

"max" (по умолчанию)

Возвращает наивысший балл сходства среди всех референсов. Используйте, когда достаточно совпадения хотя бы с одним референсом.

"mean"

Возвращает средний балл сходства по всем референсам. Используйте, когда выход должен быть согласован со всеми референсами.

Стоимость

1 вызов API эмбеддингов на оценку (все тексты объединяются в один запрос).

Примеры

Высокий балл (0.90+)

metric = ReferenceMatchMetric(
    references=[
        "Для сброса пароля перейдите в Настройки.",
        "Перейдите в Настройки > Безопасность для смены пароля."
    ],
    aggregation="max"
)
EvalTestCase(
    actual_output="Перейдите в Настройки > Безопасность, чтобы сбросить пароль."
)
# Высокое сходство хотя бы с одним референсом

Низкий балл (< 0.5)

metric = ReferenceMatchMetric(
    references=[
        "Для сброса пароля перейдите в Настройки.",
        "Перейдите в Настройки > Безопасность для смены пароля."
    ],
    aggregation="mean"
)
EvalTestCase(
    actual_output="Наша компания была основана в 2020 году и базируется в Сан-Франциско."
)
# Нет семантического пересечения ни с одним референсом