Probabilistische kontextfreie Grammatiken - tagh.detagh.de/tom/wp-content/uploads/12-PCFG.pdf ·...
Transcript of Probabilistische kontextfreie Grammatiken - tagh.detagh.de/tom/wp-content/uploads/12-PCFG.pdf ·...
Probabilistischekontextfreie Grammatiken
Vorlesung “Computerlinguistische Techniken”
Alexander Koller
08. Dezember 2015
Let’s play a game
• Ich gebe Ihnen ein Nichtterminalsymbol. ‣ S, NP, VP, PP, … oder POS-Tag
• Sie können einen der folgenden Züge machen:
S → NP VP NNP → Hans
NT in andere NT expandieren
POS-Tag inWort expandieren
Penn Treebank POS tags
Ein paar echte Bäume
Penn Treebank, #0001
Penn Treebank, #0002
nltk.corpus.treebank.parsed_sents("wsj_0001.mrg")[0].draw()
AmbiguitätenWir wollen disambiguieren, d.h. “korrekten” Parse für ambigen Satz berechnen.
S
NP VP
VP
I
V NP
anshot
PP
P
in
Det N
elephant
NP
my
PRP$ N
pyjamas
S
NP VP
I
VNP
anshot
PP
P
in
Det
N
elephant
NP
my
PRP$ N
pyjamas
N
Woran erkennen wir den “korrekten” Baum?Wie berechnen wir ihn effizient? (NB: exponentiell viele Lesarten)
Probabilistische kfGen
• Eine probabilistische kontextfreie Grammatik (PCFG)ist eine kfG, in der ‣ jede Produktionsregel A → w hat eine W. P(A → w | A):
wenn wir A expandieren, wie w. ist Regel A → w?
‣ für jedes Nichtterminal A müssen W. zu eins summieren:
‣ wir schreiben abgekürzt P(A → w) für P(A → w | A)
X
w
P (A ! w | A) = 1
Beispiel
S → NP VP [1.0] VP → V NP [0.5]NP → Det N [0.8] VP → VP PP [0.5]NP → i [0.2] V → shot [1.0]N → N PP [0.4] PP → P NP [1.0]N → elephant [0.3] P → in [1.0]N → pyjamas [0.3] Det → an [0.5]
Det → my [0.5]
(der Einfachheit halber tun wir so, als ob Det = PRP$)
Generativer Prozess
• PCFG erzeugt zufällige Ableitung der kfG. ‣ Ereignis = Expansion von NT durch Produktionsregel
‣ alle statistisch unabhängig voneinander
S⇒ NP VP ⇒ i VP ⇒ i VP PP⇒* i shot an elephant in my pyjamas
1.0 0.2 0.5
0.00072
S⇒ NP VP ⇒ i VP ⇒* i V Det N⇒* i shot … pyjamas
1.0 0.2 0.4
0.4⇒ i V Det N PP
0.00057
Parsebäume
S
NP VP
I
VNP
anshot
PP
P
in
Det
N
elephant
NP
my
Det N
pyjamas
N
S
NP VP
VP
I
V NP
anshot
PP
P
in
Det N
elephant
NP
my
Det N
pyjamas
p = 0.00072 p = 0.00057
“korrekt” = wahrscheinlichster Parsebaum
0.2 0.5
0.5
0.8
0.5 0.3
0.8
0.5 0.3
0.2 0.5
0.8
0.5
0.8
0.5 0.3
0.4
0.3
Sprachmodellierung
• Wie in anderen generativen Modellen (z.B. HMMs) können wir W. P(w) von String durch Marginalisierung über mögliche Bäume berechnen.
• Kann man effizient mit Inside-W. berechnen;siehe nächstes Mal.
P (w) =X
t2parses(w)
P (t)
Disambiguierung
• Annahme: “korrekter” Parsebaum = Baum, der höchste W. hat, vom Zufallsprozess erzeugt zu werden, d.h.
• Wir verwenden Variante des Viterbi-Algorithmus, um diesen Baum auszurechnen.
• Hier: Viterbi auf Grundlage von CKY; kann man auch mit anderen Parsingalgorithmen machen.
argmax
t2parses(w)P (t)
Intuition
VP NP N PP
VP NP N
Det
V
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Normale CKY-Parsechart: Ch(i,k) = {A | A ⇒* wi … wk-1}
Intuition
VP: 0.0036 NP: 0.006 N: 0.014 PP: 0.12
VP: 0.06 NP: 0.12 N: 0.3
Det: 0.5
V: 1.0
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
Viterbi + CKY
• Definiere für jeden Span (i,k) und Nichtterminal A die W.
• Berechne V iterativ “von innen nach außen”: mit kleinen Spans anfangen und immer größer werden.
V (A, i, k) = max
Ad)⇤wi...wk�1
P (d)
V (A, i, i+ 1) = P (A ! wi)
V (A, i, k) = max
A!B Ci<j<k
P (A � B C) · V (B, i, j) · V (C, j, k)
Viterbi-CKY: Pseudocode
set all V[A,i,j] to 0
for all i from 1 to n: for all A with rule A -> wi: add A to Ch(i,i+1) V[A,i,i+1] = P(A -> wi)
for all b from 2 to n: for all i from 1 to n-b+1: for all k from 1 to b-1: for all B in Ch(i,i+k) and C in Ch(i+k,i+b): for all production rules A -> B C: add A to Ch(i,i+b) if P(A -> B C) * V[B,i,i+k] * V[C,i+k,i+b] > V[A,i,i+b]: V[A,i,i+b] = P(A -> B C) * V[B,i,i+k] * V[C,i+k,i+b]
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
NP: 0.12
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
NP: 0.12
N: 0.014
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
VP: 0.06 NP: 0.12
N: 0.014
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
VP: 0.06 NP: 0.12
N: 0.014NP: 0.0058
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
VP: 0.06 NP: 0.12
N: 0.014NP: 0.0058VP: 0.0029
Viterbi-CKY am Beispiel
shot
an
elephant
in my pyjamas
… el
epha
nt
… an
… sh
ot
… in
my
pyja
mas
Viterbi-CKY-Parsechart:Ch(i, k) = {(A, p) | p = max
d:A)⇤wi...wk�1
P (d)}
V: 1.0
Det: 0.5
N: 0.3
PP: 0.12
VP: 0.06 NP: 0.12
N: 0.014NP: 0.0058VP: 0.0036VP: 0.0029
Bemerkungen
• Viterbi-CKY hat genau die gleichen Schleifenwie der normale CKY-Parser. ‣ Berechnung von V ändert nur den konstanten Faktor.
‣ Asymptotische Laufzeit immer noch O(n3)
• Berechne optimalen Parsebaum mit Backpointers. ‣ gleiche Backpointers wie in normalem CKY (siehe 6. Vorlesung)
‣ wenn wir nur den besten Parse wollen (und nicht alle Parses),reicht es, den besten Backpointer für jedes (A,i,k) zu speichern;d.h. weniger Speicherverbrauch als normaler CKY
Wo kriegt man eine PCFG?
• Quellen für kontextfreie Grammatiken: ‣ von Hand schreiben
‣ aus einer Baumbank ablesen
‣ Grammatikinduktion aus unannotiertem Text
• Quellen für Regelw., nachdem wir kfG haben: ‣ Maximum-Likelihood-Schätzung aus Baumbank
‣ EM-Training auf unannotiertem Text (inside-outside)
Die Penn Treebank
• Große Textmenge (für die 1990er), annotiert mit POS-Tags und syntaktischen Strukturen.
• Besteht aus mehreren Teilkorpora: ‣ Wall Street Journal: 1 Jahr Zeitungstext, 1 Mio Wörter
‣ Brown-Korpus: balanciertes Korpus, 1 Mio Wörter
‣ ATIS: Flugbuchungs-Dialoge, 5000 words
‣ Switchboard: gesprochener Dialog, 3 Mio Wörter
• WSJ PTB ist Standardkorpus für Training und Evaluation von PCFG-Parsern.
Annotationsformat
That cold , empty sky was full of fire and light .
DT JJ , JJ NN VBZ JJ IN NN CC NN .
NP-SBJ NP
PPADJP-PRD
VP
S
Annotationsformat
That cold , empty sky was full of fire and light .
DT JJ , JJ NN VBZ JJ IN NN CC NN .
NP-SBJ NP
PPADJP-PRD
VP
S
((S (NP-SBJ (DT That) (JJ cold) (, ,) (JJ empty) (NN sky) ) (VP (VBD was) (ADJP-PRD (JJ full) (PP (IN of) (NP (NN fire) (CC and) (NN light) )))) (. .) ))
Grammatik ablesen
• Kann direkt die “Grammatik in den Köpfen der Annotatoren” von annotierten Bäumen ablesen.
• Ergibt sehr große kfG, z.B. 4500 Regeln für VP: VP → VBD PPVP → VBD PP PPVP → VBD PP PP PPVP → VBD PP PP PP PPVP → VBD ADVP PPVP → VBD PP ADVP…VP → VBD PP PP PP PP PP ADVP PP
Grammatik ablesen
• Kann direkt die “Grammatik in den Köpfen der Annotatoren” von annotierten Bäumen ablesen.
• Ergibt sehr große kfG, z.B. 4500 Regeln für VP: VP → VBD PPVP → VBD PP PPVP → VBD PP PP PPVP → VBD PP PP PP PPVP → VBD ADVP PPVP → VBD PP ADVP…VP → VBD PP PP PP PP PP ADVP PP
“This mostly happens because we go from football in the fall to lifting in the winter
to football again in the spring.”
Evaluation
• Schritt 1: Aufteilung in Trainings- und Testkorpus.Konventionelle Aufteilung der WSJ-Baumbank:
2-21 23
TestTraining
24
Devel
Evaluation
• Schritt 2: Maß für Akkuratheit des Parsers?
• Erste Idee: Messe “exact match”, d.h. Anteil der Sätze, für die Parser den gleichen Baum wie Annotator baut.
• Das ist zu streng: ‣ Parser trifft beim Parsen eines Satzes viele Entscheidungen
‣ eine einzige falsche Entscheidung macht ganzen Baum “falsch”
‣ Wir brauchen ein feinkörnigeres Maß.
Vergleich von Parsebäumen
• Idee 2 (PARSEVAL): Vergleiche Struktur von Parsebaum und Goldstandard-Baum (= Annotation). ‣ Labeled: Welche Konstituenten (Span + syntaktische
Kategorie) in einem Baum gibt es auch im anderen?
‣ Unlabeled: Wie teilen die beiden Bäume den Satz in Teilstrings auf (syntaktische Kategorien egal)?
But the concept is workable
CC DT NN VBZ JJ
NP-SBJ ADJP
VPS
But the concept is workable
IN DT NN VBZ JJ
NP ADJP
VPS
PPNP-SBJ
Gold Parse
PrecisionWelcher Anteil von Konstituenten im Parsebaum gibt es auch im Gold-Baum?
But the concept is workable
CC DT NN VBZ JJ
NP-SBJ ADJP
VPS
But the concept is workable
IN DT NN VBZ JJ
NP ADJP
VPS
PPNP-SBJ
Gold Parse✓
✓
✓
✓✓✓✓
❌
(✓)
(✓) (✓)
Labeled Precision = 7 / 11 = 63.6% Unlabeled Precision = 10 / 11 = 90.9%
RecallWelchen Anteil von Konstituenten im Gold-Baum gibt es auch im Parsebaum?
But the concept is workable
CC DT NN VBZ JJ
NP-SBJ ADJP
VPS
But the concept is workable
IN DT NN VBZ JJ
NP ADJP
VPS
PPNP-SBJ
Gold Parse✓
(✓)
Labeled Recall = 7 / 9 = 77.8% Unlabeled Recall = 8 / 9 = 88.9%
✓
✓
✓✓✓✓
❌
F-Score
• Precision und Recall messen gegenläufige Aspekte eines Parsers (“Korrektheit” und “Vollständigkeit”).
• Oft will man eine einzige Zahl; dafür f-score:
• Im Beispiel: labeled f-score 70.0, unlabeled f-score 89.9.
F1 =2 · P ·RP +R
Zusammenfassung
• PCFGs erweitern kfGen um Regelw. ‣ Ereignisse sind Expansionen von Nichtterminalen.
Diese sind alle statistisch unabhängig.
‣ Viterbi-CKY-Parser berechnet wahrscheinlichsten Parsebaum für Satz in kubischer Zeit.
• Grammatik aus Baumbank ablesen. ‣ nächstes Mal: Schätzung von Regelwahrscheinlichkeiten.
• Evaluation von PCFG-Parsern.