Deep Learning Approaches for Clustering Source Code by Functionality

With the rise of artificial intelligence, applications for machine learning can be found in nearly every aspect of modern life, from healthcare and transportation to software services like recommendation systems. Consequently, there are now more developers engaged in the field than ever with the number of implementations rapidly increasing by the day. In order to meet the new demands, it would be useful to provide services that allow for an easy orchestration of a large number of repositories. Enabling users to easily share, access and search for source code would be beneficial for both research and industry alike. A first step towards this is to find methods for clustering source code by functionality. The problem of clustering source code has previously been studied in the literature. However, the proposed methods have so far not leveraged the capabilities of deep neural networks (DNN). In this work, we investigate the possibility of using DNNs to learn embeddings of source code for the purpose of clustering by functionality. In particular, we evaluate embeddings from Code2Vec and cuBERT models for this specific purpose. From the results of our work we conclude that both Code2Vec and cuBERT are capable of learning such embeddings. Among the different frameworks that we used to fine-tune cuBERT, we found the best performance for this task when fine-tuning the model under the triplet loss criterion. With this framework, the model was capable of learning embeddings that yielded the most compact and wellseparated clusters. We found that a majority of the cluster assignments were semantically coherent with respect to the functionalities implemented by the methods. With these results, we have found evidence indicating that it is possible to learn embeddings of source code that encode the functional similarities among the methods. Future research could therefore aim to further investigate the possible applications of the embeddings learned by the different frameworks. Sammanfattning Djupinlärningsmetoder för gruppering av källkod efter funktionalitet Med den avsevärda ökningen av användandet av artificiell intelligens går det att finna tillämpningar för maskininlärningsalgoritmer i nästan alla aspekter av det moderna livet, från sjukvård och transport till mjukvarutjänster som rekommendationssystem. Till följd av detta så är det fler utvecklare än någonsin engagerade inom området, där antalet nya implementationer ökar för var dag. För att möta de nya kraven skulle det vara användbart att kunna tillhandahålla tjänster som möjliggör en enkel hantering av ett stort antal kodförråd. Att göra det möjligt för användare att enkelt dela, komma åt och söka efter källkod skulle vara till nytta inom både forskning och industri. Ett första steg mot detta är att hitta metoder som gör det möjligt att klustra källkod med avseende på funktionalitet. Problemet med klustring av källkod är något som har tidigare studerats. De föreslagna metoderna har dock hittils inte utnyttjat kapaciteten hos djupa neurala nätverk (DNN). I detta arbete undersöker vi möjligheten att använda DNN för inlärning av inbäddningar av källkod i syfte att klustra med avseende på funktionalitet. I synnerhet så utvärderar vi inbäddningar från Code2Vecoch cuBERT-modeller för detta specifika ändamål. Från resultatet av vårt arbete drar vi slutsatsen att både Code2Vec och cuBERT har kapacitet för att lära sig sådana inbäddningar. Bland de olika ramverken som vi undersökte för att finjustera cuBERT, fann vi att modellen som finjusterades under triplet-förlustkriteriet var bäst lämpad för denna uppgift. Med detta ramverk kunde modellen lära sig inbäddningar som resulterade i de mest kompakta och väl separerade klusterna, där en majoritet av klustertilldelningarna var semantiskt sammanhängande med avseende på funktionaliteten som metoderna implementerade. Med dessa resultat har vi funnit belägg som tyder på att det är möjligt att lära sig inbäddning av källkod som bevarar och åtger funktionella likheter mellan metoder. Framtida forskning kan därför syfta till att ytterligare undersöka de olika möjliga användningsområdena för de inbäddningar som lärts in inom de olika ramverken. Acknowledgements First I would like to express my deepest gratitude to my supervisor Amir H. Payberah for providing me with the opportunity to take part in the project at RISE and for his continuous and invaluable guidance throughout this semester. I want to direct special thanks to Francisco J. Peña, for his feedback and our many long and interesting conversations, ranging from concepts of deep learning to simple friendly banter. Furthermore, I would like to express my gratitude to Sepideh Pashami and Ahmad Al-Shishtawy at RISE for the help and suggestions that has gotten me through this project. I also want to thank my examiner Martina Scolamiero for her continuous encouragement and feedback. She has been a much needed voice of reason in this project. Last but certainly not least, I would like to extend a most heartfelt thank you to my friends and family that have given me an unwavering support throughout the years. Marcus Hägglund Stockholm, May 2021