Automated Source Code Completion by Retrieval-oriented Unsupervised Learning
Creators: name: Scheid, David
Publisher: name: Hochschule RheinMain
Year: 2021
Subjects: subject: Machine Learning
subject: Retrieval
subject: Unsupervised
subject: NLP
subject: Source Code Infilling
subject: 000 Informatik, Informationswissenschaft und allgemeine Werke::000 Informatik, Wissen, Systeme::005 Computerprogrammierung, Computerprogramme, Daten

description: In dieser Thesis wird ein Modell vorgestellt, welches große Lücken im Quellcode der Programmiersprachen Java und Python füllen kann. Das Modell besteht aus zwei Untermodellen: einem Retriever und einem Generator. Das Besondere an dem Modell ist der Fuision-in-Decoder und retrieval-basierte Ansatz, der auf einer punkte-basierten Bewertung (Relevance Scores) beruht. Mit dem aufgezeigten Training kann der Retriever auf einer nicht markierten Sammlung (Corpus) von Quellcode trainiert werden. Das Modell lernt, indem es zufällig ausgeschnittene Lücken in den Token-Sequenzen einer Quellcode-Passage füllt, mit der Unterstützung von Gold Passagen – dies sind vollständige Passagen ohne maskierte Lücke, von welchen die Abfrage (Query) abstammt – oder anderen Quellcode-Passagen aus dem Corpus. Bevor eine Vorhersage für eine Lücke erstellt wird, wird ein großer Corpus aus Quellcode-Schnippseln nach hilfreichen Passagen durchsucht, die dem Modell helfen sollen, eine bessere Vorhersage abzugeben. Ein Kernaspekt ist die Benutzung von Relevance Scores, welche die Nützlichkeit einer Passage für einen gegebenen Query darstellt. Diese Scores werden vom Generator erzeugt und dem Retriever im Training vorgegeben, um diese mit seinem Encoding nachzustellen. Das Generator Training ist abhängig von dem Retriever, da nur einige wenige Passagen zeitgleich vom Generator verarbeitet werden können, um aus diesen Informationen zu kombinieren. Abschließend wird ein Index für den ganzen Corpus erzeugt, um eine k-Nearest-Neighbour Suche der vom Retriever encodierten Passagen durchführen zu können. Das Modell ist in der Lage, mit dem iterativen Training zu lernen und sich so zu verbessern, dass es die Grund-Modelle übertrifft mit denen es initialisiert wurde. Einige Verbesserungen an der Architektur des Modells sind inspiriert von den Beobachtungen des Modells in den durchgeführten Versuchsreihen. Zum Beispiel werden mehr nicht-hilfreiche Passagen künstlich hinzugegeben, um den Unterschied in den Relevance Scores zwischen hilfreichen und nicht-hilfreichen Passagen zu vergrößern. Von dem Training des Retrievers mit Gold Passagen profitiert das Gesamtmodell, da der Retriever dem Generator ermöglicht, andere Kombinationen von Retriever und Generator, die nicht mit Gold Passagen trainiert wurden, um bis zu 31% zu übertreffen.
description: This thesis proposes a model to predict large gaps inside source code written in the programming languages java and python. The model is internally split into two sub-models: retriever and generator. The speciality of the model is the Fusion-in-Decoder- and retrieval-approach based on relevance scores. With the proposed training a retriever can be trained unsupervised on a corpus of source code. The model learns by filling in random masked out token sequences from a source code query, with the help of gold passages – the full passage without the masked out part from which a query originates – or other source code passages from the corpus. Before generating a prediction, a large document corpus consisting of source code snippets is searched to find useful passages that assist the model in giving a better prediction of the missing code. A core aspect is the usage of relevance scores that represent the usefulness of a given passage for answering a specific query. These scores are produced by the generator and given to the retriever in training to replicate them with its encoding. The generator training depends in turn on the retriever, as only some passages can be processed simultaneously by the generator to perform passages combination. Afterwards an index is applied to the retriever-encoded corpus of passages to conduct a k-nearest-neighbour search. The model was built iteratively and was continuously evaluated. The resulting model is able to improve with iterative learning and outperforms the base models it was initialized with. Some changes in the model architecture were inspired by observation of its behaviour, e.g. providing the retriever in its training with negative samples to push the distinguishment of useful and useless passages to a corresponding query helps the retriever to score better in the experiments. The training of the model benefits from using gold passages in the training of the retriever, as the resulting retriever enables the generator to outperform a generator-retriever-combination that was not trained with gold passages up to 31% depending on the mask length.