Die neuro-symbolische Programmiersprache Scallop
(scallop-lang.org)- Scallop ist eine deklarative Sprache, um symbolisches Schließen auf Basis logischer Regeln in AI-Anwendungen einzubetten, und basiert auf Datalog, einer Abfragesprache für relationale Datenbanken
- Der Solver unterstützt diskretes, probabilistisches und differenzierbares Schließen, sodass je nach Anforderungen der Anwendung die passende Inferenzmethode gewählt werden kann
- Über Python-Bindings lassen sich Module für logisches Schließen in Programme einbetten und in bestehende Machine-Learning-Pipelines mit PyTorch integrieren
- Bei Vision- und NLP-Aufgaben werden neuronale Komponenten, die von CNNs oder Transformers erzeugt werden, gemeinsam mit Komponenten für logische Regeln kombiniert
- Es werden End-to-End-Beispiele bereitgestellt, bei denen neuronale Komponenten und Regeln gemeinsam trainiert werden, etwa CLEVR für visuelles Schließen, Pathfinder zur Bestimmung von Konnektivität und die Auswertung handgeschriebener Formeln
Kernbestandteile von Scallop
-
Language
- Scallop ist eine deklarative Sprache für symbolisches Schließen in AI-Anwendungen
- Die Grundlage ist Datalog, eine auf logischen Regeln basierende Abfragesprache für relationale Datenbanken
-
Solver
- Scallop ist ein erweiterbarer Datalog-Solver
- Er unterstützt Modi für diskretes Schließen, probabilistisches Schließen und differenzierbares Schließen
- Jeder Inferenzmodus kann auf unterschiedliche Anforderungen von AI-Anwendungen abgestimmt werden
-
Framework
- Scallop stellt Bindings bereit, mit denen sich Module für logisches Schließen in Python-Programmen nutzen lassen
- Es lässt sich tief in bestehende Machine-Learning-Pipelines mit PyTorch integrieren
Beispielanwendungen
- CLEVR ist eine Aufgabe zum visuellen Schließen, bei der Fragen wie „Wie viele blaue Objekte gibt es?“ zu einfachen 3D-Objekten in Bildern beantwortet werden
- Eine neuronale Komponente erzeugt einen Scene Graph des Bildes und eine programmatische Query, die die Frage repräsentiert
- Die Inferenzkomponente spezifiziert Operationen wie Auswählen, Vergleichen und Zählen von Objekten anhand vorgegebener Attribute als logische Regeln
- Scallop integriert diese Komponenten in ein gemeinsames Framework und ermöglicht End-to-End-Training
- Pathfinder ist eine Aufgabe zum Schließen über weitreichende Konnektivität, bei der in einem Schwarz-Weiß-Bild mit zwei Punkten und gestrichelten Linien entschieden wird, ob die beiden Punkte durch gestrichelte Linien verbunden sind
- Sie lässt sich mit einer einfachen neuronalen Architektur zum Erkennen von Punkten und Strichen sowie wenigen Zeilen logischer Regeln in Scallop aufbauen
- Die gezeigten Regeln behandeln
dash(x, y)als Pfad und verbinden rekursivpath(x, z), dash(z, y), umis_connected()zu bestimmen - Diese Konfiguration erzielt eine höhere Leistung als aktuelle Transformers
- Die Auswertung handgeschriebener Formeln ist eine Aufgabe, bei der Sequenzen handgeschriebener Symbole aus Ziffern von 0 bis 9 und einfachen arithmetischen Operationen erkannt und die Ausdrücke berechnet werden
- Das Beispiel betrachtet
1 + 3 / 5als Eingabe und berechnet den Ergebniswert1.6 - Mit Scallop lässt sich ein vollständiger kontextfreier Grammatik-Parser erstellen, der probabilistische Eingaben parsen kann
- Parser und Evaluator können in 5 Zeilen Scallop-Code geschrieben werden
- Dieses Programm kann gemeinsam mit einem neuronalen Modell zur Erkennung einzelner Symbole End-to-End trainiert werden und findet nach dem Training den wahrscheinlichsten Ausdruck und gibt dessen Auswertung zurück
- Das Beispiel betrachtet
Noch keine Kommentare.