Аннотация 2
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ 5
ВВЕДЕНИЕ 7
1 Анализ задачи разработки помощника программиста для написания сценариев
чат-ботов на языке JAICP DSL и скриптов на JavaScript 9
1.1 Язык сценариев чат-ботов JAICP DSL 9
1.2 Язык программирования JavaScript в сценариях чат-ботов 11
1.3 Code Completion 12
1.4 Состав датасета 17
2 Анализ существующих решений в области автодополнения кода с помощью
Больших Языковых Моделей 20
2.1 Обзор современных подходов к автодополнению кода 20
2.2 Ключевые исследования и их результаты 20
2.2.1 CodeXGLUE 20
2.2.2 CodeX: Evaluating LLMs Trained on Code 21
2.2.3 CodeLLAMA 22
2.2.5 DeepSeek-Coder 24
2.2.6 Qwen2.5-Coder 25
3 Метрика 27
3.1 Существующие наборы тестов для оценки моделей генерации кода 30
4 Обзор используемой архитектуры и подхода к обучению модели 34
4.1 Transformer 34
4.2 Parameter Efficient Finetuning (PEFT) 40
4.2.1 Prompt Tuning 41
4.2.2 LoRA (Low-Rank Adaptation) 41
4.3 Метод обучения Fill-In-The-Middle (FIM) 43
4.3.1 Преимущества FIM перед классическим подходом 45
4.3.2 Техническая реализация FIM в Qwen2.5-Coder 46
5 Реализация 48
5.1 Подготовка данных 48
5.2 Используемые инструменты 48
5.3 Процесс обучения модели автодополнения кода 49
5.4 Результаты на бенчмарке MultiPL-E на задаче автодополнения кода на языке
JavaScript 51
5.5 Результаты на бенчмарках LingCopilot-JS и LingCopilot-DSL 52
5.6 Результаты тестирования модели пользователями 54
6. Итоги 57
ЗАКЛЮЧЕНИЕ 58
Список литературы 59
Бизнес сталкивается с растущей потребностью в эффективных диалоговых системах двух типов:
1. Тематически ограниченные (англ. closed domain). Эти системы решают узкопрофильные задачи — от информирования о смене тарифов до мониторинга баланса счетов, требуя минимальных ресурсов на разработку, развертывание и поддержку;
2. Диалоговые систем общего назначения (англ. open domain). Обладая широким набором навыков для ведения диалогов на обширный список тем, сопряжены с экспоненциальным ростом затрат на обучение, разработку, развертывание и поддержку решения.
В основе closed domain чат-ботов находятся разработки с применением подходов на правилах (англ. rule-based).
Особое место в этом процессе занимает создание чат-ботов с использованием специализированных языков разработки, таких как JAICP DSL, где требуется глубокое понимание как технических аспектов программирования, знание языков программирования JavaScript, так и лингвистической теории. В последние годы значительный прогресс в области искусственного интеллекта и, в частности, больших языковых моделей (англ. Large Language Models, LLM) открыл новые возможности для создания интеллектуальных ассистентов способных поддерживать лингвистов- разработчиков в процессе создания как узкоспециализированных (closed domain), так и общих (open domain) диалоговых систем.
Практическая значимость исследования заключается в создании инструмента автодополнения кода, позволяющего упростить работу лингвистов-разработчиков в части создания диалоговых систем, что особенно важно в условиях растущего спроса на автоматизацию клиентского обслуживания. Теоретическая значимость состоит в разработке методологии адаптации больших языковых моделей для обучения их задаче автодополнения кода (англ. Code Completion) на узкоспециализированном языке сценариев JAICP DSL.
Целью представленной работы является разработка помощника программиста с использованием больших языковых моделей для автодополнения кода на языке JAICP DSL и языке программирования JavaScript.
Исходя из представленных выше условий, для достижения поставленной цели работы, необходимо выполнить следующие задачи.
Задачи работы:
1. Формализовать задачу в терминах известных NLP4Code подходов;
2. Подготовить датасеты для обучения и валидация LLM на задаче автодополнения кода;
3. Обучить несколько LoRa-адаптеров для open-source LLM для автодополнения кода на языке сценариев JAICP DSL и языке программирования JavaScript;
4. Сравнить показатели эффективности обученных моделей на тестовой выборке;
5. Подготовить и передать лучшую по эффективности модель в тестирование лингвистам-разработчикам.
По результатам разработки модели автодополнения кода для лингвистов-разработчиков были выделены следующие итоги:
• Обучение LoRA-адаптера (малой части весов, а не всех весов) на небольшом размере пользовательской кодовой базой позволяет кодовой LLM адаптироваться к новому языку сценариев JAICP DSL.
• Проблема ожиданий пользователей: большинство хочет, чтобы модель думала и писала код полностью за них, а не использовать модель автодополнения кода как помощника.
• Обучение единого LoRA-адаптера на датасете из примеров кода на языке сценариев JAICP DSL и JavaScript приводит к ошибкам на длинных генерациях кода, если пользователь не направляет модель, а принимает последовательно однострочные автодополнения кода.
• Обучение LoRA-адаптера для кодовой LLM на датасете кодовой базы пользователей ведёт к ощутимому ухудшению общих программистских навыков модели. Пользователям стоит помнить, когда они пишут код, что модель учиться программировать на их коде.
В качестве следующего шага, выбрано исследование применимости диффузионных языковых моделей в задаче автодополнений кода. Идея исследования вдохновлена работами: «Dream-7B» от Huawei , Mercury Coder от Inception Labs и LLADA (Large Language Diffusion Models) [14].