之前我们有聊到语言模型。其中之一就是n-gram模型。他是一种基于统计的模型算法。
今天我们就来详细了解它。
N-gram模型基本概念
n-gram基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。
每个字节片段称为gram,对所有gram出现的频率进行统计,并且按照事先设定好的阈值进行过滤。形成gram列表,也就是这个文本的向量特征空间。
列表中的每种gram就是一个特征向量维度。
n-gram用于评估语句是否合理
如果我们有一个由m个词组成的序列(或者说是一个句子),我们希望算得概率p(w1, w2, ..., Wm),根据链式规则,可以得到 p(w1, w2, ... Wm) = p(w1) * p(w2|w1)*p(w3|w1, w2))...p(wm|w1...wm-1)
显然这个概率不好做,我们可以利用马尔科夫链的假设,即当前这个词仅仅跟前面几个有限的词相关,因此也就不必一直追溯到最开始的词。这样便可以大幅缩减上述算式的长度。
即p(w1, w2,...wm) = p(wi|wi-n+1,...wi-1)
这个马尔科夫链假设为什么好用。在现实情况中,大家通过真实情况将n=1,2,3...这些值都试过之后,得到真实的效果和时间空间的开销权衡之后,发现能够使用。
后面我们再讲下python的实现以及使用。