Хотел. Достать ступени обучения из текстов школьных сайтов и не получить от модели ни одного выдуманного факта. Замок простой и механический: к каждому утверждению модель обязана приложить дословную цитату, а код проверяет, что эта цитата в исходном тексте действительно есть — посимвольно. Модель локальная, схема ответа строгая, температура 0.
Споткнулся. Проверка проходила, а факты были неверные. «Начальная школа» приехала подтверждённая цитатой «Информатика» — честно скопированной из текста, буква в букву.
Требование цитаты доказывает ровно одно: модель не сочинила текст. Доказывает ли этот текст само утверждение, оно не говорит вовсе, и я этого не замечал, потому что смотрел на процент прошедших проверку.
Решил. Второй замок: цитата обязана называть то, что подтверждает. И две доменные поправки, которые из общего принципа не выводятся — курс подготовки к ступени не есть сама ступень, а профобучение по специальности воспитателя не есть детский сад при школе.
На выборке в 150 школ первый замок отсёк 17 цитат, которых в тексте не было. Второй — 103, и вот тут интересное: 26 из них оказались верными. Школа называла профобучение видом «Техник по …», словарь такого названия не знал, и словарь пришлось расширять. Третий и четвёртый замки ловят по одному случаю каждый — но ловят, и я их оставил.
Чем плачу. Словарём названий, который ведёшь руками: каждое новое название ступени — правка в коде, а не в данных. И верными фактами, которые второй замок выбрасывает вместе с мусором — там, где школа называет ступень не теми словами, факт уходит в отсев.
Замер. Полный прогон — 1 993 школы, 8,5 часа: ступени подтверждены у 675, это 34 %, всего 1 730 значений. В отсеве 1 181 «цитата не называет ступень» и 241 «цитаты нет в тексте».
#агенты