Chain-of-Though промптинг - популярный способ заставить LLM делать что-то осмысленное, заставляя его "думать" пошагово и выводить промежуточные шаги размышления. Можно закидывать вместе с вопросом несколько примеров вопросов и шагов размышления, а можно просто нагло заявить "Let's think step by step." (что называется Zero-shot CoT prompting).
Способ с примерами, понятное дело, работает в среднем лучше. Авторы статьи решили скрестить эти два подхода: они генерируют "шаги рассуждений" вместе с финальным ответом с помощью Zero-Shot prompting, а потом скармливают несколько таких вопросов с рассуждениями в качестве примеров, как надо LLM рассуждать, задавая новый вопрос.
При этом, что удивительно, оказалось, что если подобрать вопросы, семантически схожие с интересующим нас, для помещения примеров рассуждений в CoT промпт, результаты оказываются хуже, чем если выбрать их случайным образом. Получается, для похожих примеров образуются похожие ошибки и если, наоборот, подобрать разнообразные, то вероятность получить хорошие примеры, из которых можно делать выводы - больше.
В конце концов авторы решили повысить разнообразие примеров, разбив их на кластеры согласно эмбеддингам вопросов и выбрав по одному из каждого кластера, поближе к центроиду, и вышло ещё лучше.
На закуску они добавили алгоритм поэтапного бутстрапинга этого списка примеров по мере расширения списка вопросов - сначала тупо использовать все имеющиеся, потом добавлять новые вопросы, кластеризовать и брать ближе к центроидам.
P.S.: От меня: ещё можно было бы делать поиск наиболее перспективного набора примеров для конкретного датасета при помощи какого-то из алгоритмов эволюционной оптимизации - например, simulated annealing или genetic algorithm. И посмотреть, как оно будет работать на withheld подмножестве вопросов.
#ml #llm #chain_of_though #llm_reasoning #prompt_engineering