310 likes | 417 Views
Universität Heidelberg Computerlinguistisches Seminar Studienprojekt Referent: Dorothee Reinhard Dozent: Dr. Markus Demleitner. DynOntoNLG (Dynamic Ontology & Natural Language Generator). Spezifikationsvortrag 19.12.2006. Inhalte der Präsentation. Was ist DynAMITE?
E N D
Universität Heidelberg Computerlinguistisches Seminar Studienprojekt Referent: Dorothee Reinhard Dozent: Dr. Markus Demleitner DynOntoNLG(Dynamic Ontology & Natural Language Generator) Spezifikationsvortrag 19.12.2006
Inhalte der Präsentation • Was ist DynAMITE? • Wie funktioniert das NLGTool ? • XML-Ausgabedatei • Ansätze für Templates • Benötigte Klassen • Simulation • Vorteile / Nachteile • Geplante Verbesserungen
DynAMITE System Skizze NLG (Natural Language Generator) Parser Input XML-Output DM (Dialogmanager) Anfrage / Content Regeln: Input -> XML-Output FDB (Filmdatenbank) Templates LBS (Location Based System) Class „Movie1“, „Still“, … Ontologie Grundontologie LBS-Konzepte <- -> FDB-Konzepte
NLGTool 1 • Ausgabe von Dialogsätzen • Programmiersprache: JAVA • Hintergrund: Dynamische Ontologie • Basiert auf Grundontologie -> SmartSUMO • Domänenbezogene Konzepte werden angefügt • Konzepte + Strategien der Filminfo-Software • Klassen: Movie1, Still, Actor, Director, Genre • Properties: 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, dyn. 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> <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>
Templates: Erster Ansatz • Brainstorming zu den Properties: • has-title, has-genre, has-director, has-actor, has-length, has-description, has-still, has-movie • Platzhalter für Ergebnis eingesetzt: • <Film1>, <Film2>, …, <FilmN>
Beispiele: Erster Ansatz has-title: • "Hier sehen Sie Informationen zu den Filmen <Film1>, <Film2>, ... , <FilmN>." • „Die folgenden Titel passen zu Ihrer Anfrage: <Film1>, <Film2>, ... , <FilmN>.“ • „Der Name des Films lautet: <Film1>.“
Templates: Zweiter Ansatz • Templates nach Status geordnet: • status=ok; status=error • Templates nach Parametern geordnet: • Profi, Novice - Neutral, Formal, Informal • Platzhalter verkürzt: • %filmPL, %filmSg, %actorSg, …
Beispiele: Zweiter Ansatz has-title: • Anfänger • „In der Datenbank sind folgende Ergebnisse gespeichert: %filmPl.“ • Profi • „Die gesuchten Filme lauten: %filmPl.“ • Anfänger + du • "Hier siehst du Informationen zu den folgenden Filmen %filmPl.“
Templates: Dritter Ansatz I • Platzhalter verallgemeinert: • %prop • Templates angereichert mit Platzhaltern für Synonyme, um Abwechslung in den Dialogen zu erreichen: • %randNPL15, %randNSg22, %randPP03, %randVSg07, %randAPL06, %randMPL04
Templates: Dritter Ansatz II • Synonyme werden zufällig aus einer Liste ausgewählt und anstelle des Platzhalters eingesetzt • Listen: Nomen, Verben, Satzanfänge, Adjektive, Partizipien, Präpositionen, Modifier –> jeweils für Singular / Plural; bei Verben auch Infinitiv
Beispiele: Dritter Ansatz has-title: • Anfänger • „Die folgenden %randNPL05 wurden als Ergebnis zurückgeliefert: %prop.“ • Profi • „%randSPL01 die %randNPL05: %filmPl.“ • „%randSPL01 Ihre %randNPL05: %filmPl.“ has-title Fehlermeldungen: • Anfänger • „Die Datenbank %randVSg10 keine %randNPL14 %randPP04 Anfrage.“ • Profi • „Die Datenbank lieferte keine %randNPL14.“
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 Ontologie • Klassen -> 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 • CreateDynNLGOutput • CreateNonValidatingDOMParser • DynNLGRandomLists • DynNLGTemplates • GetParametersFromXML • RandomDynNLGString
Klassenabhängigkeit DynNLGTemplates - StringinsertRandomStrings(String[] args, String template) - selectRandomString(String[] args, String listname) • GetParametersFromXML • createParameterList(String s, List list) • List createSearchStatement() CreateDynNLGOutput - String getRandomTemplate(String[] args) - String getSpecificTemplate(String[] args, int tempNr) Random RandomDynNLGString - String getRandomString(List list) CreateNonValidatingDOMParser - Document getDocument() DynNLGRandomLists - ListcreateRandomList(String s, List list)
CreateDynNLGOutput • 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
CreateNonValidatingDOMParser • Erstellt einen nicht validierenden DOM-Parser mit dem ein xml-file eingelesen werden kann • hat zwei Konstruktoren: • "CreateNonValidatingDOMParser(String[] args)" -> liest das Dokument an Position 1 ein • "CreateNonValidatingDOMParser(String[] args, int filepos)" -> kann eine bestimmte Position übergeben bekommen ("filepos"), von der er das Dokument einlesen 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
DynNLGTemplates • 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 „RandomDynNLGString" 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
GetParametersFromXML • 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
RandomDynNLGString • 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: Schauspieler eines Films: • „Welche Schauspieler spielen mit?“ • Ergebnisstring
Vorteile / Nachteile • Vorteile: • NLG ist domänenunabhängig • Abwechslung durch Templateliste • Variation durch Synonyme • Nachteil: • Zufällig ausgewählte Templates klingen noch etwas zu künstlich
Geplante Verbesserungen • Dialoge durch Einfügen von Referenzen „natürlicher“ machen • Sessions simulieren – Dialoge voneinander mehr abhängig machen • Wiederholungen vermeiden • Schönere graphische Darstellung
Vielen Dank für Eure Aufmerksamkeit und Frohe Weihnachten!!!