1 Обзор литературы 6
1.1 Архитектура Трансформер 6
1.1.1 Модуль самовнимания 6
1.1.2 Position-wise FF 8
1.1.3 Резидуальное соединение и нормализация 8
1.1.4 Позиционные презентации 9
1.2 Использование архитектуры Трансформер 9
1.3 Использование архитектуры Трансформер для задачи генерации кода 10
1.4 Обучение языковых моделей 11
1.5 Support Vector Machine 12
1.6 Метрики 12
2 Методы исследования 15
2.1 Фреймворк 15
2.2 Выбор списка ключевых слов 15
2.3 Необходимые наборы данных 16
2.4 Процедура обучения 17
3 Реализация 18
3.1 Задача и датасеты 18
3.2 Обучение классификатора ключевых слов 20
3.3 Выбор генеративных моделей 20
3.4 Обучение генеративной модели 20
3.5 Процедура эвалюации 21
4 Эксперименты и результаты 22
4.1 Обучение классификатора ключевых слов 22
4.2 Генерация кода на датасете CoNaLa 22
4.3 Генерация кода на датасете SO 23
4.4 Примеры сгенерированных фрагментов кода из датасета SO 24
4.4.1 Пример из таблицы 3 24
4.4.2 Пример из таблицы 4 24
4.5 Примеры сгенерированных фрагментов кода из датасета CoNaLa 25
4.5.1 Пример из таблицы 5 25
4.5.2 Пример из таблицы 6 27
4.6 Ограничения 27
4.6.1 Ограничения метрик 27
4.6.2 Ограничения метода 27
4.6.3 Ограничения моделей 29
Платформы CQA (Community Question Answering), где разработчики могут задавать вопросы по программированию и отвечать на них, революционировали способ поиска информации
в интернете. Когда пользователь сталкивается с проблемой, он ищет решение через поисковые системы, такие как Yandex и Google. Исследования показывают, что разработчики
Google делают в среднем около 12 поисковых запросов в неделю [1]. Часто поисковые системы направляют пользователей на платформы CQA, где они могут найти точные и полезные
решения. Одним из наиболее популярных веб-сервисов такого типа является Stack Overflow.
На момент мая 2023 года на этой платформе содержится более 24 миллионов вопросов, 35
миллионов ответов и 21 миллион активных пользователей [2].
Сообщество разработчиков и множество разрабатываемых ими проектов растет очень
быстро. Количество пользователей GitHub, крупнейшего сервиса для совместной разработки и хостинга проектов, выросло с 40 до 73 миллионов человек всего за два года [3]. Такой
стремительный рост в лишний раз подчеркивает важность Q&A платформ и, в частности,
правильных ответов на них. Возможность быстро получить ответ/решение задачи помогает
сохранить время каждого из миллионов разработчиков.
С появлением больших предобученных генеративных моделей, основанных на механизме
внимания [4], таких как BERT [5] и GPT, возник вопрос о возможности обучения модели для
ответов на более сложные и специализированные вопросы, такие как те, которые встречаются на платформе Stack Overflow. Исследования показали, что модели, обученные на текстах,
включающих как естественный язык, так и фрагменты кода, обладают способностью понимать программную составляющую таких текстов [6]. Это открывает новые перспективы для
разработки моделей, которые могут предоставлять качественные и точные ответы на вопросы, связанные с программированием.
Модель GPT-4 [7], которая была недавно представлена, вызывает восхищение своими уникальными возможностями. Она успешно проходит экзамены по различным предметам, включая письменные работы, историю, биологию и другие области знаний, попадая в лучшие 10%
участников тестов. В сравнении с предыдущей моделью GPT-3.5, которая попадала в среднем
в 10% худших участников, это значительное улучшение. GPT-4 владеет более чем 20 языками,
и на самых популярных языках в интернете она способна вести практически безошибочные
разговоры.
Результаты экспериментов, проведенных в этом исследовании показывают высокую эффективность разработанной методики в задаче генерирования фрагмента кода по его описанию.
Обученная модель SVM эффективно предсказывает необходимые библиотеки, а их добавление к запросу ведет к генерации более точных ответов. На публичном датасете CoNaLa
лучшая модель смогла набрать 0.44 по метрике BLEU, что является заметным улучшением
по сравнению с текущим лучшим результатом в 0.34 [51].
Успешность проведенных экспериментов подводит к мысли, что добавление предметноориентированных знаний в качестве подсказок помогает улучшить качество больших генеративных моделей в общем случае. Что имеет большой смысл: генеративные модели в первую
очередь учатся генерировать правдоподобный и последовательный текст, что не гарантирует
какое-либо знание предметной области. Поэтому обучение отдельных моделей, которые понимают связи между ключевыми словами в области, и добавление этих знаний к генеративным
моделям ведет к более качественной генерации.
Результаты работы были приняты к докладу на конференции International Conference on
Computational science (ICCS 2023, A-rank) и публикации в издании Lecture Notes in Computer
Science (Q2) на тему “Fine-Tuning Large Language Models for Answering Programming Questions
with Code Snippets“.
[1] Caitlin Sadowski, Kathryn T Stolee, and Sebastian Elbaum. How developers search for code: a case study. In Proceedings of the 2015 10th joint meeting on foundations of software engineering, pages 191-201, 2015.
[2] Stackexchange sites. https://stackexchange.com/sites. Accessed: 26.05.2023.
[3] Github’s global growth sees it reach developers in emerging markets. https://techmonitor.ai/technology/software/github-users-microsoft-thomas-dohmke. Accessed: 26.05.2023.
[4] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. Advances in neural information processing systems, 30, 2017.
[5] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.0f805,
2018.
[6] Yue Wang, Weishi Wang, Shafiq Joty, and Steven CH Hoi. Codet5: Identifier-aware unified pre-trained encoder-decoder models for code understanding and generation. arXiv preprint arXiv:2109.00859, 2021.
[7] OpenAI. Gpt-4 technical report, 2023.
[8] Shuai Lu, Daya Guo, Shuo Ren, Junjie Huang, Alexey Svyatkovskiy, Ambrosio Blanco, Colin Clement, Dawn Drain, Daxin Jiang, Duyu Tang, et al. Codexglue: A machine learning benchmark dataset for code understanding and generation. arXiv preprint arXiv:2102.04664, 2021.
[9] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 770-778, 2016.
[10] Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E Hinton. Layer normalization. arXiv preprint arXiv:1607.06450, 2016.
[11] Kunihiko Fukushima. Cognitron: A self-organizing multilayered neural network. Biological cybernetics, 20(3-4):121-136, 1975.
[12] Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N Dauphin. Convolutional sequence to sequence learning. In International conference on machine learning, pages 1243-1252. PMLR, 2017.
[13] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J Liu. Exploring the limits of transfer learning with a unified text-to-text transformer. The Journal of Machine Learning Research, 21(1):5485—5551, 2020.
[14] Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov, and Luke Zettlemoyer. Bart: Denoising sequence-to-sequence pre¬training for natural language generation, translation, and comprehension. arXiv preprint arXiv:1910.13461, 2019.
[15] Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. Roberta: A robustly optimized bert pretraining approach. arXiv preprint arXiv:1907.11692, 2019.
[16] Manzil Zaheer, Guru Guruganesh, Kumar Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, et al. Big bird: Transformers for longer sequences. Advances in neural information processing systems, 33:17283-17297, 2020.
[17] Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever, et al. Improving language understanding by generative pre-training. 2018.
[18] Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever, et al. Language models are unsupervised multitask learners. OpenAI blog, 1(8):9, 2019.
[19] Tom Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared D Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, et al. Language models are few-shot learners. Advances in neural information processing systems, 33:1877¬1901, 2020.
[20] Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, et al. An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929, 2020.
[21] Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. End-to-end object detection with transformers. In Computer Vision- ECCV 2020: 16th European Conference, Glasgow, UK, August 23-28, 2020, Proceedings, Part 116, pages 213-229. Springer, 2020.
[22] Niki Parmar, Ashish Vaswani, Jakob Uszkoreit, Lukasz Kaiser, Noam Shazeer, Alexander Ku, and Dustin Tran. Image transformer. In International conference on machine learning, pages 4055-4064. PMLR, 2018.
[23] Anurag Arnab, Mostafa Dehghani, Georg Heigold, Chen Sun, Mario Lucic, and Cordelia Schmid. Vivit: A video vision transformer. In Proceedings of the IEEE/CVF international conference on computer vision, pages 6836-6846, 2021.
[24] Anmol Gulati, James Qin, Chung-Cheng Chiu, Niki Parmar, Yu Zhang, Jiahui Yu, Wei Han, Shibo Wang, Zhengdong Zhang, Yonghui Wu, et al. Conformer: Convolution-augmented transformer for speech recognition. arXiv preprint arXiv:2005.08100, 2020.
[25] Naihan Li, Shujie Liu, Yanqing Liu, Sheng Zhao, and Ming Liu. Neural speech synthesis with transformer network. In Proceedings of the AAAI conference on artificial intelligence, volume 33, pages 6706-6713, 2019.
[26] Jaeyoung Kim, Mostafa El-Khamy, and Jungwon Lee. T-gsa: Transformer with gaussian- weighted self-attention for speech enhancement. In ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pages 6649-6653. IEEE, 2020.
[27] Cheng-Zhi Anna Huang, Ashish Vaswani, Jakob Uszkoreit, Noam Shazeer, Ian Simon, Curtis Hawthorne, Andrew M Dai, Matthew D Hoffman, Monica Dinculescu, and Douglas Eck. Music transformer. arXiv preprint arXiv:1809.0f281, 2018.
[28] David So, Quoc Le, and Chen Liang. The evolved transformer. In International conference on machine learning, pages 5877-5886. PMLR, 2019.
[29] Xiaonan Li, Hang Yan, Xipeng Qiu, and Xuanjing Huang. Flat: Chinese ner using flat-lattice transformer. arXiv preprint arXiv:200f.11795, 2020.
[30] Mohammad Shoeybi, Mostofa Patwary, Raul Puri, Patrick LeGresley, Jared Casper, and Bryan Catanzaro. Megatron-lm: Training multi-billion parameter language models using model parallelism. arXiv preprint arXiv:1909.08053, 2019.
[31] Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, et al. Evaluating large language models trained on code. arXiv preprint a,rXiv:2107.0337f, 2021.
[32] Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, et al. Codebert: A pre-trained model for programming and natural languages. arXiv preprint arXiv:2002.08155, 2020.
[33] Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, et al. Graphcodebert: Pre-training code representations with data flow. arXiv preprint arXiv:2009.08366, 2020.
[34] Dan Hendrycks, Steven Basart, Saurav Kadavath, Mantas Mazeika, Akul Arora, Ethan Guo, Collin Burns, Samir Puranik, Horace He, Dawn Song, et al. Measuring coding challenge competence with apps. arXiv preprint arXiv:2105.09938, 2021.
[35] Yujia Li, David Choi, Junyoung Chung, Nate Kushman, Julian Schrittwieser, Remi Leblond, Tom Eccles, James Keeling, Felix Gimeno, Agustin Dal Lago, et al. Competition-level code generation with alphacode. Science, 378(6624):1092-1097, 2022.
[36] Stefanie Beyer, Christian Macho, Massimiliano Di Penta, and Martin Pinzger. What kind of questions do developers ask on stack overflow? a comparison of automated approaches to classify posts into question categories. Empirical Software Engineering, 25:2258-2301, 2020.
[37] Marti A. Hearst, Susan T Dumais, Edgar Osuna, John Platt, and Bernhard Scholkopf. Support vector machines. IEEE Intelligent Systems and their applications, 13(4):18-28, 1998.
[38] Multiclass classification with support vector machines (svm), dual problem and kernel functions. https://towardsdatascience.com/multiclass-classification-with-support-vector- machines-svm-kernel-trick-kernel-functions-f9d5377d6f02. Accessed: 26.05.2023.
[39] Kishore Papineni, Salim Roukos, Todd Ward, and Wei-Jing Zhu. Bleu: a method for automatic evaluation of machine translation. In Proceedings of the 40th annual meeting of the Association for Computational Linguistics, pages 311-318, 2002.
[40] Tianyi Zhang, Varsha Kishore, Felix Wu, Kilian Q Weinberger, and Yoav Artzi. Bertscore: Evaluating text generation with bert. arXiv preprint arXiv:1904.09675, 2019.
[41] Chin-Yew Lin. Rouge: A package for automatic evaluation of summaries. In Text summarization branches out, pages 74-81, 2004.
[42] Shuo Ren, Daya Guo, Shuai Lu, Long Zhou, Shujie Liu, Duyu Tang, Neel Sundaresan, Ming Zhou, Ambrosio Blanco, and Shuai Ma. Codebleu: a method for automatic evaluation of code synthesis. arXiv preprint arXiv:2009.10297, 2020.
[43] Ngoc Tran, Hieu Tran, Son Nguyen, Hoan Nguyen, and Tien Nguyen. Does bleu score work for code migration? In 2019 IEEE/ACM 27th International Conference on Program, Comprehension (ICPC), pages 165-176. IEEE, 2019.