Sprachgesteuerte Computersysteme werden heutzutage von Millionen von Nutzern verwendet; Chatbots, virtuelle Assistenten, wie Siri oder Google Assistant, und Smarthomes sind längst fester Bestandteil des Alltags vieler Menschen. Zwar erscheinen derartige Systeme inzwischen intelligent; tatsächlich reagieren sie aber nur auf einzelne Befehle, die zudem bestimmte Formulierungen erfordern. Die Nutzer sind außerdem auf vorgefertigte Funktionalitäten beschränkt; neue Befehle können nur von Entwicklern einprogrammiert und vom Hersteller zur Verfügung gestellt werden. In Zukunft werden Nutzer erwarten, intelligente Systeme nach ihren Bedürfnissen anzupassen, das heißt programmieren zu können.
Das in dieser Arbeit beschriebene System ProNat ermöglicht Endnutzer-Programmierung mit gesprochener Sprache. Es befähigt Laien dazu, einfache Programme für unterschiedliche Zielsysteme zu beschreiben und deren Funktionalität zu erweitern. ProNat basiert auf PARSE, einer eigens entworfenen agentenbasierten Architektur für tiefes Sprachverständnis. Das System ermöglicht die Verwendung alltäglicher Sprache zur Beschreibung von Handlungsanweisungen. Diese werden von ProNat als Programm für ein Zielsystem interpretiert, das eine Anwendungsschnittstelle zur Endnutzer-Programmierung anbietet. ... mehrBisherige Ansätze zur Programmierung mit natürlicher Sprache ermöglichen nur die Erzeugung kurzer Programme anhand textueller Beschreibungen. Da die meisten Systeme monolithisch entworfen wurden, können sie zudem nur mit großem Aufwand adaptiert werden und sind überwiegend auf die Anwendung einer Technik (z. B. maschinelles Lernen) sowie auf eine Anwendungsdomäne festgelegt (z. B. Tabellenkalkulation). Ansätze, die gesprochene Sprache verarbeiten, können hingegen bisher nur einzelne Befehle erfassen.
Um die Restriktionen bisheriger Ansätze aufzuheben, wird eine neuartige Architektur entworfen. Die Kernkomponenten der Architektur PARSE bilden unabhängige Agenten, die je einen bestimmten Aspekt der natürlichen Sprache analysieren. Die Kapselung in unabhängige Agenten ermöglicht es, je Teilaspekt zum Verständnis der Sprache eine andere Technik zu verwenden. Die Agenten werden nebenläufig ausgeführt. Dadurch können sie von Analyseergebnissen anderer Agenten profitieren; unterschiedliche Sprachanalysen können sich so gegenseitig unterstützen. Beispielsweise hilft es, sprachliche Referenzen wie Anaphern aufzulösen, um den Kontext des Gesagten zu verstehen; manche Referenzen können wiederum nur mithilfe des Kontextes aufgelöst werden. Ihr Analyseergebnisse hinterlegen die Agenten in einer geteilten Datenstruktur, einem Graphen. Die Architektur stellt sicher, dass keine Wettlaufsituationen eintreten und nur gültige Änderungen am Graphen durchgeführt werden. Die Agenten werden so lange wiederholt ausgeführt, bis keine oder nur noch zyklische Änderungen eintreten. Neben den Agenten gibt PARSE die Verwendung von Fließbändern zur Vor- und Nachverarbeitung vor. Zudem können externe Ressourcen, wie Wissensdatenbanken oder Kontextmodellierungen, angeschlossen werden.
Das System ProNat entsteht, indem konkrete Agenten und Fließbandstufen für die Rahmenarchitektur PARSE bereitgestellt werden. Zusätzlich werden Informationen über die Anwendungsdomäne (das heißt die Anwendungsschnittstelle des Zielsystems und gegebenenfalls eine Modellierung der Systemumgebung) in Form von Ontologien als externe Ressource angebunden. Eine gesprochene Äußerung wird von ProNat vorverarbeitet, indem zunächst das Audiosignal in eine textuelle Wortsequenz überführt wird. Anschließend erfolgt eine grundlegende syntaktische Analyse, bevor ein initialer Graph als Analysegrundlage für die Agenten erzeugt wird. Die Interpretation des Gesagten als Programm obliegt den Agenten. Es wurden sechzehn Agenten entwickelt, die sich in drei Kategorien unterteilen lassen: Erstens, Agenten, die allgemeine Sprachverständnis-Analysen durchführen, wie die Disambiguierung von Wortbedeutungen, die Auflösung von sprachlichen Referenzen oder die Erkennung von Gesprächsthemen. Zweitens, Agenten, die das Gesagte auf programmatische Strukturen, wie Anwendungsschnittstellenaufrufe oder Kontrollstrukturen, untersuchen; hierzu zählt auch ein Agent, der aus verbalisierten Lehrsequenzen Methodendefinitionen synthetisiert. Da die Agenten unabhängig voneinander agieren, kann zur Lösung der jeweiligen Problemstellung eine beliebige Technik eingesetzt werden. Die Agenten zur Erkennung von Kontrollstrukturen verwenden beispielsweise Heuristiken, die auf syntaktischen Strukturen basieren, um ihre Analysen durchzuführen. Andere Agenten, wie die Agenten zur Disambiguierung von Wortbedeutungen oder zur Bestimmung der Gesprächsthemen, verwenden Wikipedia, Wordnet oder ähnliche Quellen und inferieren anhand dieser Informationen. Zuletzt verwenden einige Agenten, wie beispielsweise der Agent zur Erkennung von Lehrsequenzen, maschinelles Lernen. Die Interpretation einer gesprochenen Äußerung erfolgt dementsprechend mittels einer Kombination von sowohl regel- als auch statistik- und wissensbasierten Techniken. Dank der strikten Trennung der Agenten können diese einzeln (und zumeist unabhängig voneinander) evaluiert werden. Hierzu wurden parallel zur Entwicklung der Agenten fortwährend mithilfe von Nutzerstudien realistische Eingabebeispiele gesammelt. Für jeden Agenten kann somit überprüft werden, ob er einen zufriedenstellenden Beitrag zur Interpretation des Gesagten beiträgt. Das gemeinschaftliche Analyseergebnis der Agenten wird in der Nachverarbeitung sukzessive in ein konkretes Programm übersetzt: Zunächst wird ein abstrakter Syntaxbaum generiert, der anschließend in Quelltext zur Steuerung eines Zielsystems überführt wird.
Die Fähigkeit des Systems ProNat, aus gesprochenen Äußerungen Quelltext zu generieren, wurde anhand von drei unabhängigen Untersuchungen evaluiert. Als Datengrundlage dienen alle in den Nutzerstudien gesammelten natürlichsprachlichen Beschreibungen. Zunächst wurden für eine Online-Studie UML-Aktivitätsdiagramme aus gesprochenen Äußerungen generiert und 120 Probanden zur Bewertung vorgelegt: Der überwiegende Teil der Aktivitätsdiagramme (69%) wurde von der Mehrheit der Probanden als vollständig korrekt eingestuft, ein vielversprechendes Ergebnis, da die gesprochenen Äußerungen die Synthese von bis zu 24 Anweisungen (bzw. Aktivitäten) sowie Kontrollstrukturen erfordern. In einer zweiten Untersuchung wurde Java-Quelltext, bestehend aus Aufrufen einer Anwendungsschnittstelle zur Steuerung eines humanoiden Roboters, synthetisiert und mit einer Musterlösung verglichen: ProNat konnte Aufrufe meist korrekt erzeugen (F1: 0,746); auch die Synthese von Kontrollstrukturen gelingt in 71% der Fälle korrekt. Zuletzt wurde untersucht, wie gut ProNat anhand von natürlichsprachlichen Beschreibungen neue Funktionen erlernen kann: Verbalisierte Lehrsequenzen werden mit einer Genauigkeit von 85% in Äußerungen erkannt. Aus diesen leitet ProNat Methodendefinitionen ab; dabei gelingt es in über 90% der Fälle, einen sprechenden Methodennamen zu erzeugen. Auch der Aufruf der neu erlernten Funktion (durch natürlichsprachliche Anweisungen) gelingt mit einer Genauigkeit von 85%. Zusammengenommen zeigen die Untersuchungen, dass ProNat grundsätzlich in der Lage ist, Programme aus gesprochenen Äußerungen zu synthetisieren; außerdem können neue Funktionen anhand natürlichsprachlicher Beschreibungen erlernt werden.