Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法教程:能够体现文本语义关系的关键词提取算法

算法教程:能够体现文本语义关系的关键词提取算法

原创
作者头像
人工智能的秘密
发布于 2017-12-25 12:08:39
发布于 2017-12-25 12:08:39
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

关键词提取能让我们快速地了解一篇文章。在信息爆炸的时代,能够有效提取文本的关键词,对于快速、及时、高效地获取信息是非常有帮助的。本文介绍一种能够体现文本语义关系的关键词提取算法。本文选自《自然语言处理技术入门与实战》一书。

场景

对于如下的文本,如何提取出更加符合其主题分布的关键词。

1.鲜花多少钱?

2.白百合多少钱?

3.水仙花多少钱?

上面这三个语句,描述的都是鲜花这个主题下面的问题。所以如果希望提取的关键词更加符合其主题分布,那么应该是“鲜花”的权重最高。如果按照TF-IDF、TextRank的算法(更多反映的是文本的统计信息的算法),“鲜花”、“白百合”、“水仙花”这三个词的权重是一样的(当然如果你认为“多少钱”应该是这三个语句的主题,那么这三个词的权重一致也就是理所当然的了)。针对这种情况,我们介绍一种基于LDA(Latent Dirichlet Allocation)的关键词提取算法。

LDA模型包含词、主题和文档三层结构,如图1所示。LDA最早是由Blei等,以pLSI为基础,提出的服从Dirichlet分布的K维隐含随机变量表示文档主题概率分布、模拟文档的一个产生过程。后来Griffiths等对参数β施加了Dirichlet先验分布,使得LDA模型成为一个完整的生成模型。

图1 LDA的图模型

其中,

1.φk为主题k中的词汇概率分布,θm为第m篇文档的主题概率分布,φk和θm服从Dirichlet分布,φk和θm作为多项式分布的参数分别用于生成主题和单词。

2.α和β分别为φk和θm的分布参数,α反映了文档集中隐含主题之间的相对强弱,β为所有隐含主题自身的概率分布。

3.K为主题数目。

4.M为文档集中文档的数目。

5.Nm为第m篇文档的词的总数。

6.ωm,n和Zm,n分别为第m篇文档中第n个单词和其隐含主题。

原理

如上所述,在LDA模型中,包含词、主题、文档三层结构。该模型认为一篇文档的生成过程是:先挑选若干主题,再为每个主题挑选若干词语。最终,这些词语就组成了一篇文章。所以主题对于文章是服从多项分布的,同时单词对于主题也是服从多项分布的。基于这样的理论,我们可以知道,如果一个单词w对于主题t非常重要,而主题t对于文章d又非常重要,那么单词w对于文章d就很重要,并且在同主题的词Wi(i=1,2,3,…)里面,单词w的权重也会比较大。而这正好可以解决我们上面所描述的问题。

所以下面就要计算两个概率:单词对于主题的概率和主题对于文档的概率。这里我们选择Gibbs采样法来进行概率的计算。具体公式如下:

主题Tk下各个词Wi的权重计算公式:

【公式1】P(wi│T_k )=(C_ik+β)/(∑(i=1)^N▒C_ik +N*β)=φ_i^(t=k)

其中

Wi:表示单词集合中任一单词。

Tk:表示主题集合中任一主题。

P(wi│Tk ):表示在主题为k时,单词i出现的概率,其简记的形式为φi^(t=k)。

Cik:表示语料库中单词i被赋予主题k的次数。

N:表示词汇表的大小。

β:表示超参数。

文档D_m下各个词T_k的权重计算公式:

【公式2】P(Tk│D_m )=(C_km+α)/(∑(k=1)^K▒Ckm +K*α)=θ(t=k)^m

其中

Dm:表示文档集合中任一文档。

Tk:表示主题集合中任一主题。

P(Tk丨Dm):表示在文档为m时,主题k出现的概率,其简记的形式为θt=k^m。

Ckm:表示语料库中文档m中单词被赋予主题k的次数。

K:表示主题的数量。

α:表示超参数。

在上述两个公式中,为了平滑非包含的单词和主题,所以分子中分别添加了LDA模型中的超参数α和β。如果觉得所计算的场景不需要,也可以不加这两个参数。

现在得到了指定文档下某主题出现的概率,以及指定主题下、某单词出现的概率。那么由联合概率分布可以知道,对于指定文档某单词出现的概率可以由如下公式计算得到:

