title: Retrieval Augmented Code Generation based on Large Language Model
metadata.name: dc.contributor.advisor
metadata.value: Ковальчук Сергей Валерьевич
metadata.lang: ru_RU
metadata.name: dc.contributor.advisor
metadata.value: Kovalcuk Sergej Valerevic
metadata.lang: en_GB
metadata.name: dc.contributor.author
metadata.value: Дьяконов Глеб Сергеевич
metadata.lang: ru_RU
metadata.name: dc.contributor.author
metadata.value: Dakonov Gleb Sergeevic
metadata.lang: en_GB
metadata.name: dc.contributor.editor
metadata.value: Шалымов Дмитрий Сергеевич
metadata.lang: ru_RU
metadata.name: dc.contributor.editor
metadata.value: Salymov Dmitrij Sergeevic
metadata.lang: en_GB
metadata.name: dc.date.accessioned
metadata.value: 2024-07-25T11:51:30Z
metadata.lang: -
metadata.name: dc.date.available
metadata.value: 2024-07-25T11:51:30Z
metadata.lang: -
metadata.name: dc.date.issued
metadata.value: 2024
metadata.name: dc.identifier.other
metadata.value: 110224
metadata.lang: en_GB
metadata.name: dc.identifier.uri
metadata.value: http://hdl.handle.net/11701/46964
metadata.lang: -
metadata.name: dc.description.abstract
metadata.value: На данный момент Большие языковые модели (LLM) это одна из самых активно развивающихся отраслей в области исследования искусственного интеллекта. Популярность LLM неуклонно растет, поскольку они находят все большее применение в различных областях.  Однако, с точки зрения изучения одной из наиболее сложных и интересных является задача генерации программного кода, ведь сейчас, когда разработка программного обеспечения набирает все большие и большие обороты, неизбежно встает вопрос автоматизации этого процесса. Такая возможность имеет существенное значение для разработки программного обеспечения, поскольку позволяет ускорить выполнение задач написания программ и открыть двери для более быстрого создания инновационных решений. Тем не менее, использование больших языковых моделей для генерации программного кода сопряжено с некоторыми рисками: модель может генерировать неверную, вводящую в заблуждение или даже вымышленную информацию, не иметь понимания контекста проекта или может быть склонна обращаться к устаревшим данным. 
  Традиционный подход к решению этих проблем Fine-Tuning - способ улучшить предварительно обученную модель, которая уже имеет некоторые знания, путем небольших корректировок. Тонкая настройка помогает модели лучше работать над конкретной задачей, не обучая ее с самого начала. Дополнительное обучение обновит веса модели в случае их устаревания, поможет справится с галлюцинациями в узкоспециализированных областях.
  Однако, этот подход не лишен недостатков. Ввиду того, что зачастую большие языковые модели имеют огромное число параметров, их тонкая настройка требует большого количества ресурсов и времени и денег. Кроме того, в задаче по генерации кода зачастую необходимо повторять этот цикл несколько раз, так как в этой области часто происходят изменения.
  Всех этих затрат можно избежать, используя Retrieval Augmented Generation (RAG) — это метод работы с большими языковыми моделями, его суть заключается в том, что к запросу пользователя добавляется дополнительная информация из внешних источников, а затем измененный запрос подается на вход языковой модели. Такой подход при правильной реализации позволяет добиться результатов качества сопоставимого с тонкой настройкой при гораздо меньших затратах. 
  В ходе данной работы была реализована система способная использовать данные из различных источников для решения задачи генерации дополнений кода и задачи генерации кода по текстовому запросу. Были описаны результаты тестирования различных методов и модификация для получения лучшего качества, а также реализованы новые алгоритмы и подходы для построения системы на основе Retrieval Augmented Generation, способные увеличить качество работы системы и ее временную эффективность. Кроме того, была произведена точная настройка модели для ее лучшей работы совместно с RAG, а также проанализированы различные методы квантования модели и была произведена работа по уменьшению размера модели для ее использования на слабой видеокарте или процессоре.
  В ходе анализа результатов было выявлено, что реализованная система по качеству превосходит существующие решения и модели большего размера в задаче генерации дополнений кода и задачи генерации кода по текстовому запросу.
