Post content
В продолжение предыдущего поста поговорим о второй новизне, а именно использовании SORM для дообучения модели исправлять свои ошибки. Делать это авторы учат в двух вариантах: Global и Local Refinement. Global Refinement — умение модели сгенерировать ответ заново, когда мы получили неправильный результат. Авторы собрали множество триплетов (вопрос, плохая генерация, хорошая генерация) и учили предсказывать правильный ответ по префиксу вида “{вопрос} [BAD] {плохая генерация}”, то есть модель может посмотреть на предыдущие свои рассуждения и уже не делать каких-то ошибок. Local Refinement — умение исправлять ситуацию на ходу, когда конкретное действие получило низкую оценку от SORM. Тут методика сбора данных чуть посложнее, ведь нам нужна траектория вплоть до плохого действия, а также хорошее решение из состояния до этого действия. Что нужно для этого сделать? Допустим, у нас есть траектория из нескольких шагов (S1, S2, S3, S4) с пометкой, что S3 — плохое действие. В таком случае мы делаем множество запусков из S2 до тех пор пока не получим правильное решение, берем какое-то из них, например, (S1, S2, S3*, S4*, S5*) и формируем датасет таким образом: “{вопрос} S1 S2 [BAD] S3 S3* S4* S5*”. В такой постановке мы учимся предсказывать только исправленное решение, то есть S3*, S4*, S5*. Дополнительный вывод такой: оба способа дополняют друг друга и для лучшего качества их нужно использовать вместе. На инференсе мы можем подобрать пороги для SORM/ORM, чтобы определять ситуации, когда нужно проставить метку [BAD], тем самым провоцируя модель на повторную попытку решения.