Kneser-Ney yumuşatmada görünmeyen kelimeler nasıl ele alınır?


15

Gördüğüm kadarıyla, (ikinci dereceden) Kneser-Ney yumuşatma formülü şu ya da bu şekilde

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

normalize faktörü ile λ(wn1) olarak verilmiştir

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

ve devam olasılığı Pcont(wn) bir kelime ve wn

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

burada N1+(w) bağlamlarda sayısıdır w veya simplier görüldü, farklı sözcük sayısını verilen kelime önce w . Anladığım kadarıyla, formül özyinelemeli olarak uygulanabilir.

Şimdi bu, bilinmeyen bağlamlarda farklı n-gram uzunlukları için iyi bilinen kelimeleri işler, ancak açıklamaması sözlük dışı kelimeler olduğunda ne yapılması gerektiğidir. Unigramlar için özyineleme adımında P_ {devamı} (/) = P ^ 0_ {KN} (/) = \ frac {1} {V} olduğunu belirten bu örneği izlemeye çalıştım . Belge daha sonra yukarıdaki formülü P ^ 1_ {KN} (w) = P_ {devamı} (w) olarak doğrulamak için bunu kullanır .Pcont(/)=PKN0(/)=1VPKN1(w)=Pcont(w)

Bilinmeyen bir kelime varlığında nasıl çalıştığını göremiyorum . Bu durumlarda çünkü bilinmeyen kelime eğitim seti ile ilgili hiçbir şey devam etmiyor. Benzer şekilde n-gram sayısı .P cw=unknown C(wnPcont(unknown)=0somethingC(wn1,unknown)=0

Ayrıca, bilinmeyen sözcüklerden oluşan bir diziye (örneğin, OOD kelimelerinin bir terimi sıfır olabilir.wC(wn1,w)

Neyi kaçırıyorum?


Ben de KN ile mücadele ediyorum. Bence görünmeyen bigram P (w1w2) olasılığı, son unigram w2'nin devam etme olasılığına geri dönebilir. Görünmeyen bir unigramla bırakıldığında hiçbir şeyin yoktu. Sonra ne yapacağız? Bilmiyorum.
momobo

Şu anda kendimi KN uygulamaya çalışıyorum ve aynı sorunla sıkışıp kaldım. İkiniz de bir çözüm bulmayı başardınız mı?
jbaiter

Görünmeyen unigramlar (frekanslara ve frekansların frekanslarına bir güç fonksiyonu uydurma) için Good-Turing yumuşatmaya geri döndüm ... değişen sonuçlarla.
sunside

Yanıtlar:


6

Dan Jurafsky, N-Gram modelleri hakkında bu sorundan biraz bahseten bir bölüm yayınladı :

Özyinelemenin sona ermesinde, unigramlar düzgün dağılımla enterpolasyon yapılır:

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

Bilinmeyen bir kelime eklemek istiyorsak <UNK>, sadece sıfır sayımla düzenli bir kelime girişi olarak dahil edilir ve bu nedenle olasılığı şöyle olur:

λ(ϵ)|V|

Ne demek olduğunu öğrenmek için çalıştı, ama değilim ettik emin eğer sadece anlamına . Bu durumda ve sayım sıfıra giderken, belki gider , varsayalım :lim x 0 x λ ( ϵ ) dϵlimx0xλ(ϵ)d

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

o zaman bilinmeyen kelimeye indirimin bir kısmı verilir, yani:

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

Bu cevaptan hiç emin değilim, ama daha fazla düşünceye yol açması durumunda oraya çıkarmak istedim.

Güncelleme: Biraz daha kazmak, genellikle boş dizeyi ("") belirtmek için kullanılıyor gibi görünüyor , ancak bunun hesaplamasını nasıl etkilediği hala net değil . hala benim en iyi tahminimϵλd|V|


2
İyi cevap ama senin gibi% 100 kendinden emin değilim. Python'da perl komut dosyası araştırma.microsoft.com /en-us/um/redmond/groups/srg/papers/… 'ın bir sürümünü uyguladım - ancak sadece kapalı bir kelime dağarcığınız varsa olduğu gibi çalıştığını fark ettim (0 prob sorunu ) - yani tüm test unigramları da trendedir. Jan önerdiği gibi lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf I ön işleme sırasında <UNK> her kelimenin ilk örneği yerini aldı. Ancak, bölümleme yaparken, "goofedup" gibi trende olmayan bazı test unigramları vardır. Bu yüzden d / | V | buraya. Teşekkürler!
Josh Morel

1

Bir modeli eğitmenin birçok yolu vardır, <UNK>ancak Jurafsky eğitimde çok az kez ortaya çıkan kelimeleri seçmeyi ve bunları sadece değiştirmeyi önerir <UNK>.

O zaman olasılıkları normalde yaptığınız gibi eğitin.

3:40 ile başlayan bu videoyu izleyin -

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

Başka bir yaklaşım, bir kelimeyi <UNK>eğitimde ilk kez görüldüğü gibi düşünmektir , ancak benim deneyimimden bu yaklaşım, olasılık kitlesinin çok fazlasını atar <UNK>.


0

Sadece birkaç düşünce, bu konuda uzman olmaktan çok uzakım, bu yüzden soruya cevap vermek değil, onu analiz etmek niyetindeyim.

λ(ϵ)λ(ϵ)

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

Başka bir seçenek, <unk>olasılığı Randy'nin bahsettiği yöntemlerle tahmin etmek ve ona düzenli bir jeton olarak davranmak olacaktır.

Bu adımın formüllerin tutarlı olmasını sağlamak için yapıldığını düşünüyorum. terimininλ(ϵ)|V|


Cevapların gerçek cevaplar için olduğu varsayılmaktadır.
Michael R. Chernick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.