Ruprecht-Karls-Universität Heidelberg Computerlinguistisches Seminar SS 2002 HS: Parsing Dozentin: Dr. Karin Haenelt Referentin: Anna Björk Nikulásdóttir 10.06.02 _____________________________________________________________________________________ Probabilistisches Parsing Teil II 1. Parsingmodelle Ein probabilistischer Parser hat die Aufgabe, die wahrscheinlichste(n) Analyse(n) 1 eines Satzes auszugeben. In der PCFG ist die Wahrscheinlichkeit eines Baumes T, als Analyse des Satzes S, als das Produkt der Wahrscheinlichkeiten aller Regel r, die zum Expandieren jedes Knotens n im Baum benötigt werden, definiert: P(T , S ) = ∏ p (r (n )) (1) n∈T Für einen lexikalisierten PCFG-Parser sieht die Gleichung so aus: P(T , S ) = ∏ p (h (n ) | m( n )) × p( r( n) | h (n )) (2) n∈T Wobei h für den Kopf von n steht und m für den Kopf des Mutterknotens von n. P (T,S) ist einerseits die vereinte Wahrscheinlichkeit vom Baum und Satz und gleichzeitig die Wahrscheinlichkeit von T ( P(T) ): Gemäß dem Multiplikationssatz gilt: P (T,S) = P(T)P(S | T) Da jedoch der Baum alle Wörter des Satzes beinhaltet, ist P (S | T) = 1.0 und somit gilt: P(T,S) = P(T)P(S|T) = P(T) (3) Um jetzt die wahrscheinlichste Analyse eines Satzes zu ermitteln, bekommt der Parser folgende Aufgabe: Tˆ ( S ) = arg max P (T | S ) (4) T ∈τ ( S ) Gemäß der Definition der bedingten Wahrscheinlichkeit gilt: P(T | S) = P (T, S) / P (S) Gesucht wird die wahrscheinlichste Analyse für einen Satz, also bleibt S konstant und kann damit eliminiert werden, übrig bleibt P (T,S). Wie oben gezeigt gilt: P (T,S) = P(T) und damit kann die Ausgangsformel vereinfacht werden: Tˆ ( S ) = arg max P (T ) (Jurafsky/Martin(2000) S.452) T ∈τ ( S ) 1 Hier und im Folgenden ist mit "Analyse" (engl.) "parse" gemeint. 1 2. Algorithmen Viele der Standardalgorithmen für Parsing können um probabilistische Komponenten erweitert werden, so z.B. der Earley Algorithmus und der CYK (Cocke-YoungerKasami) Algorithmus. Außerdem wird der Viterbi Algorithmus häufig benutzt, sowie Algorithmen aus dem Bereich der künstlichen Intelligenz, von denen hier zwei vorgestellt werden. Die Anforderung an einen Algorithmus für probabilistisches Parsing kann so formuliert werden: Gegeben ist ein Graph oder Baum, wo die Kanten mit Wahrscheinlichkeiten (und evtl. weiteren Informationen) versehen sind, finde den optimalen Pfad und tue dies mit einem minimalen Rechenaufwand. 2.1. Der stack decoding Algorithmus Der stack decoding Algorithmus ist eine Suchmethode, um baumstrukturierte Suchräume zu durchsuchen. Im Bereich der künstlichen Intelligenz wurden nach diesem Prinzip sog. uniform-cost Algorithmen entwickelt. Uniform-cost heißt, dass immer der Knoten zuerst expandiert wird, der am wenigsten Kosten verursacht. Übertragen auf probabilistisches Parsing ist das der Knoten mit der höchsten Wahrscheinlichkeit. Nach jeder Expansion werden die Ableitungen in einer priority queue gespeichert und nach Wahrscheinlichkeit geordnet. Es werden jedoch i.d. Regel alle Ableitungen abgearbeitet, was zwar die optimale Lösung garantiert, aber sehr teuer werden kann. à uniform-cost search findet garantiert die optimale Lösung, ist jedoch nicht sehr effektiv. Eine effektivere Variante der uniform-cost search ist die sog. beam-search: Beam-search ist eine heuristische Suchmethode, in der eine Anzahl fast optimaler Alternativen (das "beam") parallel überprüft werden. Heuristisch, weil heuristische Regeln zum Aussortieren der Alternativen benutzt werden, die nicht vielversprechend sind. So wird das beam möglichst klein gehalten. Den Suchraum kann man sich als einen gerichteten Graph vorstellen, wo jeder Knoten ein Zustand ist und jede Kante die Anwendung eines Operators darstellt, der zum Nachfolgeknoten führt. Das Ergebnis ist ein Pfad vom Anfangszustand zum Endzustand. Es werden 4 Operatoren benötigt: - NEXT: Expandiert einen Knoten zu allen seinen Nachfolgeknoten - SCORE: Evaluiert einen Zustand, indem er die Wahrscheinlichkeit berechnet, dass dieser Zustand zu einer optimalen Lösung gehört. - PRUNE: Wählt die Knoten aus, die durch SCORE die besten Ergebnisse erzielt haben. - FOUND: Überprüft, ob das Ziel schon erreicht ist. Es werden 2 Datenstrukturen benötigt: - currentStates: Enthält die Zustände, die erweitert werden sollen. - canditateStates: Enthält die neuen Zustände. 2 Algorithmus: 1 2 3 4 5 6 7 8 9 Initialisierung: currentStates = initialState Schleife: while (not FOUND (currentStates)) { candidateStates = NEXT (currentStates) SCORE (candidateStates) currentStates = PRUNE (candidateStates) } Der PRUNE-Operator ist entscheidend: Wenn er zu großzügig ist, d.h. zu viele Zustände durchlässt, wird die Suche teuer. Im Extremfall gleicht die Suche einer einfachen breadth-first-Suche. Ist der PRUNE-Operator dagegen zu streng, wird das Risiko höher, den Pfad zu löschen, der zur Optimalen Lösung führt. à Beam-search kann eine sehr kosteneffektive Suchmethode sein, die wahrscheinlich auch die optimale Lösung findet, das ist jedoch nicht garantiert. (Shapiro et.al. (1987) Bd. 1 S. 56-57) 2.2. A* Algorithmus Der A* Algorithmus ("A-Stern" / engl. "A-Star") berücksichtigt nicht nur die Wahrscheinlichkeit des schon durchgelaufenen Pfades, sondern auch wie wahrscheinlich es ist, dass dieser zu einer guten Lösung führt. Hierzu wird eine geschätzte Zahl eingeführt, hˆ (n ) , welche die Wahrscheinlichkeit des besten Pfades von n bis Ende schätzt: f ( n) = g (n ) + hˆ(n ) g(n) ist die Wahrscheinlichkeit des schon durchgelaufenen Pfades. f(n) ist somit die geschätzte Wahrscheinlichkeit des besten Pfades durch n. Operatoren: ESTIMATE (h(n)): schätzt die Wahrscheinlichkeit des Pfades von n bis Ende SCORE: berechnet g(n) + h(n), ordnet die Zustände nach dem Ergebnis FOUND: überprüft, ob das Ziel schon erreicht ist Variablen und Datenstrukturen: h(n) : currentStates : candidateStates: die geschätzte Wahrscheinlichkeit des Pfades von n bis Ende enthält die Zustände, die erweitert werden sollen enthält die neuen Zustände 3 Algorithmus: 1 2 3 4 5 6 7 8 9 10 11 Initialisierung: currentStates = initialState Schätzung: ESTIMATE (h(initialState)) Schleife: while (not FOUND (currentStates)) { candidateStates = NEXT (currentStates) ESTIMATE (h(candidateStates)) currentStates = SCORE (candidateStates) } Wichtige Eigenschaften des A*: 1. Die optimistische Schätzung: h(n) ist die wirkliche Wahrscheinlichkeit des Pfades n bis Ende. Wenn h( n ) ≤ hˆ(n ) für alle n, dann findet A* garantiert die optimale Lösung, wenn es sie gibt. 2. Kein anderer Algorithmus, der Zugang zu gleich vielen zusätzlichen Informationen hat, kann mit weniger Rechenaufwand als der A* auskommen und trotzdem garantiert die optimale Lösung finden. à A* ist optimal effizient und findet garantiert die optimale Lösung. Trotzdem hat er immer noch exponentiellen Rechenaufwand. (Shapiro et.al. (1987) Bd. 1; Russel / Norvig (1995) S. 96ff.) 3. Evaluierung Die Ergebnisse, die ein Parser liefert, werden i. d. R. weiterverarbeitet. Eine Möglichkeit der Evaluierung ist daher, den Parser im Zusammenhang mit dieser Weiterverarbeitung zu betrachten. Es können z.B. andere Ergebnisse für einen Parser in einem IR-System wichtig sein, als für ein maschinelles Übersetzungssystem. Dieser Aspekt der Evaluierung wird hier nicht berücksichtigt, sondern nur Verfahren, die den Parser für sich betrachten. 3.1. tree-accuracy oder exact match Kriterium Dies ist die strenge Bewertung: entweder ist eine Analyse richtig oder sie ist falsch. Es spielt keine Rolle, ob nur ein kleiner Fehler drin ist, oder ob die Analyse vollkommen unsinnig ist: der erste Fehler verursacht die Bewertung "falsch". Diese Bewertung mag in einigen Fällen sinnvoll sein, wenn die Weiterverarbeitung nur mit einer vollständig richtigen Analyse arbeiten kann. 3.2. PARSEVAL Die Standardmethode zur Parserevaluierung ist PARSEVAL. Zuerst müssen die Testdaten in einer als richtig definierter Form vorliegen, z.B. die Penn Treebank. Diese Analyse wird "goldener Standard" genannt und mit ihr werden die Ergebnisse des Testparsers verglichen. Eine Konstituente der Parseranalyse wird als richtig bewertet, wenn sie a) an der gleichen Stelle beginnt, wie die aus dem goldenen 4 Standard, b) an der gleichen Stelle endet, wie die aus dem goldenen Standard und c) mit dem gleichen nicht-terminalen Symbol versehen ist. Es werden drei Maßstäbe zugrunde gelegt: 1. labelled recall = # richtige Konstituenten des Parsers # Konstituenten der Vergleichsdaten 2. labelled precision= # richtige Konstituenten des Parsers # Konstituenten des Parsers insgesamt 3. crossing brackets: Anzahl sich überlappender Klammer. Beispiel: die Treebank hat die Klammerung ((A B) C), der Parser aber (A (B C)). Beispiel: Treebank: (s (np (det The) (noun stranger)) (vp (verb ate) (np (det the) (noun doughnut)) (pp (prep with) (np (det a) (noun fork))))) Parser: (s (np (det The) (noun stranger)) (vp (verb ate) (np (det the) (noun doughnut) (pp (prep with) (np (det a ) (noun fork)))))) Treebank Konstituenten: 6 Parser Konstituenten: 6 precision: 5/6 = 0.83 recall: 5/6 = 0.83 crossing brackets: 0 à crossing brackets accuracy: 100% (Charniak (1997) S. 8-9) 4. Literatur CHARNIAK (1997): Statistical Techniques for Natural Language Parsing. In: AI Magazine. S. 33-34 CHARNIAK (1993): Statistical Language Learning. Cambridge, MA. COLLINS (1996): A New Statistical Parser Based on Bigram Lexical Dependencies. In: Proceedings of the 34th Annual Meeting of the Association for Computational Linguistics. (ACL 34). GÖRZ (Hrsg.) (1995): Einführung in die Künstliche Intelligenz. 2. Aufl. Bonn usw. (Kap. 5.3.6) JURAFSKY / MARTIN (2000): Speech and Language Processing. An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. London usw. (Kap. 12) MANNING / SCHÜTZE (2000): Foundation of Statistical Natural Language Processing. 2. korr. Aufl. Cambridge, MA, London. (Kap. 12) RUSSEL / NORVIG (1995): Artificial Intelligence. A Modern Approach. London usw. (Kap. 4) SHAPIRO et.al. (Hrsg.) (1987): Encyclopedia of Artificial Intelligence. 2 Bde. New York usw. 5