文本特征工程之N-Gram

文本特征的选择和提取,是传统文本分类的核心内容。


最近在做文本的特征工程构建,陆陆续续搜集到一些公认的对文本表征能力比较强的特征,比如频次法、tf-idf、互信息方法、N-Gram、Word2Vec等,文本特征包含以上这些但也不限于这些。

频次法

频次法,顾名思义,十分简单。它记录每篇文章的次数分布,然后将分布输入机器学习模型,训练一个合适的分类模型。对这类数据进行分类,需要指出的是:在统计次数分布时,可合理提出假设,频次比较小的词对文章分类的影响比较小。因此,我们可合理地假设阈值,滤除频次小于阈值的词,减少特征空间维度。

TF-IDF

TF-IDF 相对于频次法,有更进一步的考量。词出现的次数能从一定程度反应文章的特点,即 TF,而 TF-IDF,增加了所谓的反文档频率,如果一个词在某个类别上出现的次数多,而在全部文本上出现的次数相对比较少,我们就认为这个词有更强大的文档区分能力。TF-IDF 是综合考虑了频次和反文档频率两个因素的方法。

互信息方法

互信息方法也是一种基于统计的方法,计算文档中出现词和文档类别的相关程度,即互信息。

N-Gram

基于 N-Gram 的方法是把文章序列,通过大小为 N 的窗口,形成一个个 Group。然后对这些 Group 做统计,滤除出现频次较低的 Group,再把这些 Group 组成特征空间,传入分类器,进行分类。


其中,关于Word2Vec在文本分类特征提取之Word2Vec中已经有个原理性认识了,word2vec采用的是n元语法模型(n-gram model),即假设一个词只与周围n个词有关,而与文本中的其他词无关。

所谓的语言模型,就是指对自然语言进行假设和建模,使得能够用计算机能够理解的方式来表达自然语言。


本文在对Word2Vec的基础上,倒推来看看这个N元语法模型,也就是N-Gram模型。


N-Gram原理与应用

N-Gram是基于一个假设:

第n个词出现与前n-1个词相关,而与其他任何词不相关。(这也是隐马尔可夫当中的假设。)整个句子出现的概率就等于各个词出现的概率乘积。各个词的概率可以通过语料中统计计算得到。假设句子T是有词序列w1,w2,w3...wn组成,用公式表示N-Gram语言模型如下:

P(T)=P(w1)*p(w2)*p(w3)...p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)...p(wn|w1w2w3...)

 

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:

Bi-Gram:P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)...p(wn|wn-1)

Tri-Gram:P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)...p(wn|wn-1,wn-2)

  • 注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。(这里需要进行平滑)


N-Gram标注器是ungram标注器的一般化:

1-Gram标注器(unigram tagger)是一元标注器的另一个名称:即用于标注上下文是标识符本身的标识符。

2-Gram标注器也称为二元标注器(bigram taggers)。

3-Gram标注器也称为三元标注器(trigram taggers)。

NgramTagger 类使用一个已标注的训练语料库来确定每个上下文中哪个词性标记最有可能。

注意,bigram标注器能够标注训练中它看到过的句子中的所有词,但对一个没见过的句子却不行。只要遇到一个新词就无法给它分配标记。它不能标注下面的词,即使在训练过程中看到过的,因为在训练过程中从来没有见过他前面有None标记的词。因此,标注器也无法标注句子的其余部分。它的整体准确度得分非常低,从上面运行结果来看只有0.1左右。

当n 越大时,上下文的特异性就会增加,要标注的数据中包含训练数据中不存在的上下文的几率也增大。这被称为数据稀疏问题,在NLP中是相当普遍的。因此,研究结果的精度和覆盖范围之间需要有一个权衡。


根据上面的分析,N-Gram/N元模型是自然语言处理中一个非常重要的概念,通常在NLP中,它主要有两个重要应用场景:

1、人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。

2、另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。


这是模糊匹配中常用的一种手段。


1、N-gram在两个字符串的模糊匹配中的应用

首先需要介绍一个比较重要的概念:N-Gram距离它是表示,两个字符串s,t分别利用N-Gram语言模型来表示时,则对应N-gram子串中公共部分的长度就称之为N-Gram距离。


例如:假设有字符串s,那么按照N-Gram方法得到N个分词组成的子字符串,其中相同的子字符串个数作为N-Gram距离计算的方式。具体如下所示:

字符串:s="ABC",对字符串进行分词,考虑字符串首尾的字符begin和end,得到begin,A,B,C,end。这里采用二元语言模型,则有:(begin,A)、(A,B)、(B,C)、(C,end)。

字符串:t="AB",对字符串进行分词,考虑字符串首尾的字符begin和end,得到begin,A,B,end。这里采用二元语言模型,则有:(begin,A)、(A,B)、(B,end)。


此时,若求字符串t与字符串s之间的距离可以用M-(N-Gram距离)=0。


然而,上面的N—gram距离表示的并不是很合理,他并没有考虑两个字符串的长度,所以在此基础上,有人提出非重复的N-gram距离,公式如下所示:        

0?wx_fmt=png                                   


上面的字符串距离重新计算为:

4+3-2*3=1


2、N-Gram在判断句子有效性上的应用

假设有一个字符串s="ABC",则对应的BI-Gram的结果如下:(begin,A)、(A,B)、(B,C)、(C,end)。则对应的出现字符串s的概率为:

P(ABC)=P(A|begin)*P(B|A)*P(C|B)*P(end|C)。


在处理文本特征的时候,通常一个关键词作为一个特征。

这也许在一些场景下可能不够,需要进一步提取更多的特征,这个时候可以考虑N-Gram,思路如下:

以Bi-Gram为例,在原始文本中,以每个关键词作为一个特征,通过将关键词两两组合,得到一个Bi-Gram组合,再根据N-Gram语言模型,计算各个Bi-Gram组合的概率,作为新的特征。


N-Gram优缺点

优点:它包含了前N-1个词所能提供的全部信息,这些词对于当前词的出现具有很强的约束力。


缺点:需要相当规模的训练文本来确定模型的参数。当N很大时,模型的参数空间过大。所以常见的N值一般为1,2。还有因数据稀疏而导致的数据平滑问题,解决方法主要是使所有的N-gram概率之和为1和使所有的N-gram概率都不为0。


与Word2Vec:

除此之外,与连续空间的词表示法语言学规则模型对比(例如word2vec构建出的词向量),N-gram语言模型还有以下的局限性:

N-gram模型是根据相互之间没有任何遗传属性的离散单元词而构建,从而不具备连续空间中的词向量所满足的语义上的优势(相似意义的词语具有相似的词向量,从而当系统模型针对某一词语或词序列调整参数时,相似意义的词语和词序列也会发生改变)。


因此,如果在已知关键词权重非常大的情况下,使用N-gram模型或许比较合适。


 近期热文

文本分类特征提取之Word2Vec

干货|免费文本语料训练数据集

既生Mahout,何生Spark MLlib ?

官宣:谷歌 AI 中国中心在北京成立

干货|免费文本语料训练数据集

... ...

从明天起,和每一位亲人通信

告诉他们我的幸福

陌生人,我也为你祝福

愿你有一个灿烂的前程

愿你在尘世获得幸福


文本特征工程之N-Gram_第1张图片

更多干货内容请关注微信公众号“AI 深入浅出”

长按二维码关注


你可能感兴趣的:(文本特征工程之N-Gram)