Языковая модель с SRILM
Я пытаюсь построить языковую модель, используя SRILM. У меня есть список фраз, и я создаю модель, используя:
./ngram-count -text corpus.txt -order 3 -ukndiscount -interpolate -unk -lm corpus.lm
После этого я попытался привести пример, чтобы увидеть вероятности различных фраз, и оказалось, что логарифмическая вероятность равна -0,9.
Проблема в том, что в обучении есть несколько слов с меньшей вероятностью записи. Например, есть 5 "abatantuono" и его логарифмическая вероятность равна -4,8.
Я думаю, что это странно, потому что фраза <s> <unk> </s>
более вероятно, чем <s> abatantuono </s>
и в тренировочном наборе по 3 грамма <s> abatantuono </s>
тоже присутствует!
Это можно увидеть здесь:
% ./ngram -lm corpus.lm -ppl ../../../corpus.txt.test -debug 2 -unk
reading 52147 1-grams
reading 316818 2-grams
reading 91463 3-grams
abatantuono
p( abatantuono | <s> ) = [2gram] 1.6643e-05 [ -4.77877 ]
p( </s> | abatantuono ...) = [3gram] 0.717486 [ -0.144186 ]
1 sentences, 1 words, 0 OOVs
0 zeroprobs, logprob= -4.92296 ppl= 289.386 ppl1= 83744.3
abatantonno
p( <unk> | <s> ) = [1gram] 0.00700236 [ -2.15476 ]
p( </s> | <unk> ...) = [1gram] 0.112416 [ -0.949172 ]
1 sentences, 1 words, 0 OOVs
0 zeroprobs, logprob= -3.10393 ppl= 35.6422 ppl1= 1270.36
file ../../../corpus.txt.test: 2 sentences, 2 words, 0 OOVs
0 zeroprobs, logprob= -8.02688 ppl= 101.56 ppl1= 10314.3
Как вы думаете, проблема может быть?
Спасибо
1 ответ
Это помеченная проблема SRILM (см. Тезис Кеннета Хифилда - сноска на стр. 30 и заметки на его веб-сайте по SRILM). То, как масса распределяется по неизвестному слову, может назначить им более высокую вероятность по сравнению с редкими словами в обучающих данных. Вы можете взглянуть на пакет KenLM, который имеет только реализацию Modified Kneser-Ney (обычно работает лучше, чем сглаживание Kneser-Ney), но выполняет массовое распределение неизвестных слов таким образом, чтобы это не происходило.