【公式3】P(wi│D_m )=∑(k=1)^K▒〖φi^(t=k)*〗 θ(t=k)^m

基于上述公式,我们就可以算出单词i对于文档m的主题重要性。但是由于在LDA主题概率模型中,所有的词汇都会以一定的概率出现在每个主题,所以这样会导致最终计算的单词对于文档的主题重要性值区分度受影响。为了避免这种情况,一般会将单词相对于主题概率小于一定阈值的概率置为0。至于这个阈值设置为多少,则可以根据自己的实际情况自由选择。

实例

基于本文开头提出的场景,我们来完成基于文章主题权重的关键词提取实例。同上面所述,分词在这里不是重点,所以分词部分就不做特别说明了。假设我们对上述一句话完成了分词,并且将各个词按照空格分隔存储在了一起。

首先处理掉非重要词,采用正向过滤的方法,即选择特定词性的词,在这里我们选择词性为名词、形容词等词性的词。

在得到候选词表后,对语料库进行Gibbs采样,得到单词-主题,文档-主题的分布统计矩阵。

计算单词对于文档的主题概率权重的实现代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int j = 0; j < strArray.length; j++) {
String word = strArray[j];//获得当前要计算的单词
int i = wordIndexMap.get(word);//获得给定单词在单词-主题分布矩阵中的行号
//计算单词在指定文档m中的主题概率权重
double word2TopicWeightSum = 0.0;
//遍历所有主题,计算其对于单词i的频次总和
for (int k = 0; k < topicSize; k++) {
  word2TopicWeightSum += word2TopicCount[i][k];
}
double topic2DocWeightSum = 0.0;
//遍历所有主题,计算其对于文档m的频次总和
for (int k = 0; k < topicSize; k++) {
  topic2DocWeightSum += topic2DocCount[m][k];
}
double weightSum = 0.0;
//遍历所有主题,计算其单词i对于文档m的主题概率权重
for (int k = 0; k < topicSize; k++) {
  double word2TopicWeight = (word2TopicCount[i][k] + beta)/(word2TopicWeightSum + wordSize*beta);
  double topic2DocWeight = (topic2DocCount[m][k] + alpha)/(topic2DocWeightSum + topicSize*alpha);
  weightSum += word2TopicWeight*topic2DocWeight;
}
resultMap.put(word, weightSum);
    }

这里以一个文档文本的处理为例,多个文档则在外面再多加一层循环即可。首先对输入文本按照空格进行切分,获得每一个单词,然后统计每个词的主题概率权重。其中代码部分为第1~20行。

1.因为对于每一个单词,在计算其相对于文档m的主题概率权重的时候,文档m都是确定的,所以在遍历每个单词之前先要对主题-文档的分布概率求和,计算其总的频次数,以备后续计算使用。如代码第1~4行所示。

2.对于要计算的单词,首先要获得它在单词-文档的分布矩阵中的位置,也即双数组存储的行号。这里需要说明一点,因为我们待计算的文档,也会放到语料库中进行学习,所以不会存在待计算的单词不在已知单词库中的情况。对于因为主题概率分布太小而被过滤掉的单词,它的计数会被置为0,而这一单元格的记录还是被保留的,所以这里不会出现空指针的问题。

3.因为主题数量一般不会太大,所以就先进行了主题的遍历,求出指定单词相对于各个主题分布词频数的总和,以备后续计算使用。如代码第11~13行所示。

4.最终我们将计算结果存储在一个map中,以备后续计算排序筛选,具体计算方式见《自然语言处理技术入门与实践》一书。

拓展

从上可以看出,基于LDA主题概率模型的关键词提取方法的准确度,会严重依赖于基础语料库,而这个语料库还需要有一定的丰富性,这样才可以使得计算的概率值具有一定的鲁棒性。这就会造成比较大的人力投入,对于模型的灵活扩展就会受到限制。

