Як згладжується Кнайсер-Ней, як обробляються невидимі слова?


15

З того, що я бачив, формула згладжування (другого порядку) Кнайзера-Нея так чи інакше подається як

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

з нормуючим коефіцієнтом λ(wn1) заданим як

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

і ймовірність продовження слова w nPcont(wn)wn

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

де є число контекстів ш був помічений в або, простіше, число різних слів які передують дане слово шN1+(w)ww . З того, що я зрозумів, формула може застосовуватися рекурсивно.

Тепер це добре обробляє відомі слова у невідомому контексті для різної n-грамової довжини, але те, що не пояснює, що робити, коли є слова, які не є словниками. Я спробував дотримуватися цього прикладу, який стверджує, що на етапі рекурсії для уніграм, . Потім документ використовує це - цитуючи Чена та Гудмена - для обгрунтування вищезгаданої формули якP 1 K N (w)=Pcont(w)Pcont(/)=PKN0(/)=1VPKN1(w)=Pcont(w) .

Я не бачу, як це працює за наявності невідомого слова хоча. У цих випадках P c o n t ( невідомо ) = 0w=unknown оскільки, очевидно, невідоме слово не продовжує нічого щодо навчального набору. Так само число n-грамів будеC(wn-1,невідомо)=0.Pcont(unknown)=0somethingC(wn1,unknown)=0

Крім того, цілий wC(wn1,w) може бути нульовим, якщо зустрінеться послідовність невідомих слів - скажімо, триграма слів OOD.

Що я пропускаю?


Я також борюся з КН. Я думаю, що ймовірність небаченого біграму P (w1w2) може змінити ймовірність продовження останньої уніграми w2. Залишившись невидимим уніграмом, у вас нічого не було. Що робити далі? Не знаю.
momobo

На даний момент я намагаюся реалізувати KN і я застряг у цьому ж питанні. Чи вдалося комусь із вас обох знайти рішення?
jbaiter

Я повернувся до згладжування Добро-Тюрінга для невидимих ​​уніграм (пристосування функції живлення до частот і частоти частот) ... з різними результатами.
вранці

Відповіді:


6

Дан Юрафський опублікував розділ про моделі N-Gram, де трохи розповідає про цю проблему:

Після закінчення рекурсії уніграми інтерполюються з рівномірним розподілом:

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

Якщо ми хочемо включити невідоме слово <UNK>, воно просто включається як звичайний запис словника з підрахунком нуля, а значить, його ймовірність буде такою:

λ(ϵ)|V|

ϵlimx0xλ(ϵ)d

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

то невідомому слову просто присвоюється частка знижки, тобто:

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

I'm not confident about this answer at all, but wanted to get it out there in case it sparks some more thoughts.

Update: Digging around some more, it seems like ϵ is typically used to denote the empty string (""), but it's still not clear how this affects the calculation of λ. d|V| is still my best guess


2
Good answer but like you I'm not 100% confident in it. I implemented a version of the perl script research.microsoft.com/en-us/um/redmond/groups/srg/papers/… in python - but realized it only works as-is if you have a closed vocabulary (0 prob issue) - i.e. all test unigrams are also in train. As suggested by Jan lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf I replaced each word's first instance with <UNK> during pre-processing. However, when partitioning, there are some test unigrams not in train like "goofedup". So I used d/|V| here. Thanks!
Josh Morel

1

Існує багато способів навчити модель, <UNK>хоча Юрафський пропонує вибрати ті слова, які трапляються дуже мало разів у навчанні, і просто змінити їх <UNK>.

Тоді просто тренуйте ймовірності, як зазвичай.

Дивіться це відео, починаючи з 3:40 -

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

Іншим підходом є просто розглядати слово як <UNK>перший раз, коли воно бачиться на тренуванні, хоча, з мого досвіду, цей підхід призначає занадто багато маси ймовірностей <UNK>.


0

Just a few thoughts, I am far from being an expert on the matter so I do not intend to provide an answer to the question but to analyze it.

The simple thing to do would be to calculate λ(ϵ) by forcing the sum to be one. This is reasonable since the empty string is never seen in the training set (nothing can be predicted out of nothing) and the sum has to be one. If this is the case, λ(ϵ) can be estimated by:

λ(ϵ)=1wmax(CKN(w)d,0)wCKN(w)
Remember that here CKN(w) is obtained from the bigram model.

Another option would be to estimate the <unk> probability with the methods mentioned by Randy and treating it as a regular token.

I think this step is made to ensure that the formulas are consistent. Notice that the term λ(ϵ)|V| does not depend on the context and assigns fixed values to the probabilities of every token. If you want to predict the next word you can prescind this term, on the other hand if you want to compare the Kneser - Ney probability assigned to each token under two or more different contexts you might want to use it.


Answers are suppose to be for actual answers.
Michael R. Chernick
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.