Lernsysteme für Programmierung mit Hilfe tiefer rekursiver neuronaler Netze
Allgemeines und fachbezogenes Lehren und Lernen
Zusammenfassung der Projektergebnisse
Programmieren zu lernen ist anspruchsvoll. Daher wäre es hilfreich, Programmierneulinge zu unterstützen, etwa mit Hinweisen, wie ein nächster Programmierschritt aussehen könnte. Menschliche Lehrkräfte einzusetzen wäre am besten, ist aber in großen Klassen oder massiven, offenen Online-Kursen nicht zu leisten. In diesem Projekt haben wir eine automatische Methode entwickelt, die für ein teilweise fertiges Programm – basierend auf dem Programmierverhalten früherer Lernender – eine Version zurück gibt, die näher an einer korrekten Lösung liegt. Das erste Modul unserer Methode ist ein Auto-Encoder. Dabei handelt es sich um ein künstliches neuronales Netz, das ein Programm in einen Vektor – also eine Reihe von Zahlen – und einen Vektor wieder in ein Programm übersetzen kann. Wichtig dabei: Unser Auto-Encoder berücksichtigt die Grammatik der Programmiersprache und stellt sicher, dass alle ausgegebenen Programme syntaktisch korrekt sind. Diese einzigartige Kombination aus grammatikalischem Wissen und künstlichen neuronalen Netzen macht unseren Auto-Encoder besonders geeignet für Programme, was sich in einem niedrigen Kodierfehler niederschlägt. Da künstliche neuronale Netze eine große Menge Trainingsdaten benötigen, haben wir eine Kollaboration mit dem australischen e-learning Unternehmen Grok Learning geschmiedet, das freundlicherweise einen großen, anonymisierten Datensatz von Anfänger*innenprogrammen zur Verfügung gestellt hat. Wir haben ein Netz auf diesen Daten trainiert und es für künftige Forschung frei zugänglich veröffentlicht. Zusätzlich haben wir eine Variante unseres Netzes entwickelt, das auch auf kleinen Datennmengen trainiert werden kann. Das zweite Modul unserer Methode ist ein Modell, das den wahrscheinlichsten nächsten Schritt zu einem Eingabeprogramm vorhersagen kann. Solch ein Vorhersagemodell benötigt Trainingsdaten für jede spezifische Aufgabe. Das ist eine Herausforderung, weil für neu entwickelte Aufgaben naturgemäß nur wenig Daten zur Verfügung stehen – im Extremfall nur ein einziges Lehrbeispiel. Glücklicherweise erleichtert unser Auto-Encoder die Vorhersage: Er übersetzt Programme in Zahlen, sodass wir nur vorhersagen müssen, wie sich diese Zahlen verändern. Dazu genügt ein einfaches, lineares Modell, das datensparsam und leicht zu trainieren ist – und für das sich beweisen lässt, dass Vorhersagen einer richtigen Lösung näher kommen. Damit konnten wir die Vorhersage verglichen mit bisherigen Methoden wesentlich beschleunigen, wobei der Vorhersagefehler etwa gleich blieb. Über die Hinweisgabe hinaus haben wir unseren Auto-Encoder auch verwendet, um den Programmierfortschritt von Lernenden zu visualisieren, um typische Lösungsstrategien zu erkennen, und um ungewöhnliche oder neuartige Lösungen zu identifizieren. Diese zusätzlichen Techniken können Lehrkräfte dabei unterstützen, Lernendendaten zu verstehen und ihre Lehre entsprechend anzupassen. Langfristig können unsere Methoden eine Grundlage dafür bieten, automatisch Programmierkenntnisse zu erkennen und Lernfortschritt beobachtbar zu machen. Jenseits der Lehre können unsere Werkzeuge in der chemischen und medizinischen Forschung nützlich sein, um neue Stoffe mit gewünschten Eigenschaften zu finden, ohne sie aufwändig synthetisieren zu müssen. Ferner können unsere Vorhersagemodelle auf andere Felder angewendet werden, etwa Verkehrs-, soziale, oder epidemiologische Netzwerke. Wir unterstützen solche Anwendungen, indem wir sämtliche Software und Publikationen frei verfügbar bereitstellen. Die Covid-19-Pandemie hat uns genötigt, unsere Forschung vollständig digital durchzuführen. Deshalb konnten wir unsere Methoden nicht – wie ursprünglich geplant – im Klassenraum testen. Trotzdem haben wir, dank der Zusammenarbeit aller Beteiligten, die Projektziele erreicht und sind teilweise darüber hinaus gegangen. Besonders erfreulich war der erste Platz in einem internationalen Wettbewerb für Educational Datamining. Zusammenfassend haben wir im Rahmen dieses Projekts einen Satz neuer, frei verfügbarer Werkzeuge für die Programmierlehre und darüber hinaus entwickelt und wir freuen uns auf künftige Anwendungen dieser Werkzeuge.
Projektbezogene Publikationen (Auswahl)
- (2020). Assessing the Quality of Mathematics Questions Using Student Confidence Scores. Ed. by Jack Wang et al. Winning contribution for task 3 of the NeurIPS 2020 Education Challenge
McBroom, Jessica and Benjamin Paaßen
- (2020). Recursive Tree Grammar Autoencoders
Paaßen, Benjamin, Irena Koprinska, and Kalina Yacef
- (2021). “Graph Edit Networks”. In: Proceedings of the Ninth International Conference on Learning Representations (ICLR 2021). Ed. by Shakir Mohamed et al.
Paaßen, Benjamin, Daniele Grattarola, et al.
- “Mapping Python Programs to Vectors using Recursive Neural Encodings”. In: Journal of Educational Datamining
Paaßen, Benjamin, Jessica McBroom, et al.
(Siehe online unter https://doi.org/10.5281/zenodo.5634224)