基于本框架本身的改进并不是很多,而借助于其他方法,对于上述缺陷的改进的方法还是比较多的,比如通过借助于知网,或者同义词林的方法获得单词的准确语义关系,这样就可以获得更好的语义关系。同时基于这些准确的语义关系,可以建立词语结构模板;然后基于这些模板运用频繁模式挖掘,发掘更多的符合这样词语结构模板的词语关系;并且根据预先设置的规则条件,给这些词语对添加对应的语义关系;这样就可以实现语义的批量扩展,增大基础的语料数据。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术干货 | 如何做好文本关键词提取?从三种算法说起
在自然语言处理领域,处理海量的文本文件最关键的是要把用户最关心的问题提取出来。而无论是对于长文本还是短文本,往往可以通过几个关键词窥探整个文本的主题思想。与此同时,不管是基于文本的推荐还是基于文本的搜索,对于文本关键词的依赖也很大,关键词提取的准确程度直接关系到推荐系统或者搜索系统的最终效果。因此,关键词提取在文本挖掘领域是一个很重要的部分。 关于文本的关键词提取方法分为有监督、半监督和无监督三种: 1 有监督的关键词抽取算法 它是建关键词抽取算法看作是二分类问题,判断文档中的词或者短语是或者不是关键词
达观数据
2018/04/02
5.6K0
技术干货 | 如何做好文本关键词提取?从三种算法说起
nlp 关键词提取_nlp信息抽取
关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作。
全栈程序员站长
2022/09/29
1.1K0
nlp 关键词提取_nlp信息抽取
实战关键词提取
关键词是代表文章重要内容的一组词,在文献检索、自动文摘、文本聚类/分类等方面有着重要的应用。现实中大量的文本不包含关键词,这使得便捷获取文本信息更困难,所以自动提取关键词技术具有重要的价值和意义。
伊泽瑞尔
2022/05/31
8550
实战关键词提取
NLP关键词提取方法总结及实现
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 一、关键词提取概述 关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作。 从算法的角度来看,关键词提取算法主要有两类:无监督关键词提取方法和有监督关键词提取方法。 1、无监督关键词提取方法 不需要人工标注的语料,利用某些方法发现文本中比较重要的词作为关键词,进
机器学习AI算法工程
2022/03/31
10.1K0
NLP关键词提取方法总结及实现
LDA主题模型 | 原理详解与代码实战
很久之前的LDA笔记整理,包括算法原理介绍以及简单demo实践,主要参考自July老师的<通俗理解LDA主题模型>。
NewBeeNLP
2020/08/26
9.1K0
LDA主题模型 | 原理详解与代码实战
技术干货 | 一文详解LDA主题模型
作者简介 夏琦,达观数据NLP组实习生,就读于东南大学和 Monash University,自然语言处理方向二年级研究生,师从知识图谱专家漆桂林教授。曾获第五届“蓝桥杯”江苏省一等奖、国家二等奖。 本篇博文将详细讲解LDA主题模型,从最底层数学推导的角度来详细讲解,只想了解LDA的读者,可以只看第一小节简介即可。PLSA和LDA非常相似,PLSA也是主题模型方面非常重要的一个模型,本篇也会有的放矢的讲解此模型。如果读者阅读起来比较吃力,可以定义一个菲波那切数列,第 f(n) = f(n-1) + f
达观数据
2018/03/30
3.4K0
技术干货 | 一文详解LDA主题模型
NLP系列(二)LDA主题模型
LDA模型是NLP中很基础也是大家广为熟知的模型,在面试过程也经常遇到。本文简单讲述下其大致流程。
致Great
2019/06/24
4.5K0
NLP系列(二)LDA主题模型
【算法】LDA算法及应用
Latent Dirichlet Allocation是Blei等人于2003年提出的基于概率模型的主题模型算法,LDA是一种非监督机器学习技术,可以用来识别大规模文档集或语料库中的潜在隐藏的主题信息。该方法假设每个词是由背后的一个潜在隐藏的主题中抽取出来。
陆勤_数据人网
2018/07/30
2.1K0
【算法】LDA算法及应用
NLP 点滴 :文本相似度 (中)
肖力涛
2017/08/23
3.5K0
NLP 点滴 :文本相似度 (中)
基于LDA的文本主题聚类Python实现
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。
里克贝斯
2021/05/21
3.9K0
基于LDA的文本主题聚类Python实现
文本主题模型之LDA(二) LDA求解之Gibbs采样算法
    本文是LDA主题模型的第二篇,读这一篇之前建议先读文本主题模型之LDA(一) LDA基础,同时由于使用了基于MCMC的Gibbs采样算法,如果你对MCMC和Gibbs采样不熟悉,建议阅读之前写的MCMC系列MCMC(四)Gibbs采样。
