Тип работы:
Предмет:
Язык работы:


Генерация кода с расширенным извлечением на базе большой языковой модели

Работа №145900

Тип работы

Магистерская диссертация

Предмет

прикладная информатика

Объем работы60
Год сдачи2024
Стоимость4670 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
26
Не подходит работа?

Узнай цену на написание


ВВЕДЕНИЕ 3
1. Обзорный раздел по предметной области 6
1.1 RAG конвейеры на основе LLM для генерации кода 6
1.1.1 Gorilla: Large Language Model Connected with Massive APIs 6
1.1.1 RepoCoder: Repository-Level Code Completion Through Iterative Retrieval and Generation 7
1.1.2 REPOFORMER: Selective Retrieval for Repository-Level Code Completion 9
1.2 Системы для помощи в разработке программного кода 10
1.2.1 GitHub Copilot 10
1.2.2 DevChat 12
1.3 Вывод 13
2. Основная часть. Реализация генерации кода для помощи в программировании на основе Retrieval Augmented Generation 15
2.1 Retrieval Augmented Generation. Обзор метода 15
2.2 Используемые данные и модели для тестирования 20
2.3 Реализация работы с базой данных 21
2.3.1 Сбор и обработка данных 22
2.3.2 Построение векторных представлений текста 28
2.4 Работа с LLM для генерации кода 45
2.4.1 Точная настройка LLM для RAG 45
2.4.2 Оптимизация LLM 51
2.4 Финальные результаты 54
Вывод 57
Список источников 58

На данный момент Большие языковые модели (LLM) это одна из самых активно развивающихся отраслей в области исследования искусственного интеллекта. Популярность LLM неуклонно растет, поскольку они находят все большее применение в различных областях. Использование больших языковых моделей способно упростить и ускорить таких задач как:
1. Генерация текста.
2. Автоматический перевод.
3. Моделирование диалогов.
4. Анализ текста.
5. Генерация кода.
Из всех перечисленных задач с точки зрения изучения наиболее сложной и интересной является последняя, ведь сейчас, когда разработка программного обеспечения набирает все большие и большие обороты, неизбежно встает вопрос автоматизации этого процесса.
Внедрение генеративных LLM в жизненный цикл разработки программного обеспечения имеет свои преимущества, например, позволяет разработчикам работать более эффективно. Так, исследование GitHub[1] показало, что при использовании LLM в разработке программисты могут выполнять задачи более чем на 50% быстрее.
Большие языковые модели (LLM) продемонстрировали свое мастерство в понимании естественного языка и генерации текста. Они также могут генерировать фрагменты кода, функции и даже целые программы на основе текстовых данных. Такая возможность имеет существенное значение для разработки программного обеспечения, поскольку позволяет ускорить выполнение задач написания программ и открыть двери для более быстрого создания инновационных решений.
Хотя код, генерируемый LLM, помогает разработчикам быстро приступить к работе и позволяет компаниям быстрее создавать приложения, это сопряжено со значительными рисками. Иногда LLM могут генерировать неверную, вводящую в заблуждение или даже вымышленную информацию. Рассмотрим некоторые причины возникновения этой проблемы:
Во-первых, LLM обучаются на огромных массивах данных, которые могут быстро устаревать. В результате они могут не иметь доступа к самой актуальной информации или закреплять устаревшие сведения. Важно убедиться, что фрагмент кода, предлагаемый моделью, безопасен и чист в контексте всей кодовой базы.
Во-вторых, Большая языковая модель может генерировать код без глубокого понимания контекста проекта и требований, что приводит к неадекватным или неправильным решениям. Хотя LLM в некоторой степени способны понимать контекст, они могут не в полной мере уловить все нюансы и специфические требования конкретного проекта. Это может привести к тому, что технически код будет работать, но не будет соответствовать уникальным целям проекта или требованиям к пользовательскому опыту.
Традиционный подход к решению этих проблем Fine-Tuning - способ улучшить предварительно обученную модель, которая уже имеет некоторые знания, путем небольших корректировок. Тонкая настройка помогает модели лучше работать над конкретной задачей, не обучая ее с самого начала. Дополнительный цикл обучения обновит веса модели в случае их устаревания, поможет справится с галлюцинациями в узкоспециализированных областях.
Однако, этот подход не лишен недостатков. Ввиду того, что зачастую большие языковые модели имеют огромное число параметров, их дообучение требует большого количества ресурсов и времени, а значит и денег тоже. Кроме того, в задаче по генерации кода зачастую необходимо повторять цикл тонкой настройки несколько раз, так как в этой области часто происходят изменения: появляются новые библиотеки, выходят обновления уже существующих и т.д...

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе данной работы была реализована система способная использовать данные из различных источников для решения задачи генерации дополнений кода и задачи генерации кода по текстовому запросу. Были описаны результаты тестирования различных методов и модификация для получения лучшего качества, а также реализованы новые алгоритмы и подходы для построения системы на основе Retrieval Augmented Generation, способные увеличить качество работы системы и ее временную эффективность. Кроме того, была произведена точная настройка модели для ее лучшей работы совместно с RAG, а также проанализированы различные методы квантования модели и была произведена работа по уменьшению размера модели для ее использования на слабой видеокарте или процессоре.
В ходе анализа результатов было выявлено, что реализованная система по качеству превосходит существующие решения и модели большего размера в обеих задачах генерации, которые были заявлены.
Их сказанного выше можно сделать вывод, что при правильной работе с данными и при использовании нескольких источников данных, подход Retrieval Augmented generation способен значительно улучшить работу модели по генерации программного кода, а также позволяет модели учитывать контекст проекта и актуальные данные, необходимы для решения задачи программирования.


