人工智能自然语言处理:N-gram和TF-IDF模型详解
人工智能自然语言处理:N-gram和TF-IDF模型详解
1.N-gram 模型
N-Gram 是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。
每一个字节片段称为 gram,对所有 gram 的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键 gram 列表,也就是这个文本的向量特征空间,列表中的每一种 gram 就是一个特征向量维度。
该模型基于这样一种假设,第 N 个词的出现只与前面 N-1 个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到。常用的是二元的 Bi-Gram 和三元的 Tri-Gram。
当 n=1 时,一个一元模型为:
$P(w1,w2,⋯,wm)=∏i=1mP(wi)$
当 n=2 时,一个二元模型为:
$P(w1,w2,⋯,wm)=∏i=1mP(wi∣wi−1)$
当 n=3 时,一个三元模型为:
$P(w1,w2,⋯,wm)=∏i=1mP(wi∣wi−2,wi−1)$
一个 n-gram 是 n 个词的序列:
一个 2-gram(bigram 或二元)是两个词的序列,例如 “I love”;
一个 3-gram(trigram 或三元)是三个词的序列,例如 “I love you”。
需要注意的是,通常 n-gram 即表示词序列,也表示预测这个词序列概率的模型。假设给定一个词序列(w1,w2,···,wm),根据概率的链式法则,可得公式 (1.1):
$P(w1,w2,⋯,wm)=P(w1)∗P(w2∣w1)⋯P(wm∣w1,⋯,wm−1)=∏i=1mP(wi∣wi−2,wi−1)$
公式(1.1)右边的 P(wi | w1,w2,···,wi-1)表示某个词 wi 在已知句子 w1,w2,···,wi-1 后面一个词出现的概率
1.1 马尔科夫假设
在实践中,如果文本的长度较长时,公式(1.1)右边的 $P(wi | w1,w2,···,wi-1$的估算会非常困难,因此需要引入马尔科夫假设。
马尔科夫假设是指,每个词出现的概率只跟它前面的少数几个词有关。比如,二阶马尔科夫假设只考虑前面两个词,相应的语言模型是三元(trigram)模型。应用了这个假设表明当前这个词仅仅跟前面几个有限的词有关,因此也就不必追溯到最开始的那个词,这样便可以大幅缩减上述算式的长度。
基于马尔科夫假设,可得公式 (1.2):
$P(wi∣w1,⋯,wi−1)≈P(wi∣wi−n+1,⋯,wi−1)$
当 n = 1 时称为一元模型(unigram model),公式(1.2)右边会演变成 P(wi),此时,整个句子的概率为:
$P(w1,w2,⋯,wm)=P(w1)∗P(w2)⋯P(wm)=∏i=1mP(wi)$
当 n = 2 时称为二元模型(bigram model),公式(1.2)右边会演变成 P(wi | wi-1),此时,整个句子的概率为:
$P(w1,w2,⋯,wm)=P(w1)∗P(w2∣w1)⋯P(wm∣wm−1)=∏i=1mP(wi∣wi−1)$
当 n = 3 时称为三元模型(trigram model),公式(1.2)右边会演变成 P(wi| wi-2,wi-1),此时,整个句子的概率为:
$P(w1,w2,⋯,wm)=P(w1)∗P(w2∣w1)⋯P(wm∣wm−2,⋯,wm−1)=∏i=1mP(wi∣wi−2,wi−1)$
估计 n-gram 模型概率采用极大似然估计(maximum likelihood estimation,MLE)。即通过从语料库中获取计数,并将计数归一化到(0,1),从而得到 n-gram 模型参数的极大似然估计。即:
其中 $count(Wi-n+1,···,Wi)$表示文本序列$(Wi-n+1,···,Wi)$,在语料库中出现的次数。
1.2 N-gram 模型优缺点
总结下基于统计的 n-gram 语言模型的优缺点:
优点:
- 采用极大似然估计,参数易训练;
- 完全包含了前 n-1 个词的全部信息;
- 可解释性强,直观易理解;
缺点:
- 缺乏长期依赖,只能建模到前 n-1 个词;
- 随着 n 的增大,参数空间呈指数增长;
- 数据稀疏,难免会出现 OOV 词(out of vocabulary)的问题;
- 单纯的基于统计频次,泛化能力差
2.TF-IDF
TF-IDF(term frequency-inverse document frequency,词频 - 逆向文件频率) 是一种用于信息检索 (information retrieval)) 与文本挖掘 (text mining) 的常用加权技术。它是一种统计方法,用以评估一个字或词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
在信息检索 (Information Retrieval)、文本挖掘(Text Mining) 以及自然语言处理 (Natural Language Processing) 领域,TF-IDF 算法都可以说是鼎鼎有名。虽然在这些领域中,目前也出现了不少以深度学习为基础的新的文本表达和算分 (Weighting) 方法,但是 TF-IDF 作为一个最基础的方法,依然在很多应用中发挥着不可替代的作用。
TF-IDF 的主要思想是:如果某个单词在一篇文章中出现的频率 TF 高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF(全称 TermFrequency),中文含义词频,即关键词出现在网页当中的频次。
IDF(全称 InverseDocumentFrequency),中文含义逆文档频率,即该关键词出现在所有文档里面的一种数据集合。
TF-IDF 的计算过程为:
第一步,计算词频。
词频(TF)= 文章的总词数某个词在文章中的出现次数
或者
词频(TF)= 该文出现次数最多的词出现的次数某个词在文章中的出现次数第二步,计算逆文档频率。
逆文档频率(IDF)=log(包含该词的文档数 +1 语料库的文档总数)
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近 0。分母之所以要加 1,是为了避免分母为 0(即所有文档都不包含该词)。log 表示对得到的值取对数。第三步,计算 TF-IDF。
TF−IDF= 词频(TF)× 逆文档频率(IDF)
可以看到,TF-IDF 与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就是计算出文档的每个词的 TF-IDF 值,然后按降序排列,取排在最前面的几个词。
2.1 TF-IDF 算法总结
TF-IDF 算法是一种常用的文本特征表示方法,用于评估一个词对于一个文档集或语料库中某个文档的重要程度,常用于以下领域:
(1)搜索引擎;
(2)关键词提取;
(3)文本相似性;
(4)文本摘要。
TF-IDF 算法优点:
简单有效:TF-IDF 算法简单易实现,计算速度快,并且在很多文本相关任务中表现良好。
考虑词频和文档频率:TF-IDF 综合考虑了词频和文档频率两个因素,可以准确表示词语在文档中的重要性。
强调关键词:TF-IDF 算法倾向于给予在文档中频繁出现但在整个语料库中较少见的词更高的权重,从而能够突出关键词。
适用性广泛:TF-IDF 算法可以应用于各种文本相关任务,如信息检索、文本分类、关键词提取等。
TF-IDF 算法缺点:
无法捕捉语义信息:TF-IDF 算法仅根据词频和文档频率进行计算,无法捕捉到词语之间的语义关系,因此在处理一些复杂的语义任务时可能效果有限。
忽略词序信息:TF-IDF 算法将文本表示为词语的集合,并忽略了词语之间的顺序信息,因此无法捕捉到词语顺序对于文本含义的影响。
对文档长度敏感:TF-IDF 算法受文档长度的影响较大,较长的文档可能会有较高的词频,从而影响到特征权重的计算结果。
词汇表限制:TF-IDF 算法需要构建词汇表来对文本进行表示,词汇表的大小会对算法的性能和计算开销产生影响,同时也可能存在未登录词的问题。
主题混杂问题:在包含多个主题的文档中,TF-IDF 算法可能会给予一些频繁出现的词较高的权重,导致提取的关键词并不完全与文档主题相关。
3.关键知识点总结:
在N-gram模型中,N表示表示每次取出的单词数量
在N-gram模型中,当N取值越大,模型的效果会不一定变得更好(要合适)
N-gram模型可以用于文本分类、语音识别和机器翻译等自然语言处理任务。
N-gram模型的主要优点是可以捕捉上下文信息,但缺点是无法处理未知的单词。
在TF-IDF模型中,IDF值越大代表该词对文本内容的区分度越高
在TF-IDF模型中,词频(TF)指的是某个词在一篇文档中出现的次数。
更多优质内容请关注公号&知乎:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
人工智能自然语言处理:N-gram和TF-IDF模型详解的更多相关文章
- Tensorflow中的图(tf.Graph)和会话(tf.Session)详解
Tensorflow中的图(tf.Graph)和会话(tf.Session) Tensorflow编程系统 Tensorflow工具或者说深度学习本身就是一个连贯紧密的系统.一般的系统是一个自治独立的 ...
- tf.slice()函数详解(极详细)
目录 1.官方注释 2.参数解释 3.例子 参考 @(tf.slice()函数详解 ) tf.slice()是TensorFlow库中分割张量的一个函数,其定义为def slice(input_, b ...
- 开源自然语言处理工具包hanlp中CRF分词实现详解
CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题. [gerative-discriminative.png] CRF训练 这类耗时的任务,还 ...
- 中文自然语言处理工具hanlp隐马角色标注详解
本文旨在介绍如何利用HanLP训练分词模型,包括语料格式.语料预处理.训练接口.输出格式等. 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,可以通过少量 ...
- TF/IDF(term frequency/inverse document frequency)
TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...
- 基于TF/IDF的聚类算法原理
一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...
- 使用solr的函数查询,并获取tf*idf值
1. 使用函数df(field,keyword) 和idf(field,keyword). http://118.85.207.11:11100/solr/mobile/select?q={!func ...
- TF/IDF计算方法
FROM:http://blog.csdn.net/pennyliang/article/details/1231028 我们已经谈过了如何自动下载网页.如何建立索引.如何衡量网页的质量(Page R ...
- tf–idf算法解释及其python代码实现(下)
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- tf–idf算法解释及其python代码实现(上)
tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...
随机推荐
- MAC 转 Byte[] 数组
MAC 转 Byte[] 数组 /** * MAC 地址转 byte[] * 默认以小端序转换 * * @param macAddr "E4:54:E8:81:FC:FD" * @ ...
- linux day1:VMware虚拟机配置 CentOS系统配置
目录 运维岗位说明 计算机的种类 服务器的种类 服务器的品牌 服务器内部组成 缓存和缓冲 服务器磁盘阵列 raid5 linux系统发展史 去IOE运动 虚拟化技术 虚拟化软件下载 VMware安装 ...
- SpringCloud Alibaba技术栈(一)微服务介绍
B 站黑马视频教程:Here 源码-笔记:Code for Github 第一章 微服务总览 1. 软件系统架构的历史 软件系统架构大致经历了:单体应用架构->垂直应用架构->分布式架构- ...
- Codeforces Round #728 (Div. 2) A~C 补题记录
比赛链接:Here 1541A. Pretty Permutations 给定 \(1,2,3,4,...n\) 序列,让每一个数字都不处于原来的位置,但总的移动距离要最小 \(n\) 为偶数的情况 ...
- AtCoder Beginner Contest 204 (AB水题,C题DFS,D题位运算DP,E题BFS好题)
补题链接:Here A - Rock-paper-scissors 石头剪刀布,两方是一样的则输出该值,否则输出该值 int s[4] = {0, 1, 2}; void solve() { int ...
- 如何设置IDEA代码风格为Google风格,使用Google风格format
1.在Github仓库寻找:google style 为了节省大家时间直接放链接了:Here 2.进到项目 找到名为intellij-java-google-style.xml 文件 Ctrl + F ...
- 5G“乍到”,图扑带你了解室内定位可视化的实现与新突破
前言 现代工业化的推进在极大加速现代化进程的同时也带来的相应的安全隐患,在传统的可视化监控领域,一般都是基于 Web SCADA 的前端技术来实现 2D 可视化监控,本系统采用 Hightopo 的 ...
- 5、SpringBoot连接数据库引入mybatis
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- <vue 路由 5、动态路由-标签上传递参数>
一.效果 在about页面点击"我的",路径里传入了参数zhangsan,在"我的"页面里接收传递过来的张三并展现出来.注:标签中传递参数写法 二.代码结构 注 ...
- vue+elementUI+WebSocket接收后台实时消息推送
vue+elementUI+WebSocket接收后台实时消息推送 https://blog.csdn.net/weixin_40888956/article/details/105971432?ut ...