tgoop.com/plush_python/41
Last Update:
Как правильно оценивать чатбота-"болталку"?
#ml
На работе мы делаем, в числе прочего, чатбота, который должен уметь поддержать разговор с пользователем на любую (приличную) тему, да так, чтобы непотребного чего-нибудь не ляпнул. С подобными чатботами есть известная проблема - автоматически оценить их качество не очень получается, нужна экспертная - то есть человеческая - оценка. А как её делать эффективно и результативно?
Первое соображение - "болталку" нужно оценивать по достаточно большому количеству примеров. Ещё хорошо, если ответы нашего бота будут случайно перемешаны с ответами других ботов и даже людей. Мы при обучении новой модели отдаём на оценку качества около полутора тысяч её ответов в разных контекстах (причём контексты разной длины). Ну, а чтобы не слишком уж полагаться на отдельно взятого эксперта - мало ли, не с той ноги сегодня встал(а), - делаем оценку с перекрытием. Каждый ответ модели оценивают три эксперта, независимо друг от друга.
Оценка тоже не самая простая. Чем чётче обозначены критерии, тем легче будет работа разметчиков, а значит, тем надёжнее результаты. Есть разные методики оценки, в их числе sensibleness and specificity average (SSA), которую разработали исследователи из Google. Она довольно проста и эффективна: оценивают разумность и специфичность ответов бота. Вот тут можно подробнее прочитать, но если вкратце, разумность - это про адекватность ответов, отсутствие в них бреда и оскорблений, например. Специфичность интереснее: ответы бота не должны быть слишком односложными, короткими, "на все случаи жизни". Простой пример:
Пользователь: У моего сына сегодня день рождения.
Бот А: Отличная песня!
Данный ответ не имеет смысла в этом контексте, поэтому он получает оценку 0 за разумность. Если за разумность 0, то и за специфичность автоматически тоже 0.
Бот Б: Понятно.
Данный ответ, в целом, разумен, но не специфичен, много на что можно сказать "понятно", но развитию темы это не способствует. Поэтому оценки 1 и 0, соответственно.
Бот В: Поздравляю от всей цифровой души. А сколько лет вашему сыну исполняется?
А вот это уже и разумный, и специфичный ответ. Да ещё и с юмором. Кстати, реальный ответ нашего бота. Вот бы он всегда так хорошо отвечал)
Мы добавили к SSA ещё пару дополнительных критериев, важных для бизнес-задачи. Итак, у нас есть оценки от трёх разметчиков по четырём параметрам. Что дальше? Имеет смысл также измерить согласие между аннотаторами. Каппа Коэна - отличная метрика, которую очень легко посчитать с помощью библиотеки scikit-learn. Она лучше, чем просто усреднение ответов разметчиков, потому что учитывает вероятность случайного совпадения. Другими словами, если у вас всего два возможных класса (0 и 1) и их распределение неравномерно, то вероятность случайного совпадения оценок гораздо выше, чем если бы классов было 15 и они встречались бы примерно с одинаковой частотой.
Каппа Коэна считается для каждой пары аннотаторов, благодаря чему мы можем увидеть, например, что ответы одного из разметчиков сильно отличаются от ответов двух других. Это может говорить о том, что данный эксперт не так понял задачу и его следует проинструктировать ещё раз. Или возможна ситуация, когда у всех троих разметчиков очень разные оценки по одному из критериев - тогда, возможно, данный критерий стоит сформулировать более понятно.
BY Плюшевый Питон
Share with your friend now:
tgoop.com/plush_python/41