刘建平Pinard
2018/08/07
1.3K0
文本主题模型之LDA(二) LDA求解之Gibbs采样算法
【LDA数学八卦-5】LDA 文本建模
5. LDA 文本建模 5.1 游戏规则 对于上述的 PLSA 模型,贝叶斯学派显然是有意见的,doc-topic 骰子θ→m和 topic-word 骰子φ→k都是模型中的参数,参数都是随机变量,怎么能没有先验分布呢?于是,类似于对 Unigram Model 的贝叶斯改造, 我们也可以如下在两个骰子参数前加上先验分布从而把 PLSA 对应的游戏过程改造为一个贝叶斯的游戏过程。由于 φ→k和θ→m都对应到多项分布,所以先验分布的一个好的选择就是Drichlet 分布,于是我们就得到了 LDA(Latent
机器学习AI算法工程
2018/03/12
1.3K0
【LDA数学八卦-5】LDA 文本建模
【数据挖掘】主题模型——LDA比较通俗的介绍
一、主题模型 要介绍LDA,首先说说主题模型(Topic Model)的概念。主题模型是一种生成式模型,而且是通过主题来生成的。就是说,我们认为一篇文档的每个词都是通过以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语这样一个过程得到的。 何谓“主题”呢?其含义就是诸如一篇文章、一段话、一个句子所表达的中心思想,只不过不同的是,从统计模型的角度来说,我们是用一个特定的词频分布来刻画主题的,不同主题的词相同,但是词频不同。一篇文档一般有多个主题,这样,我们就可以
陆勤_数据人网
2018/02/27
5.7K0
【数据挖掘】主题模型——LDA比较通俗的介绍
技术干货:一文详解LDA主题模型
本文介绍了自然语言处理中的文本分类任务,以及常用的文本分类算法。包括朴素贝叶斯分类器、支持向量机、逻辑回归和神经网络等。还介绍了这些算法的具体实现步骤和优缺点,以及适用场景。
企鹅号小编
2017/12/27
1.5K0
技术干货:一文详解LDA主题模型
【技术分享】隐式狄利克雷分布
LDA是一种概率主题模型:隐式狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。LDA是2003年提出的一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出。 通过分析一些文档,我们可以抽取出它们的主题(分布),根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。
腾讯云TI平台
2020/01/03
2K0
聚类算法简述
K-MEANS 算法 K-MEANS 评估聚类结果与选择K MapReduce GMM 算法 初始化 过拟合 K-MEANS比较 LDA LDA和clustering的区别 数学基础 四种分布 共轭分
用户1147754
2018/01/03
2.2K0
聚类算法简述
我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)
关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),本文讲后者。
mantch
2019/07/30
3.5K0
我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)
Python主题建模详细教程(附代码示例)
主题建模是自然语言处理(NLP)和文本挖掘中常用的技术,用于提取给定文本的主题。利用主题建模,我们可以扫描大量的非结构化文本以检测关键词、主题和主题。
磐创AI
2023/08/29
1.1K0
Python主题建模详细教程(附代码示例)
Notes | 文本大数据信息提取方法
本文为刊载于《经济学(季刊)》2019 年第 4 期上《文本大数据分析在经济学和金融学中的应用:一个文献综述》[1]的阅读笔记。原论文详细综述了文本大数据信息提取方法、文本分析方法在经济学和金融学中的应用,是了解文本分析方法在经济学研究中应用的好材料。本篇笔记聚焦论文的第二部分,即文本大数据信息提取方法,旨在为文本分析方法的学习和日后研究运用提供基本认识。
PyStaData
2020/07/21
2.8K0
Notes | 文本大数据信息提取方法
通俗理解LDA主题模型
0 前言 印象中,最开始听说“LDA”这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印过一次,但不知是因为这篇文档的前序铺垫太长(现在才意识到这些“铺垫”都是深刻理解LDA 的基础,但如果没有人帮助初学者提纲挈领、把握主次、理清思路,则很容易陷入LDA的细枝末节之中),还是因为其中的数学推导细节太多,导致一直没有完整看完过。 理解LDA,可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布、多项分布、beta分布、Dir
机器学习AI算法工程
2018/03/13
20.7K0
通俗理解LDA主题模型
相关推荐
技术干货 | 如何做好文本关键词提取?从三种算法说起
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验