使用 ARPA LM 数据计算概率的正确方法
Correct way to calculate probabilities using ARPA LM data
我正在编写一个用于计算 ngram 概率的小型库。
我有一个由 arpa 文件描述的 LM(它的格式非常简单:probability ngram backoff_weight):
...
-5.1090264 Hello -0.05108307
-5.1090264 Bob -0.05108307
-3.748848 we -0.38330063
...
-2.5558481 Hello Bob -0.012590006
...
-1.953679 Hello Bob how -0.0022290824
...
-0.58411354 Hello Bob how are -0.0007929117
...
-1.4516809 Hello Bob how are you
...
但是我如何正确计算这里的 P(we|Hello Bob how are)
?
P(we|Hello Bob how are) = P(we) * BWt(Hello Bob how are) ?
或者这是正确的方法:
P(we|Hello Bob how are) = P(are we) * BWt(Hello Bob how) ?
如果我没有 4 克 (Hello Bob how are)
的退避权重怎么办?
请告诉我一些计算概率的通用公式或者我在哪里可以读到它,我真的找不到任何好的东西...
如果LM是这样的
...
-grams:
p1 word1 bw1
-grams:
p2 word1 word2 bw2
p4 word2 word3 bw4
-grams:
p3 word1 word2 word3 bw3
...
如何计算P(word3 | word1, word2)
?
if(exist(word1, word2, word3)):
P(word3 | word1, word2) = p3
return P(word3 | word1, word2)
else if(exist(word1, word2)):
bw(word1, word2) = bw2
P(word3 | word2) = p4
return bw(word1, word2) * P(word3 | word2)
else:
P(word3 | word2) = p4
return P(word3 | word2)
当语料库中不存在 ngrams 时,我们需要退回到低阶 ngrams。
如果退避权重不存在,则表示退避权重等于1 (log10(bw)==0)
我正在编写一个用于计算 ngram 概率的小型库。
我有一个由 arpa 文件描述的 LM(它的格式非常简单:probability ngram backoff_weight):
...
-5.1090264 Hello -0.05108307
-5.1090264 Bob -0.05108307
-3.748848 we -0.38330063
...
-2.5558481 Hello Bob -0.012590006
...
-1.953679 Hello Bob how -0.0022290824
...
-0.58411354 Hello Bob how are -0.0007929117
...
-1.4516809 Hello Bob how are you
...
但是我如何正确计算这里的 P(we|Hello Bob how are)
?
P(we|Hello Bob how are) = P(we) * BWt(Hello Bob how are) ?
或者这是正确的方法:
P(we|Hello Bob how are) = P(are we) * BWt(Hello Bob how) ?
如果我没有 4 克 (Hello Bob how are)
的退避权重怎么办?
请告诉我一些计算概率的通用公式或者我在哪里可以读到它,我真的找不到任何好的东西...
如果LM是这样的
...
-grams:
p1 word1 bw1
-grams:
p2 word1 word2 bw2
p4 word2 word3 bw4
-grams:
p3 word1 word2 word3 bw3
...
如何计算P(word3 | word1, word2)
?
if(exist(word1, word2, word3)):
P(word3 | word1, word2) = p3
return P(word3 | word1, word2)
else if(exist(word1, word2)):
bw(word1, word2) = bw2
P(word3 | word2) = p4
return bw(word1, word2) * P(word3 | word2)
else:
P(word3 | word2) = p4
return P(word3 | word2)
当语料库中不存在 ngrams 时,我们需要退回到低阶 ngrams。
如果退避权重不存在,则表示退避权重等于1 (log10(bw)==0)