dynontonlg (dynamic ontology & natural language generator) abschlußvortrag 12.03.2007...
TRANSCRIPT
DynOntoNLG(Dynamic Ontology & Natural Language Generator)
Abschlußvortrag
12.03.2007
Universität Heidelberg
Computerlinguistisches Seminar
Studienprojekt
Referent: Dorothee Reinhard
Dozent: Dr. Markus Demleitner
Inhalte der Präsentation Abstract Ziele des Projekts Projekteinordnung Umgesetzte Verbesserungen Programmaufbau Simulation Zusammenfassung und Ausblicke
Abstract
Ausgabe von Filminformationen Dialogmodul Erhält vorverarbeitete Benutzereingaben
in XML-Format Wählt Zufallsdialog aus Gibt Ausgabe an Dialogmanager zurück Dialoge anhand der Konzepte einer
Filminformationsontologie
Ziele des Projekts 1
Abwechslungsreiche Dialoge Wiederverwendbare Struktur Anpassung an Dialogmanager von
DynAMITE Kontextunabhängigkeit Erweiterbare und Veränderbare Form Möglichst natürlichsprachige Dialoge
Ziele des Projekts 2
Höhere Programmqualität gewährleisten-> Vorurteile des Benutzers beilegen-> Interessensfaktor steigern
Anpassung an Benutzerprofil Einarbeitung ins DynAMITE Projekt Entwicklung einer Filminformations-
Ontologie Erweiterter und vereinfachter Datenzugriff
Projekteinordnung Teil des DynAMITE Projekts NLG-Modul zum Dialogmanager Verbesserung der Dialoge Ersatz des vorhandenen Systems Verbesserung der Mensch-Computer-
Interaktion (MCI) -> Benutzerfreundlichkeit Filminfo-Ontologie zusätzlich zu bereits
vorhandener Datenbank
DynAMITE Versuchsaufbau
Umgesetzte Verbesserungen
Einfügen von Referenzen -> ja Profi-Dialoge angepaßt
Sessions simulieren -> ja Mehrere Ausgaben gleichzeitig
Wiederholungen vermeiden -> etwas Durch Referenzen Sätze vereinfacht und verkürzt
Schönere graphische Darstellung -> nein-> nicht nötig, da es ja sowieso im Hintergrund arbeitet und für den Benutzer unsichtbar ist
Referenzen 1 Zu Beginn des Programms werden
Referenzobjekte simuliert Neues Referenzobjekt eingefügt ->
Referenzobjekt ersetzt und neues Referenzpronomen erstellt
„Filmtitel“ -> „er“ -> Referenzpronomen Referenz zu Schauspieler und Regisseur
wird aus Ausgabe-XML-file ausgelesenNumerus, Genus
Referenzen 2 Referenzen am Satzanfang und im Satz Template -> Referenzpronomen wird an
Text angepaßt -> Kasus, Numerus, Genus Referenzplatzhalter z.B.:
„%refMovie1SgGenF“ -> „Seine“; „Ihre“ Referenzpronomen automatisch anhand
von Synonym-Listen Referenzobjekte anhand der
Ontologiekonzepte : Movie1, Genre, Actor, Director, Description, Length, Still
DynAMITE System Skizze
FDB(Filmdatenbank)
DM(Dialogmanager)
Ontologie
Grundontologie
Parser NLG(Natural Language Generator)
LBS(Location Based
System)Class „Movie1“, „Still“, …
Templates
XML-OutputInput
Regeln: Input -> XML-OutputAnfrage /
Content
-> FDB-KonzepteLBS-Konzepte <-
NLGTool 1
Ausgabe von Dialogsätzen Programmiersprache: JAVA Hintergrund: Dynamische Ontologie
Basiert auf Grundontologie -> SmartSUMODomänenbezogene Konzepte werden angefügt
Konzepte + Strategien der Filminfo-SoftwareKlassen: Movie1, Still, Actor, Director, GenreProperties: has-title, has-actor, has-genre,…
NLGTool 2
Benutzereingabe -> Parser -> DM NLGTool: XML-Datei von DM + Templates
mit Platzhaltern => Dialogsatz als Output Dialogmanager -> XML-Datei (anhand von
I/O-Regeln, Filmdatenbank, dynamische Ontologie)
XML-Ausgabedatei Dialogakte: message-inform, message-
accept, message-reject, etc. Status: [status: warning], [status: busy],
[status: idle], [status: error], [status: ok], [status: failed], [status: offer]
Parameter: Profi, Novice - Neutral, Formal, Informal
Ontologie: Class, Property, Content
Beispiel: XML-Ausgabedatei<Present>
<present><dialogact type="message_inform" status="ok"/><Parameter parameter="NoviceNeutral"/><Class name="Movie1">
<Class name="Director"/><Property value="has-name" class="Director"
number="PL" gender="neutral"><Content content="Steven Spielberg"/><Content content="Francis Ford Coppola"/><Content content="George Lucas"/><Content content="Sofia Coppola"/>
</Property></Class>
</present></Present>
Beispiele: Randomlisten Nomen + Singular:%randNSg01 = „Impression / Aufnahme / Ansicht / Abbildung / Momentaufnahme
/ Grafik“; %randNSg03 = „Galerie / Fotogalerie / Standbildergalerie / Snapshotgalerie /
Schnappschußgalerie“;%randNSg04 = „Namen des Films / Titel des Films / Filmnamen / Filmtitel / Film /
Titel / Namen / Titel des Mediums / Medientitel / Namen des Mediums / Mediennamen / Namen des Streifens / Titel des Streifens / Namen des Filmstreifens / Titel des Filmstreifens / Namen des Kinofilms / Namen des Spielfilms / Titel des Kinofilms / Titel des Spielfilms / Namen des Filmwerks / Titel des Filmwerks / Namen des Werks / Titel des Werks“;
%randNSg06 = „Bild / Foto / Ausschnitt / Filmausschnitt / Standbild / Schnappschuß / Snapshot“;
%randNSg07 = „Bildes / Fotos / Ausschnitts / Filmausschnitts / Standbildes / Schnappschusses / Snapshots“;
%randNSg09 = „Film / Titel / Filmtitel / Streifen / Filmstreifen / Kinofilm / Spielfilm / Medientitel“;
%randNSg11 = „Name des Films / Titel des Films / Filmname / Filmtitel / Film / Titel / Name / Titel des Mediums / Medientitel / Name des Mediums / Medienname / Name des Streifens / Titel des Streifens / Name des Filmstreifens / Titel des Filmstreifens / Name des Kinofilms / Name des Spielfilms / Titel des Kinofilms / Titel des Spielfilms / Name des Filmwerks / Titel des Filmwerks / Name des Werks / Titel des Werks“;
Templates: Finaler Ansatz
Templates angereichert mit den Konzepten aus der OntologieKlassen -> Oberklasse, zweite Klasse (None)
Movie1, Still, Actor, Director, Genre
Properties -> value, class, number, gender Value: has-title, has-genre, has-length, … Class: Movie1, Still, Genre, Actor, ... Number: Sg, PL Gender: M, F, neutral
Beispiele: Finaler Ansatz
has-title: Anfänger
<Class name=„Movie1“/><NotClass name=„Still“/>”%randMPL02 %randNPL05 wurden als %randNSg25 zurückgeliefert: <Property value=„has-title“ class=„Movie1“ number=„PL“/>.”
Final Templates: XML-Ausschnitt<NLGTemplates>
<NLGTemplate><dialogact type="message_inform" status="ok"/>
<Parameter parameter="NoviceNeutral"/><Class name="Movie1">
<NotClass name="Still"/><Property value="has-title" class="Movie1" number="PL">
<Template template="%randMPL02 %randNPL05 wurden als %randNSg25 zurückgeliefert: %prop."/>
<Template template="Die %randAPL06 %randNPL18 %randVPL05: %prop."/>
<Template template="Es sind %randNPL18 zu %randMPL03 %randNPL06 %randPT08: %prop."/>
</Property><Property value="has-title" class="Movie1" number="Sg">
<Template template="%randMSg02 %randNSg09 wurde als %randNSg25 zurückgeliefert: %prop."/>
<Template template="%randMSg10 %randNSg44 wurde als %randNSg25 zurückgeliefert: %prop."/>
<Template template="Die %randASg03 %randNSg43 %randVSg07: %prop."/>
</Property></Class>
</NLGTemplate></NLGTemplates>
Benötigte Klassen
CreateDynNLGOutput04
CreateNonValidatingDOMParser01
DynNLGRandomLists01
DynNLGTemplates01
XMLParameters01
RandomDynNLGString01
Klassenabhängigkeit
CreateDynNLGOutput04- String getRandomTemplate(String[] args)
- String getSpecificTemplate(String[] args, int tempNr)
XMLParameters01- createParameterList(String s, List list)
- List createSearchStatement()
DynNLGTemplates01- String insertRandomStrings(String[] args, String template)- selectRandomString(String[] args, String listname)
CreateNonValidatingDOMParser01- Document getDocument()
RandomDynNLGString01- String getRandomString(List list)
DynNLGRandomLists01- List createRandomList(String s, List list)
Random
CreateDynNLGOutput04 Hauptklasse des DynamiteNLGTools - ruft alle anderen
Klassen auf Bekommt auf Kommandozeile zuerst das xml-file mit den
gewünschten Parametern und den auszugebenden Inhalten aus der Ontologie übergeben (z.B.: "TestFileForNLGTemplates.xml"); An zweiter Stelle steht das xml-file mit allen zur Verfügung stehenden Parametern und Templates der Domäne (z.B.: "FilmDatabaseTemplates.xml")
Die gewünschten Parameter werden dann im Template-xml-file gesucht und per Zufall ein passendes Template ausgesucht
Danach werden noch die Platzhalter durch Wörter aus den Synonymlisten ersetzt und der gesuchte Inhalt aus der Ontologie als Ergebnis in das Template eingesetzt
Die so entstandene Sprachausgabe wird auf dem Bildschirm ausgegeben und als String an den Dialogmanager zurückgeliefert
CreateNonValidatingDOMParser01 Erstellt einen nicht validierenden DOM-Parser mit
dem ein xml-file eingelesen werden kann
hat zwei Konstruktoren: "CreateNonValidatingDOMParser01(String[]
args)" -> liest das Dokument an Position 1 ein"CreateNonValidatingDOMParser01(String[]
args, int filepos)" -> kann eine bestimmte Position übergeben bekommen ("filepos"), von der das Dokument eingelesen werden soll
DynNLGRandomLists Erstellt Synonymlisten mit Wörtern
verschiedener Wortarten Synonyme befinden sich in Strings und werden
mit Hilfe der Methode "createRandomList(String s, List list)" in Listen umgeformt
Jede Liste bekommt ihren eigenen Namencode, um von einer anderen Methode aufgerufen werden zu können
Dieser Namencode wird mit "%rand" zu einem Platzhalter in den Templates zusammengesetzt, z.B.: "%randNSg05"
Listen können beliebig durch anfügen von Wörtern erweitert werden
Auch neue Listen können erstellt werden
DynNLGTemplates01 Das zufällig ermittelte Template mit Platzhaltern
wird durch die Funktion "insertRandomStrings" in seine Einzelteile zerlegt
Danach werden die Namen der Random-Platzhalter in der Methode "selectRandomString(String[] args, String listname)" ermittelt und die Klasse „RandomDynNLGString01" aufgerufen, die dann per Zufall einen String aus der entsprechenden Synonym-Liste auswählt und zurückliefert
Die so ermittelten Random-Strings werden anstelle des Platzhalters in das Template eingesetzt und als Output zurückgegeben
XMLParameters01 Benötigt mindestens ein xml-file als
Kommandozeilenparameter Erstellt einen nicht-validierenden DOM-
Parser, der dann das xml-file an Position 1 der Kommandozeilen-paramtereliste einliest
Die gewünschten Parameter werden in Variablen geschrieben und als Ergebnisstring zurückgeliefert
Der auszugebende Inhalt aus der Ontologie wird ebenfalls in eine Variable geschrieben
RandomDynNLGString01 Erstellt pseudo Zufallszahlen, die benutzt
werden, um einen Zufallsstring aus einer Liste von Templatestrings aus einem xml-file zu ermitteln
Implementiert die Methode "String getRandomString(List list)", der eine Liste von Strings übergeben werden muß
Mit Hilfe dieser Klasse kann der Inhalt der Dialogtemplates zufällig variiert werden, um Dialogsätze zu erstellen, die möglichst nahe an natürliche Sprache herankommen sollen
Simulation Beispiel:
Gesucht: Filmtitel, Schauspieler, Genre, Länge, Regisseur, Bilder
Vergleich der Ausgaben für Anfänger und Profi
1) Anfängerdialog -> NoviceNeutral 2) Profidialog mit Referenzen
-> ProfiNeutral Ergebnis
Vorteile / Nachteile Vorteile:
NLG ist domänenunabhängig Abwechslung durch Templateliste Variation durch Synonyme Referenzen verbessern die Natürlichkeit
Nachteil: Synonyme passen manchmal nicht so gut
zusammen, wenn zu viele Plathalter in einem Satz -> bestimmte Kombinationen klingen unnatürlich
Evaluationsgedanken Manche Begriffe aus den Listen passen mit anderen
Begriffen weniger gut – mit anderen besser - zusammen Manche Begriffe passen besser für Profis, manche eher
für Anfänger (vgl. Info - Information) -> Listen ändern Regelwerk bei message templates fehlt -> wann Film im
Singular und wann im Plural bei Genre, Beschreibung, … zu setzen ist -> wird bei Referenzen gelöst
Unterschied zwischen Anfänger und Profi Templates besser betonen und herausstellen -> klare Unterschiede und Grenzen -> besser durch Referenzen gelöst
Eventuell mit anderem Kontext testen -> selbe Regeln, nur andere Konzepte -> xml-Ausgabe-Datei, Template-XML-file anpassen z.B.: Navigationsontologie
Zusammenfassung Funktioniert schon ganz schön Wie erwartet: Natürliche Sprache zu
simulieren ist sehr schwer Ziele wurden erreicht
Wiederverwendbar, kontextunabhängig Erweiterbar, veränderbar Abwechslungsreichere Dialoge Benutzerprofilbasiert Erweiterter Datenzugriff
Ausblicke Eventueller Einbau von anderen
Referenzen Test mit anderer Sprache Abwechslung zwischen Pronomenreferenz
und Koreferenz durch Synonym Wiederholungen von Wortteilen innerhalb
von Sätzen vermeiden Abwechslung bei Spiellänge des Films ->
in Minuten und Stunden aufteilen, Minutenangabe, Stundenangabe
Vielen Dank für Eure Aufmerksamkeit !!!
Noch Fragen ?