Wie wird beim Kneser-Ney-Glätten mit unsichtbaren Wörtern umgegangen?

15

Nach allem, was ich gesehen habe, ist die Kneser-Ney-Glättungsformel (zweiter Ordnung) auf die eine oder andere Weise gegeben als

PKN2(wn|wn1)=max{C(wn1,wn)D,0}wC(wn1,w)+λ(wn1)×Pcont(wn)

mit dem normalisierenden Faktor alsλ(wn1)

λ(wn1)=DwC(wn1,w)×N1+(wn1)

und die Fortsetzungswahrscheinlichkeit Pcont(wn) eines Wortes wn

Pcont(wn)=N1+(wn)wN1+(w)

Dabei ist N1+(w) die Anzahl der Kontexte, in denen w gesehen wurde, oder einfacher die Anzahl der eindeutigen Wörter , die vor dem angegebenen Wort w . Nach meinem Verständnis kann die Formel rekursiv angewendet werden.

Nun werden bekannte Wörter in unbekannten Kontexten für verschiedene n-Gramm-Längen gut behandelt, aber was nicht erklärt wird, ist, was zu tun ist, wenn Wörter außerhalb des Wörterbuchs vorhanden sind. Ich habe versucht, diesem Beispiel zu folgen, das besagt, dass im Rekursionsschritt für Unigramme Pcont(/)=PKN0(/)=1V . Das Dokument verwendet dies dann - unter Anführung von Chen und Goodman -, um die obige Formel als P ^ 1_ {KN} (w) = P_ {cont} (w) zu rechtfertigen PKN1(w)=Pcont(w).

Ich verstehe nicht, wie es in Gegenwart eines unbekannten Wortes w = \ text {unknown} funktioniert w=unknown. In diesen Fällen ist Pcont(unknown)=0something da das unbekannte Wort offensichtlich nichts bezüglich des Trainingssatzes fortsetzt. Ebenso wird die Anzahl von n-Gramm C(wn1,unknown)=0 .

Außerdem kann der gesamte Term wC(wn1,w) null sein, wenn eine Folge unbekannter Wörter - beispielsweise ein Trigramm von OOD-Wörtern - auftritt.

Was vermisse ich?

Sonnenseite
quelle
Ich kämpfe auch mit KN. Ich denke, die Wahrscheinlichkeit eines unsichtbaren Bigrams P (w1w2) könnte auf die Wahrscheinlichkeit der Fortsetzung des letzten Unigrams w2 zurückgehen. Wenn Sie mit einem unsichtbaren Unigramm zurückgelassen werden, hatten Sie nichts. Was macht man als nächstes? Ich weiß es nicht.
Momobo
Ich versuche gerade, KN selbst zu implementieren und bin mit dem gleichen Problem konfrontiert. Hat es einer von beiden geschafft, eine Lösung zu finden?
Jbaiter
Ich bin auf Good-Turing-Glättung für unsichtbare Unigramme zurückgefallen (Anpassung einer Potenzfunktion an die Frequenzen und die Frequenz der Frequenzen) ... mit unterschiedlichen Ergebnissen.
Sunside

Antworten:

6

Dan Jurafsky hat ein Kapitel über N-Gram-Modelle veröffentlicht, das sich ein wenig mit diesem Problem befasst:

Bei Beendigung der Rekursion werden Unigramme mit der Gleichverteilung interpoliert:

PKN(w)=max(cKN(w)d,0)wcKN(w)+λ(ϵ)1|V|

Wenn wir ein unbekanntes Wort einfügen möchten <UNK>, wird es nur als regulärer Wortschatzeintrag mit der Zählung Null eingefügt, und daher beträgt seine Wahrscheinlichkeit:

λ(ϵ)|V|

Ich habe versucht herauszufinden, was dies bedeutet, bin mir aber nicht sicher, ob nur . Wenn dies der Fall ist und Sie davon ausgehen, dass die Zählung auf Null geht, geht möglicherweise nach :lim x 0 x λ ( ε ) dϵlimx0xλ(ϵ)d

