Офлайн-оценка ответов LLM: задача на Python
Реализуйте проверку ответов нескольких типов по заданным правилам. Формат данных и способы сравнения приведены в условии, поэтому результат можно проверить без запросов к модели.
Напишите код и проверьте решение. Продолжить тему можно в курсе LLMOps & Evaluation: из песочницы в продакшн.
Задача: офлайн-оценка ответов модели (текст/JSON/числа)
Нужно агрегировать метрики качества по датасету смешанных типов.
Формат ввода
Первая строка: два значения через пробел
N eps — количество примеров N (1..5000) и допуск для чисел eps (вещественное).
Далее N строк вида
TYPE|REF|PRED
где TYPE ∈ {TEXT, JSON, NUM}. Символ | используется только как разделитель (внутри REF/PRED он не встречается).
Правила оценки:
-
TEXT
exact:PRED==REFпосле.strip()(регистрозависимо).
contains:REF(в нижнем регистре) является подстрокойPRED(в нижнем регистре). -
JSON
json_valid:PRED— валидный JSON (json.loadsуспешно).
json_exact: равенство структурjson.loads(REF)иjson.loads(PRED)(словарям порядок ключей не важен). -
NUM
num_within: еслиREF≠0:|PRED−REF|/|REF| ≤ eps, иначе|PRED| ≤ eps.
ЕслиPREDне число —False.
Формат вывода
Ровно одна минифицированная JSON-строка с полями в указанном порядке:
{"exact":<num>,"contains":<num>,"json_valid":<num>,"json_exact":<num>,"num_within":<num>,"macro":<num>}
Где каждое значение — доля от 0 до 1, округлённая до 6 знаков (округление математическое), с усечением лишних нулей (например, 0.666667, 0.5, 1.0, 0).
Если в датасете нет примеров соответствующего типа, для метрики вывести 0.
macro — доля «пройденных» примеров среди всех:
-
TEXT:
exact OR contains -
JSON:
json_valid AND json_exact -
NUM:
num_within
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
