N-gram
N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint probability)。
概率计算
假设现在有一个由n个词组成的句子
S=(w1,w2,w3,...,wn),要衡量S出现的概率,那么根据马尔可夫假设,一个词的出现只与它之前的若干个词有关。
p(w1...wn)=∏p(wi∣wi−1...w1)≈∏p(wi∣wi−1...wi−N+1)
- 如果一个词的出现仅依赖它之前的一个词,那么我们称之为Bi-gram
- 如果一个词的出现仅依赖它之前的两个词,那么我们称之为Tri-gram
- N可以取任意值,但当N太大时会导致参数空间过大和数据稀疏的问题
那么如何计算
p(wi∣wi−1...wi−N+1) 呢,这里使用古典概型,也就是语料库中这个有序单词组合出现过的次数除以右侧出现的频数,即:
p(wi∣wi−1...wi−N+1)=C(wi−N+1...wi−1)C(wi−N+1...wi).
应当注意的是,长句子会导致多项小于1的常数相乘约等于1,在实际计算中,我们会对概率取对。
另外新生成的句子有可能会出现语料库中不曾出现的单词序列,这会导致除0错误,我们可以对分子分母都加一,或把
(wi−N+1...wi−2)出现的概率分一部分给$ (w_{i-N+1}…w_{i-1})$ 这一项。
参考自:https://blog.csdn.net/songbinxu/article/details/80209197
更多内容: www.github.com/fansking/NlpWithMe