1. Djupinlärningsmetoder för gruppering av källkod efter funktionalitet
- Author
-
Hägglund, Marcus
- Subjects
Klusteranalys ,Källkod ,cuBERT ,Code2Vec ,Cluster Analysis ,Deep learning ,Sannolikhetsteori och statistik ,Probability Theory and Statistics ,Source Code ,Djupinlärning - Abstract
With the rise of artificial intelligence, applications for machine learning can be found in nearly everyaspect of modern life, from healthcare and transportation to software services like recommendationsystems. Consequently, there are now more developers engaged in the field than ever - with the numberof implementations rapidly increasing by the day. In order to meet the new demands, it would be usefulto provide services that allow for an easy orchestration of a large number of repositories. Enabling usersto easily share, access and search for source code would be beneficial for both research and industryalike. 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, theproposed methods have so far not leveraged the capabilities of deep neural networks (DNN). In thiswork, we investigate the possibility of using DNNs to learn embeddings of source code for the purpose ofclustering by functionality. In particular, we evaluate embeddings from Code2Vec and cuBERT modelsfor this specific purpose. From the results of our work we conclude that both Code2Vec and cuBERT are capable of learningsuch embeddings. Among the different frameworks that we used to fine-tune cuBERT, we found thebest performance for this task when fine-tuning the model under the triplet loss criterion. With thisframework, the model was capable of learning embeddings that yielded the most compact and well-separated clusters. We found that a majority of the cluster assignments were semantically coherent withrespect to the functionalities implemented by the methods. With these results, we have found evidenceindicating that it is possible to learn embeddings of source code that encode the functional similaritiesamong the methods. Future research could therefore aim to further investigate the possible applicationsof the embeddings learned by the different frameworks. Med den avsevärda ökningen av användandet av artificiell intelligens går det att finna tillämpningar förmaskininlärningsalgoritmer i nästan alla aspekter av det moderna livet, från sjukvård och transport tillmjukvarutjänster som rekommendationssystem. Till följd av detta så är det fler utvecklare än någonsinengagerade inom området, där antalet nya implementationer ökar för var dag. För att möta de nyakraven skulle det vara användbart att kunna tillhandahålla tjänster som möjliggör en enkel hantering avett stort antal kodförråd. Att göra det möjligt för användare att enkelt dela, komma åt och söka efterkällkod skulle vara till nytta inom både forskning och industri. Ett första steg mot detta är att hittametoder 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 hardock hittils inte utnyttjat kapaciteten hos djupa neurala nätverk (DNN). I detta arbete undersöker vimöjligheten att använda DNN för inlärning av inbäddningar av källkod i syfte att klustra med avseendepå funktionalitet. I synnerhet så utvärderar vi inbäddningar från Code2Vec- och cuBERT-modeller fördetta specifika ändamål. Från resultatet av vårt arbete drar vi slutsatsen att både Code2Vec och cuBERT har kapacitet för attlä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älseparerade klusterna, där en majoritet av klustertilldelningarna var semantiskt sammanhängande medavseende på funktionaliteten som metoderna implementerade. Med dessa resultat har vi funnit beläggsom tyder på att det är möjligt att lära sig inbäddning av källkod som bevarar och åtger funktionellalikheter mellan metoder. Framtida forskning kan därför syfta till att ytterligare undersöka de olikamöjliga användningsområdena för de inbäddningar som lärts in inom de olika ramverken.
- Published
- 2021