Чарльз Кутчене
Университет Аалто, Эспоо, Финляндия
charles.koutchenne@aalto.fi
Большие языковые модели (LLM), такие как GPT-4, проявили себя как многообещающие инструменты для предоставления обратной связи по программированию. Однако эффективное развертывание LLM в массовых классах и массовых открытых онлайн-курсах (МООК) вызывает финансовые опасения, что требует разработки методов для минимизации количества вызовов к API и системам, обслуживающим такие мощные модели. В этой статье мы возвращаемся к проблеме «распространения обратной связи» в современных условиях, когда обратная связь генерируется LLM. В частности, мы исследуем распространение обратной связи как способ снижения стоимости использования LLM для предоставления обратной связи по программированию в масштабе. Наше исследование изучает эффективность этого подхода в контексте студентов, которым требуются подсказки о следующем шаге для задач по программированию на Python, представляя первоначальные результаты, подтверждающие жизнеспособность подхода. Мы обсуждаем последствия наших выводов и предлагаем направления для будущих исследований по оптимизации механизмов обратной связи для крупномасштабных образовательных сред.
большие языковые модели, обратная связь по программированию, образование в области компьютерных наук
Чарльз Кутчене и Арто Хеллас. 2024. Распространение обратной связи по программированию от больших языковых моделей. В Трудах Одиннадцатой ACM Конференции по Обучению @ Scale (L@S '24), 18--20 июля 2024, Атланта, Джорджия, США. ACM, Нью-Йорк, Нью-Йорк, США, 5 страниц. https://doi.org/10.1145/3657604.3664665
Появление таких систем, как ChatGPT, основанных на мощных больших языковых моделях (LLM), радикально изменило образовательный ландшафт преподавания программирования и подход к поддержке студентов [6]. Передовые LLM, такие как GPT-4, продемонстрировали впечатляющие результаты в поддержке студентов, обучающихся программированию, даже выступая в роли автономных масштабируемых помощников преподавателей (ТА), почти соответствуя производительности человеческих ТА [31]. Эти наблюдения привели к успешному развертыванию LLM в крупномасштабных курсах в высших учебных заведениях, таких как Гарвард [26], и на массовых онлайн-платформах обучения, таких как KhanAcademy [1].
Однако, хотя человеческий труд можно сократить или перенаправить благодаря использованию этих технологий, возникает другая проблема — проблема финансовых затрат. Действительно, отправка запросов к таким системам, как ChatGPT, через платные API компаний-разработчиков может повлечь за собой значительные финансовые расходы. Эта проблема особенно актуальна для крупных курсов, где тысячи студентов взаимодействуют с ИИ-ассистентами. Тем не менее, не все образовательные команды обладают финансовыми возможностями для использования таких технологий.
Открытые языковые модели были предложены в качестве альтернативного решения [18]. Хотя их использование рассматривалось в теории [12, 20], насколько нам известно, на практике их применение не изучалось. Развертывание открытых LLM не так просто, как использование готовых сторонних API. Кроме того, открытые LLM еще не достигли производительности передовых систем, таких как GPT-4.
Учитывая желание использовать платные системы, возникает важный вопрос: как минимизировать количество запросов к таким системам для снижения затрат. До появления мощных языковых моделей методы автоматической генерации обратной связи эффективно использовали техники распространения. Методы распространения обратной связи [3, 8, 17, 21, 33] позволяли преподавателям выбирать экземпляры работ студентов (например, несколько эссе) для аннотирования, чтобы их аннотации могли быть эффективно присвоены другим похожим решениям. Этот подход оказался успешным во многих образовательных областях, включая предоставление обратной связи по программированию [8, 17, 33].
В этой статье мы возвращаемся к проблеме распространения обратной связи по программированию в современном контексте, где обратная связь генерируется мощными LLM, такими как GPT-4. Наш общий исследовательский вопрос: Какова эффективность методов распространения в снижении стоимости предоставления высококачественной обратной связи по программированию, генерируемой большими языковыми моделями? В этой работе мы изучаем, в какой степени подсказки о следующем шаге [30, 35], сгенерированные GPT-4, могут быть распространены на реальные ответы студентов на задачи по программированию.
Распространение обратной связи включает в себя участие человека в процессе и состоит из четырех основных этапов: (1) построение абстрактного пространства решений из некорректных программ для аннотирования, (2) кластеризация решений в этом пространстве на основе функции сходства, (3) аннотирование преподавателем подмножества этих решений (обычно одного решения на кластер) обратной связью и (4) распространение этих аннотаций на другие решения в том же кластере.
В контексте обратной связи по программированию более ранние подходы к обратной связи в масштабе включали кластеризацию решений студентов на основе мер синтаксического сходства кода. Например, Huang и др. (2013) [14] представляли программы с использованием абстрактных синтаксических деревьев (AST) и использовали расстояние редактирования деревьев для создания всеобъемлющего графа сходства. С развитием обучения представлений акцент сместился с простого использования мер сходства кода на решение задачи изучения векторных представлений программ (embeddings), что способствует более эффективному распространению [4, 33, 40]. Именно этот подход мы используем в нашей статье.
Важно отметить, что существуют альтернативные подходы, не основанные на представлениях кода. Например, Head и др. [10] строят пространство решений на основе изученных преобразований для исправления ошибок и кластеризуют некорректные программы в соответствии с требуемым преобразованием для исправления. Более того, некоторые исследования явно не зависят от кластеризации (неконтролируемое обучение). Например, в одном более раннем исследовании [40], использующем языковые модели для распространения обратной связи, применяется классификация с малым числом примеров (few-shot classification). В этом исследовании помощники преподавателей (ТА) аннотировали небольшую выборку k программ на основе набора критериев оценивания, и эти аннотации впоследствии использовались для обучения модели метаобучения для классификации с малым числом примеров. Затем эту модель можно было применять в масштабе, даже к незнакомым задачам.
Подъем больших языковых моделей открыл возможность прямого генерирования широкого спектра подробной обратной связи на естественном языке [11, 19, 36], устраняя необходимость в ручных аннотациях и, следовательно, в распространении. Немногие исследования изучали производительность LLM, в частности GPT-3.5 и GPT-4, в предоставлении различных типов обратной связи по программированию, таких как объяснение ошибок программирования [22], объяснение проблем в программах студентов [11] и генерация подсказок о следующем шаге [35] (это также фокус нашей работы). Для дальнейшего улучшения производительности таких моделей в предоставлении обратной связи недавние исследования предлагают использовать техники многоэтапного промптинга. Например, Phung и др. [32] предлагают использовать GPT-3.5 в качестве «искусственного студента» для проверки обратной связи от GPT-4 в ходе трехэтапного взаимодействия.
Использование таких техник позволит преподавателям предоставлять более точную поддержку своим студентам. Однако это происходит за счет увеличения количества вызовов API для каждого запроса обратной связи. Для снижения денежных затрат необходимы новые методы.
Рассмотрим следующий сценарий: в определенный момент времени в ходе курса некий набор студентов запросил помощь, они застряли на каком-то упражнении. Этот сценарий может соответствовать многим курсам, имеющим функции запроса помощи [16] (например, через сообщения на форуме), на которые позже отвечали бы помощники преподавателей. Теперь, вместо того чтобы помощник преподавателя писал такую обратную связь, мы можем использовать мощную, но дорогую LLM для помощи студентам. Чтобы понять эффективность методов распространения в предоставлении полезных подсказок, мы стремимся сравнить обратную связь, назначенную через метод распространения, с «истинной» обратной связью, которая была бы предоставлена LLM без распространения.
Для нашего эксперимента мы используем FalconCode [5], крупномасштабный набор данных, содержащий несколько тысяч решений студентов для заданий по программированию на Python. Помимо значительного масштаба, этот набор данных отличается тем, что включает связанные модульные тесты и соответствующую метаданную, например, уровень сложности заданий. Примечательно, что он включает задания в свободной форме, где студенты не обязательно обязаны писать функции.
Обработка. Мы выполняем следующую обработку нашего набора данных, чтобы соответствовать нашему сценарию и позволить проведение экспериментов. Мы удалили все задания, требующие доступа к внешним файлам, поскольку авторы не предоставили эти внешние файлы вместе с набором данных. Мы опускаем экзаменационные упражнения и сосредотачиваемся на практических упражнениях (т.е. тех, по которым студентам требуется помощь). Набор данных содержит решения за три семестра (осень 2021, весна 2021 и осень 2022), мы берем решения за последний семестр (осень 2022). Следуя Hu и др. [13], мы выбираем только последние некорректные решения для каждого студента по каждому заданию. Хотя этот выбор может не охватывать весь спектр трудностей студентов, он соответствует идее, что последняя попытка студента часто отражает его окончательное понимание. Наконец, мы удаляем решения с идентичными структурами абстрактного синтаксического дерева после нормализации переменных [37]. Причина удаления близких дубликатов в том, что одна и та же обратная связь может быть эвристически и почти автоматически применена к этим похожим решениям [13]. Включение этих данных исказило бы (положительно) результаты наших экспериментов. Окончательный набор данных содержит 370 программ из 44 заданий.
Автоматическая аннотация. Мы автоматически аннотируем каждое некорректное решение в нашем наборе данных истинной обратной связью. Эта «истинная обратная связь» впоследствии будет использоваться для оценки релевантности распространенной обратной связи. Мы генерируем эту обратную связь с помощью жадного декодирования, используя GPT-4 без примеров (zero-shot prompting) с шаблоном промпта, показанным на рисунке 1. Этот промпт запрашивает у модели генерацию короткой подсказки, сообщающей студентам, каким должен быть следующий шаг для исправления их программы. Мы разработали этот промпт, следуя рекомендациям Roest и др. [35]. Мы обращаемся к модели, используя OpenAI Python API. Мы признаем потенциальную проблему в предположении, что эта «истинная» обратная связь действительно точна. Предыдущие работы предполагают, что обратная связь, генерируемая GPT-4, высокого качества, но не идеальна [11]. Как отмечалось ранее, также были недавние попытки предложить более сложные техники для обеспечения более точной и полезной обратной связи [30], которые мы рассмотрим в будущей работе.
Вы профессор информатики, преподающий введение в программирование на Python.
Ниже приведено описание задачи, сопровождаемое некорректной программой (т.е. не проходящей все модульные тесты), написанной студентом. Ваша задача — предоставить короткую подсказку, объясняющую следующий шаг, который студент должен предпринять, чтобы исправить свой код.
Описание задачи: <описание_задачи>
Код студента: <представленный_код>
Рисунок 1. Шаблон промпта для обратной связи. Мы предоставляем (1) контекстную информацию, (2) описание задачи обратной связи (генерация короткой подсказки о следующем шаге) и (3) описание задачи и код студента.
Мы принимаем четыре этапа распространения обратной связи, выделенные в разделе о смежных работах. Учитывая недавние успехи в использовании LLM для обучения представлениям кода, мы генерируем пространство решений, используя векторные представления (embeddings) от LLM. В этой работе мы используем CodeBERT [7], широко применяемую большую языковую модель, обученную на большой коллекции кода. Мы используем библиотеку sentence-transformers [34] для передачи каждой некорректной программы модели и извлечения эмбеддингов (векторы из 768 значений). Хотя можно использовать различные техники кластеризации, следуя предыдущей работе [33] в распространении обратной связи по программированию, мы прибегаем к использованию алгоритма кластеризации K-Means [29]. Мы используем ближайшее решение к центру каждого кластера в качестве кандидата для аннотирования обратной связью. На практике это означает извлечение истинной обратной связи, сгенерированной GPT-4, из нашего аннотированного набора данных. Затем мы назначаем извлеченную обратную связь (т.е. ту же самую подсказку) всем программам, принадлежащим к одним и тем же кластерам. Мы экспериментируем с различным количеством кластеров k. В нашем сценарии выбранное количество кластеров k можно рассматривать как бюджет аннотирования (предполагая равную цену для каждого запроса). Мы обсудим влияние k на качество распространения позже.
Наша цель — оценить сходство между истинной обратной связью и той, что назначена через распространение. Следуя недавним работам [27, 33], мы используем комбинацию оценки с использованием метрик обработки естественного языка и автоматической оценки качества с использованием языковых моделей.
Метрики NLP. Мы используем популярные метрики обработки естественного языка: BLEU [28], ROUGE-L [24] и BERTScore [41]. Наличие всех этих метрик позволяет нам получить всесторонний обзор, учитывающий как синтаксическое, так и семантическое сходство. Для всех некорректных программ в нашем наборе данных мы вычисляем оценку, используя истинную обратную связь как «референтное» предложение, а обратную связь, назначенную через распространение, как «предсказанное» предложение. Мы сообщаем среднее значение по всем программам в нашем наборе данных.
Оценка релевантности. Гарантия того, что обратная связь, назначенная через распространение, лингвистически близка к истинной, не гарантирует, что эта обратная связь будет релевантной, т.е. будет ли она эффективно напрямую устранять проблему в коде студента и помогать студенту продвигаться. Для оценки релевантности в этой предварительной работе мы прибегаем к автоматизированной оценке с использованием GPT-4 в качестве судьи (judge) [42]. Хотя некоторые предыдущие работы рассматривают другие аспекты качества (например, краткость [33]) и/или дополняют свою оценку суждением человека [11], мы оставляем эти два аспекта для будущей работы.
Мы оцениваем релевантность, запрашивая у GPT-4 оценить обратную связь по трехбалльной шкале: (0) подсказка совершенно не релевантна решению студента, (1) подсказка частично релевантна решению, (2) подсказка полностью релевантна решению. Промпт, используемый для оценки обратной связи, показан на рисунке 2. Для ясности в разделе результатов мы ссылаемся на три уровня как на «плохую», «среднюю» и «хорошую» обратную связь (соответственно).
Вы — профессор информатики, преподающий введение в программирование на Python. Ваша задача — оценить качество подсказки, предоставленной студенту для его некорректного кода, на основе следующих критериев:
Оценка 0 (Плохо): Подсказка совершенно не релевантна решению студента.
Оценка 1 (Средне): Подсказка частично релевантна решению студента.
Оценка 2 (Хорошо): Подсказка полностью релевантна решению студента.
Пожалуйста, оцените следующую подсказку:
Описание задачи: <описание_задачи>
Код студента: <представленный_код>
Предоставленная подсказка: <подсказка>
*Рисунок 2. Шаблон промпта для оценивания. Мы предоставляем (1) контекстную информацию, (2) описание задачи оценивания с руководством по выставлению оценок и (3) описание задачи, код студента и оцениваемую обратную связь/подсказку.*
На рисунке 3 показано, как при изменении бюджета аннотирования (процент решений, для которых генерируется обратная связь) меняются оценки по метрикам NLP, а также процент решений в нашем наборе данных, отнесенных к каждой категории качества. В таблице 1 приведены эти результаты.
Рисунок 3. Результаты распространения. Слева: Бюджет аннотирования vs оценки метрик NLP. Справа: Бюджет аннотирования vs процент релевантной обратной связи.
Таблица 1. Детальные оценки в зависимости от бюджета аннотирования.
| % Бюджета | BERTScore | BLEU | ROUGE-L | #плохо | #средне | #хорошо |
|---|---|---|---|---|---|---|
| 10% | 0.81 | 0.25 | 0.43 | 67.84% | 3.78% | 28.38% |
| 20% | 0.84 | 0.38 | 0.54 | 47.03% | 1.89% | 51.08% |
| 30% | 0.87 | 0.48 | 0.62 | 32.97% | 3.51% | 63.51% |
| 40% | 0.89 | 0.57 | 0.69 | 4.05% | 1.62% | 94.32% |
| 50% ↓ | 0.92 | 0.66 | 0.76 | 24.32% | 4.59% | 71.08% |
| 60% | 0.94 | 0.75 | 0.82 | 16.49% | 1.89% | 81.62% |
| 70% | 0.96 | 0.83 | 0.88 | 3.78% | 1.89% | 94.32% |
| 80% | 0.98 | 0.90 | 0.94 | 0.81% | 1.35% | 97.84% |
| 90% | 0.99 | 0.97 | 0.98 | 0.27% | 0.81% | 98.92% |
| 100% | 1.00 | 1.00 | 1.00 | 0.27% | 1.35% | 98.38% |
Рассматривая метрики NLP, мы наблюдаем, что оценки плавно возрастают по мере увеличения бюджета. Это говорит о том, что коды, которые имеют тенденцию группироваться вместе, получают подсказки, лингвистически и семантически близкие друг к другу.
Рассматривая релевантность сгенерированных подсказок, мы замечаем ту же общую тенденцию: по мере увеличения бюджета аннотирования количество «хорошей» распространенной обратной связи имеет тенденцию к увеличению, в то время как количество «плохой» обратной связи уменьшается. Наши результаты показывают, что, например, аннотируя только 40% от исходного количества решений, 90% подсказок, данных студентам, все еще остаются релевантными.
Однако, что интересно, при 50% бюджета количество высококачественной распространенной обратной связи уменьшается (по сравнению с 40%), а затем снова возрастает. Мы предполагаем, что это падение качества связано главным образом с алгоритмом кластеризации: качество кластеризации может ухудшаться при определенном ожидаемом количестве кластеров k из-за того, что алгоритм K-Means с трудом находит значимые границы кластеров (т.е. алгоритм не сходится к хорошему решению), что приводит к кластерам с более разнородным или менее связным содержанием. Интересно, что количество обратной связи «среднего» качества остается низким и не следует какой-либо определенной тенденции. Это может указывать на то, что подсказка о следующем шаге либо идеально подходит решению, либо нерелевантна (без промежуточных вариантов).
Оценка судьи также подчеркивает ограничения лингвистических синтаксических метрик, таких как BLEU, ROUGE, и семантических метрик, таких как BERTScore. Как отмечалось в предыдущих работах [38], эти метрики не всегда коррелируют с релевантностью. Однако важно подчеркнуть «неидеальную» природу нашего оценщика качества (самого GPT-4). Например, мы можем заметить, что при 100% бюджета аннотирования (т.е. когда у каждого решения свой кластер) GPT-4 все же присвоил 1 программе (0.27%) и ее исходной обратной связи оценку «плохо».
Выводы и последствия. В этой работе мы изучили эффективность техники распространения в снижении стоимости обращения к моделям GPT-4 для предоставления обратной связи по программированию (генерация подсказок о следующем шаге). Наши результаты показывают, что техники распространения могут эффективно снизить затраты на запросы к LLM, сохраняя при этом достойное качество предоставляемой обратной связи (например, снижение затрат до 60% при сохранении качества обратной связи на уровне 90%).
Мы отмечаем, что качество техник распространения будет зависеть от характера предоставляемой обратной связи. Мы предполагаем, что некоторые типы обратной связи легче распространять, чем другие. Мы считаем, что подсказки о следующем шаге подвержены распространению из-за их более общего характера. Мы также считаем, что обратная связь по заблуждениям может выиграть от распространения; предыдущие работы также показали, что модели классификации кода создают эмбеддинги кода студентов, которые имеют тенденцию группироваться в определенные заблуждения [39]. С другой стороны, мы полагаем, что другие типы обратной связи, такие как подробные объяснения проблем в коде [11], будет труднее распространять. Описание на естественном языке всех конкретных проблем в программе может быть весьма специфичным для этой программы. Хотя весь набор проблем может не подлежать распространению, подмножества этих проблем, скорее всего, будут обнаружены в нескольких близких решениях. В этой области идея распространения обратной связи для части программы (например, набора строк [8] в отличие от всей программы) заслуживает изучения [14], особенно при переходе за рамки вводных упражнений по программированию и рассмотрении более сложных заданий. Недавние достижения в области языкового моделирования и извлечения признаков позволяют проводить такие исследования.
Обратная связь, и, следовательно, ее распространение, имеет много преимуществ [9]. Тем не менее, мы должны признать и предвидеть потенциальную проблему, заключающуюся в том, что предоставление студентам неподходящей обратной связи может даже навредить их обучению [2]. Поэтому можно утверждать, что риск навредить некоторым (возможно, уже испытывающим трудности) студентам может не стоить сэкономленных денег. Для решения этих проблем исследования по распространению обратной связи от LLM также должны включать техники автоматической фильтрации нерелевантной или некачественной обратной связи. Однако процесс распространения обратной связи не обязательно должен быть полностью автоматизированным. Мы считаем, что преподаватели должны быть неотъемлемой частью процесса распространения для его контроля. Мы представляем, что обратная связь от LLM будет интегрирована в такие системы, как OverCode [8] и CodeClusters [17], которые уже группируют решения студентов, позволяя преподавателям фильтровать, уточнять и корректировать кластеризацию и обратную связь. Такой подход с участием человека в процессе также позволит собирать данные, которые можно использовать для дальнейшего улучшения кластеризации и тонкой настройки моделей для получения лучшей обратной связи [12, 19]. Аналогичным образом, мы также рассматриваем распространение обратной связи как ценную технику для новых инструментов, предоставляющих обратную связь по программированию студентам [16, 23].
Ограничения. Наша работа не лишена ограничений. Мы провели эксперименты только на подмножестве решений по программированию, написанных на одном языке программирования и происходящих из одного набора данных, собранного в одном учебном заведении. Более того, мы полагались на LLM (GPT-4) для оценки качества обратной связи, назначенной через распространение. Мы признаем, что передовая языковая модель не является идеальным оценщиком. Однако многие из этих ограничений связаны с исследовательским характером этой краткой статьи.
Будущая работа. Помимо устранения упомянутых выше ограничений, наша будущая работа будет в основном касаться улучшения конвейера распространения. Мы начнем с изучения представлений с использованием различных техник эмбеддингов. Первым направлением будет рассмотрение более совершенных и современных языковых моделей для представления кода и способов уточнения эмбеддингов для лучшей кластеризации кода, требующего схожих вмешательств. Например, для более точного описания решений студентов и предоставления подсказок о следующем шаге можно включить последовательности решений студентов для получения более точных эмбеддингов [25]. Более того, мы стремимся интегрировать небольшие открытые языковые модели в конвейер распространения. Вместо того чтобы полностью полагаться на передовые, но дорогие проприетарные LLM, такие как GPT-4, можно также частично использовать сильные открытые LLM, такие как Mistral [15]. Такие модели показали впечатляющую производительность, будучи конкурентоспособными с GPT-3.5, и при этом относительно экономичны по ресурсам — модель доступна бесплатно через такие платформы, как Huggingface, и для ее работы требуется один GPU. Например, можно расширить конвейер распространения до конвейера «распространи и уточни», где обратная связь, назначенная центру кластера, будет предоставляться как пример в контексте (in-context one-shot example) для небольшой открытой языковой модели. Использование примеров обратной связи в контексте, вероятно, улучшит результаты открытой языковой модели.