[1] Sida Peng, Eirini Kalliamvakou, Peter Cihon, Mert Demirer. The Impact of AI on Developer Productivity: Evidence from GitHub Copilot. - 2023. URL: https://doi.org/10.48550/arXiv.2302.06590
[2] Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Kuttler, Mike Lewis, Wen-tau Yih, Tim Rocktaschel, Sebastian Riedel, Douwe Kiela. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. - 2020. URL: https://doi.org/10.48550/arXiv.2005.11401
[3] Shishir G. Patil, Tianjun Zhang, Xin Wang, Joseph E. Gonzalez. Gorilla: Large Language Model Connected with Massiv APIs. - 2023. URL: https://doi.org/10.48550/arXiv.2305.15334
[4] Fengji Zhang, Bei Chen, Yue Zhang, Jacky Keung, Jin Liu, Daoguang Zan, Yi Mao,
Jian-Guang Lou, Weizhu Chen. RepoCoder: Repository-Level Code Completion Through Iterative Retrieval and Generation. - 2023. URL: https://doi.org/10.48550/arXiv.2303.12570
[5] Di Wu, Wasi Uddin Ahmad, Dejiao Zhang, Murali Krishna Ramanathan, Xiaofei Ma. REPOFORMER: Selective Retrieval for Repository-Level Code Completion. - 2024. URL: https://doi.org/10.48550/arXiv.2403.10059
[6] GitHub Copilot. URL:https://github.com/features/copilot/(дата обр. 16.03.2024)
[7] Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda. Evaluating Large Language Models Trained on Code. - 2023. URL: https://doi.org/10.48550/arXiv.2107.03374
[8] Copilot Internals. URL: https ://thakkarparth007. github. io/copilot-explorer/posts/copilot-internals.html(дата обр. 16.03.2024)
[9] GitHub Copilot is generally available to all developers. URL: https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers/(дата обр. 17.03.2024)
[10] DevChat-ai. URL:https://github.com/devchat-ai/devchat(дата обр. 17.03.2024)
[11] Codeparrot gihub code dataset at HuggingFace. URL: https://huggingface.co/clatasets/coclepaiTot/github-cocle (/шта обр. 15.04.2024)
[12] Daya Guo, Shuai Lu, Nan Duan, Yanlin Wang, Ming Zhou, Jian Yin. UniXcoder:
Unified Cross-Modal Pre-training for Code Representation. - 2022. URL: https://doi.org/10.48550/arXiv.2203.03850
[13] Tianyang Liu, Canwen Xu, Julian McAuley. RepoBench: Benchmarking Repository-Level Code Auto-Completion Systems. - 2023. URL: https://doi.org/10.48550/arXiv.2306.03091
[14] Hao Yu, Bo Shen, Dezhi Ran, Jiaxin Zhang, Qi Zhang, Yuchi Ma, Guangtai Liang,
Ying Li, Qianxiang Wang, Tao Xie. CoderEval: A Benchmark of Pragmatic Code Generation with Generative Pre-trained Models. - 2024. URL: https://doi.org/10.48550/arXiv.2302.00288
[15] Baptiste Roziere, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Romain Sauvestre, Tal Remez. Code Llama: Open Foundation Models for Code. - 2024. URL: https://doi.org/10.48550/arXiv.2308.12950...(32)


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