λ(wi1)=dc(wi1)|{w:c(wi1,w)>0}|

dann wird dem unbekannten Wort nur ein Bruchteil des Rabatts zugewiesen, dh:

λ(ϵ)|V|=d|V|

Ich bin mir dieser Antwort überhaupt nicht sicher, wollte sie aber herausbringen, falls sie weitere Gedanken hervorruft.

Update: Es scheint, als würde normalerweise verwendet, um die leere Zeichenfolge ("") zu kennzeichnen, aber es ist immer noch nicht klar, wie sich dies auf die Berechnung von auswirkt . ist immer noch meine Vermutungλ dϵλd|V|

abroekhof
quelle
2
Gute Antwort, aber wie Sie bin ich nicht zu 100% davon überzeugt. Ich habe eine Version des Perl-Skripts research.microsoft.com/en-us/um/redmond/groups/srg/papers/… in Python implementiert, aber es funktioniert nur so, wie es ist, wenn Sie ein geschlossenes Vokabular haben (0 Prob Issue) ) - dh alle Test-Unigramme sind auch im Zug. Wie von Jan vorgeschlagen lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf I ersetzt jedes ersten Instanz Wort mit <UNK> während Vorverarbeitung. Beim Partitionieren gibt es jedoch einige Test-Unigramme, die nicht im Zug sind, wie "goofedup". Also habe ich d / | V | verwendet Hier. Vielen Dank!
Josh Morel
1

Es gibt viele Möglichkeiten, ein Modell zu trainieren, <UNK>obwohl Jurafsky vorschlägt, die Wörter auszuwählen, die im Training nur sehr selten vorkommen, und sie einfach in zu ändern <UNK>.

Trainieren Sie dann einfach die Wahrscheinlichkeiten wie gewohnt.

Sehen Sie dieses Video ab 3:40 -

https://class.coursera.org/nlp/lecture/19

Ein anderer Ansatz besteht darin, ein Wort einfach als <UNK>das allererste Mal zu betrachten, das es im Training gesehen wird. Meiner Erfahrung nach weist dieser Ansatz jedoch zu viel der Wahrscheinlichkeitsmasse zu <UNK>.

Geil
quelle
0

Nur ein paar Gedanken, ich bin weit davon entfernt, ein Experte in dieser Angelegenheit zu sein, also habe ich nicht die Absicht, eine Antwort auf die Frage zu geben, sondern sie zu analysieren.

Das Einfache wäre, zu berechnen, indem man die Summe auf eins zwingt. Dies ist sinnvoll, da die leere Zeichenfolge im Trainingssatz nie angezeigt wird (nichts kann aus nichts vorhergesagt werden) und die Summe eins sein muss. Wenn dies der Fall ist, kann geschätzt werden durch: Denken Sie daran, dass hier aus dem Bigram-Modell erhalten wird.λ ( ε ) λ ( ε ) = 1 - Σ w m a x ( C K N ( w ) - d , 0 )λ(ϵ)λ(ϵ) CKN(w)

λ(ϵ)=1wmax(CKN(w)d,0)wCKN(w)
CKN(w)

Eine andere Möglichkeit wäre, die <unk>Wahrscheinlichkeit mit den von Randy genannten Methoden abzuschätzen und als reguläres Token zu behandeln.

Ich denke, dass dieser Schritt gemacht wird, um sicherzustellen, dass die Formeln konsistent sind. Beachten Sie, dass der Begriff nicht vom Kontext abhängt und den Wahrscheinlichkeiten jedes Tokens feste Werte zuweist. Wenn Sie das nächste Wort vorhersagen möchten, können Sie diesen Begriff vorhersagen. Wenn Sie andererseits die jedem Token zugewiesene Kneser-Ney-Wahrscheinlichkeit in zwei oder mehr verschiedenen Kontexten vergleichen möchten, möchten Sie ihn möglicherweise verwenden.λ(ϵ)|V|

Daniel Villegas
quelle
Es wird angenommen, dass die Antworten tatsächliche Antworten sind.
Michael R. Chernick