metadata.lang: ru_RU
metadata.name: dc.description.abstract
metadata.value: At the moment, Large Language Models (LLM) is one of the most actively developing industries in the field of artificial intelligence research. The popularity of LLMs is steadily growing as they find more and more applications in various fields. However, from the point of view of studying, one of the most difficult and interesting is the task of generating program code, because now, when software development is gaining more and more momentum, the question of automating this process inevitably arises. Such an opportunity is essential for software development, as it allows you to speed up the tasks of writing programs and open the door to faster creation of innovative solutions. However, using large language models to generate program code comes with some risks: the model may generate incorrect, misleading, or even fictitious information, have no understanding of the project context, or may be prone to accessing outdated data.
  The traditional approach to solving these problems is Fine-Tuning, a way to improve a pre-trained model that already has some knowledge by making small adjustments. Fine-tuning helps the model to work better on a specific task without training it from the very beginning. Additional training will update the weights of the model in case of their obsolescence, help to cope with hallucinations in highly specialized areas.
  However, this approach is not without drawbacks. Due to the fact that large language models often have a huge number of parameters, fine-tuning them requires a lot of resources and time and money. In addition, in a code generation task, it is often necessary to repeat this cycle several times, since changes often occur in this area.
  All these costs can be avoided by using Retrieval Augmented Generation (RAG) — this is a method of working with large language models, its essence lies in the fact that additional information from external sources is added to the user's request, and then the modified request is submitted to the input of the language model. This approach, when implemented correctly, allows you to achieve quality results comparable to fine tuning at much lower cost.
  In the course of this work, a system was implemented capable of using data from various sources to solve the problem of generating code additions and the task of generating code based on a text query. The results of testing various methods and modifications to obtain better quality were described, as well as new algorithms and approaches for building a system based on Retrieval Augmented Generation were implemented, which can increase the quality of the system and its temporary efficiency. In addition, the model was fine-tuned to work better with RAG, as well as various methods of quantization of the model were analyzed and work was done to reduce the size of the model for its use on a weak graphics card or processor.
  During the analysis of the results, it was revealed that the implemented system is superior in quality to existing solutions and larger models in the task of generating code completions and the task of generating code based on a text query.
metadata.lang: en_GB
metadata.name: dc.language.iso
metadata.value: ru
metadata.name: dc.subject
metadata.value: программный код
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: генерация
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: база данных
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: большая языковая модель
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: генерация с расширенным извлечением
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: векторные представления
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: program code
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: generation
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: database
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: large language model
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: retrieval augmented generation
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: embeddings
metadata.lang: en_GB
metadata.name: dc.title
metadata.value: Retrieval Augmented Code Generation based on Large Language Model
metadata.lang: en_GB
metadata.name: dc.title.alternative
metadata.value: Генерация кода с расширенным извлечением на базе большой языковой модели
metadata.lang: ru_RU
resources.filename: VKR.pdf
resources.url: https://dspace.spbu.ru/bitstream/11701/46964/2/VKR.pdf
resources.format: Adobe PDF
resources.description: Article
resources.size: 1,97 MB
resources.filename: reviewSV_Dakonov_otzyv.docx
resources.url: https://dspace.spbu.ru/bitstream/11701/46964/3/reviewSV_Dakonov_otzyv.docx
resources.format: Microsoft Word XML
resources.description: ReviewSV
resources.size: 14,92 kB
resources.filename: reviewSV_st110224_Dakonov_Gleb_Sergeevic_(supervisor)(Ru).txt
resources.url: https://dspace.spbu.ru/bitstream/11701/46964/4/reviewSV_st110224_Dakonov_Gleb_Sergeevic_%28supervisor%29%28Ru%29.txt
resources.format: Text
resources.description: ReviewSV
resources.size: 2,63 kB