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

最近在做文本的特征工程构建,陆陆续续搜集到一些公认的对文本表征能力比较强的特征,比如频次法、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距离,公式如下所示:

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

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 中国中心在北京成立

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

... ...

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

告诉他们我的幸福

陌生人,我也为你祝福

愿你有一个灿烂的前程

愿你在尘世获得幸福


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

长按二维码关注

文本特征工程之N-Gram相关推荐

  1. 文本分析合集,文本向量处理的方法jieba,对文本的特征工程之TfidfVectorizer以及结合TruncatedSVD,WordCloud词云图展示

    文本分析合集,文本向量处理的方法jieba,对文本的特征工程之TfidfVectorizer以及结合TruncatedSVD,WordCloud词云图展示 对于一列文本我们需要对其进行操作的话首先要进 ...

  2. 特征工程之MinMaxScaler、StandardScaler、Normalizer、Binarizer

    特征工程之MinMaxScaler.StandardScaler.Normalizer.Binarizer 目录 特征工程之MinMaxScaler.StandardScaler.Normalizer ...

  3. 特征工程之one-hot解读

    在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from Euro ...

  4. Spark ML 特征工程之 One-Hot Encoding

    文章目录 1.什么是One-Hot Encoding 2.One-Hot Encoding在Spark中的应用 2.1 数据集预览 2.2 加载数据集 2.3 使用OneHotEncoder处理数据集 ...

  5. 特征工程之PCA降维(主成分分析)总结

    目录 1.PCA是什么 2. 算法思路 详细推算 特征值分解 优缺点 参考链接: 1.PCA是什么 PCA是什么? PCA(Principal Component Analysis)是一种常用的数据分 ...

  6. 特征工程之One-Hot编码、label-encoding、自定义编码

    目录 One-Hot编码 代码实现 One-Hot编码优缺点 One-Hot编码使用场景 归一化适用场景 label encoding<

  7. 论文简述 | TextSLAM:具有平面文本特征的视觉SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1 摘要 我们建议将人工场景中的文本对象紧密集成到可视化SLAM中,基于文本的视觉SLAM的核心思想是 ...

  8. vspy如何在图形面板显示报文_Vspy工程之C Code Interface的使用(Vspy系列其三)

    Vspy工程之C Code Interface的使用(Vspy系列其三) Vspy工程之C Code Interface的使用(Vspy系列其三) Vspy工程之C Code Interface的使用 ...

  9. 数据挖掘-文本特征提取方法研究

    一. 课题背景概述 文本挖掘是一门交叉性学科,涉及数据挖掘.机器学习.模式识别.人工智能.统计学.计算机语言学.计算机网络技术.信息学等多个领域.文本挖掘就是从大量的文档中发现隐含知识和模式的一种方法 ...

最新文章

  1. AI 与区块链:两大热门技术,会碰撞出什么样的火花?
  2. C++中智能指针的设计和使用
  3. Hibernate组件(Component)映射
  4. 南华大学java补考_关于2017年秋季学期学生补考报名及成绩复核的通知
  5. Kickstart的配置
  6. C语言在main中输入2个整数ab,请教一个C语言问题。若输入3个整数3,2,1,则以下程序输出的结果是.,c 语言问题 输入三个整数 按从小到大输出...
  7. ubuntu下mysql无法启动_升级Ubuntu到10.04后MySQL无法启动
  8. SQL Server 2008 R2的完全卸载
  9. 最强的右键菜单工具:超级右键专业版 mac中文版
  10. python关键字详解_Python 关键字
  11. 英伟达、AMD显卡纷纷告急,PC DIY市场的落日黄昏
  12. android 简单拍照,android实现简单拍照功能
  13. 【开发日常】【Java】Java小程序汽车租赁
  14. python的pillow给图片加文字_python PIL(pillow)图像处理-图片上添加文字
  15. Win11 Excel文件变成白板图标怎么解决?
  16. Android 基础入门教程--笔记
  17. sun.misc.Cleaner实现堆外内存回收
  18. 皇家墨尔本理工大学计算机科学专业,皇家墨尔本理工大学计算机科学本科专业.pdf...
  19. 主机与虚拟机静态IP 设置
  20. 计算机控制与自动化专业世界排名,2019ARWU软科世界大学自动化与控制专业排名TOP50...

热门文章

  1. 零基础入门金融风控之贷款违约预测—赛题理解
  2. 上手python之json数据格式
  3. java初学之短路运算符练习
  4. 2022大厂高频软件测试面试真题(附答案)
  5. 如何快速把一个11g数据库插入到12c cdb中去?
  6. java中instr函数,Oracle中instr函数使用方法
  7. 苹果教程:apple设备如何打开隐藏式字幕和SDH功能?
  8. 小编程(三):用户登录注册界面开发及用户信息管理案例代码详解
  9. SQL:With recursive 递归用法
  10. 同一个局域网中主机ping不通的解决方法