一、N-gram介绍

在这篇文章中,我们将要介绍N-grams,这是自然语言处理中的一个概念,其含义是按照字节进行大小为N的滑动窗口操作,形成N个字节片段的序列。本质上是一种基于统计语言模型的算法

对于形成的每一个字节片段(gram)进行频度统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

下面用几个在电影评价中的例子来说明N-gram的简单应用:

(1) . 漂亮(2-gram)
(2) . 纪录片  (3-gram)
(3) . 他站起来(4-gram)

现在,我们可以大致知道这三个 N-grams 的使用频率,“漂亮”和“纪录片”经常在评价中出现,“他站起来”这四个字却不像前两个那样频繁出现。
简要来说,n-gram 的功能有:
1. 分词:
如果将一个 N-gram 的出现的概率或者字节片段在下一序列中将要出现的概率分配给它,我们可以确认在那些N-gram分块可以在一起形成实体(例如 ”漂亮“、”纪录片“可以作为一个单词切块)
2. 预测
同时,我们还可以用于预测下一个词语,假如有一个句子:

   “这部电影是一部  ”

那么下一个词我们预测为“纪录片”的概率要大于“漂亮”,那么我们自然就可以预测下一个词为“纪录片”。
3. 纠错
N-gram 还可以帮助我们进行拼写错误更正,例如,如果我们知道评价中“女主人公”后的词是“漂亮”的概率较大,那么给我们“女主人公很飘量”这句话中,我们可以反应到“飘”是错误的。

N-garm模型

了解了这些概念之后,我们可以建立N-gram 模型。我们假定文本中每个词w和前N-1个词有关系,而与更前面的词无关,这样当前词w的概率p只取决于前N-1个词P,这个假设叫做N-1阶马尔可夫假设,N元模型(N-gram Model)即为对应的语言模型。例如,bigram-gram(N=2)二元模型是仅与前一个词有关(这时N-1=1),而N = 1的一元模型实际上是一个上下文无关的模型,N=3的三元模型应用最多,更高阶的则很少使用了。

那么如何给词汇分配概率呢?这里提供了一种方法,首先需要大量的句子样本(称为语料库 corpus),拿出语料库中的很小的句子样本来举例:

1. 他说谢谢你
2. 他进来之后说早安
3. 他去了青海
4. 青岛气候宜人
5. 青岛刮风了

拿二元模型来说,我们会根据前一个词语进行预测,那么我们可以说它的概率为(前一个词语“wi-1”在单词“wi”之前出现的次数)/(前一个单词“wi-1”在语料库中出现的总次数) =
C o u n t ( w i − 1 , w i ) / C o u n t ( w i ) Count(w_{i-1},w_i) /Count(w_i) Count(wi1,wi)/Count(wi)
用上面的语料举例,为了找到“谢谢”之后的“”的概率,我们可以将其写成P(你|谢谢),这是一个条件概率,等于:

=(“谢谢你”出现的次数)/(“谢谢”出现的次数)
=  1/1
=  1

那么我们可以说当“谢谢”这个词之后的词是“”(这是因为偶们训练的五个句子里“谢谢”仅在“谢谢你”中出现过)。

再举一个例子来说明前一个单词出现在不同上下文的情况:
计算一下“”在“”之后出现的概率。我们想要找到P(岛|青),也就是确定“”下一个词为“”的可能性,可以写为:

 = (“青岛”出现的次数)/(“青”出现的概率)
 = 2/3 
 ≈ 0.67

这是因为在我们的语料库中,“”后面是“”的可能性P(海|青)=1/3,而语料库中只有“”和“”在“”后出现,且概率分别为2/31/3,所以我们可以根据用户输入“”之后,根据概率给出两个选项及其排名,直观上我们可以看Google搜索引擎(语料库、方法可能不尽相同):
在这里插入图片描述


零概率问题:
在数理统计中,我们之所以敢用对采样数据进行观察到结果来预测概率,是因为有大数定律(Law of Large Numbers)在背后做支撑,它的要求是有足够的观测值,零概率问题是指如果同现的次数(wi-1,wi)=0,也就是没有这类数据的观测值,但是对于没有看见的事件我们不能认为它发生的概率是零,同样,对于上面5个句子的例子,如果(wi-1,wi)和(wi-1)只出现一次,我们也不能得出P(wi|wi-1) = 1这么绝对的结论。例如,一元组出现的次数平均要比二元组出现的次数要多,根据大数定律,它的相对频度更接近概率分布,类似的,二元组平均出现的次数比三元组要多,那么低阶语言模型的零概率问题也会比高阶模型轻微,对于此类问题我们通常解决的办法是赋予未出现的词一个很小的非0值,对于二元组、三元组等有不同的平滑方法,这里不做叙述。

待补充…若想详细了解N-garm,请点击
Naive Bayes and SentimentClassification

Reference:数学之美 吴军、https://zhuanlan.zhihu.com/p/32829048、

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