关键词抽取方法

article/2025/9/21 20:29:17

1、关键词提取

为了方便用户快速了解文章的中心主题,会抽取文章的一些中心词来表达文章的中心思想。关键词抽取就是通过一定的方法抽取出能表达文章的中心主题的一系列方法。

2、关键词抽取方法分类

2.1、有监督无监督抽取方法

无监督关键词提取方法主要有三类:基于统计特征的关键词提取(TF,TF-IDF);基于词图模型的关键词提取(PageRank,TextRank);基于主题模型的关键词提取(LDA)

  • 基于统计特征的关键词提取算法的思想是利用文档中词语的统计信息抽取文档的关键词;
  • 基于词图模型的关键词提取首先要构建文档的语言网络图,然后对语言进行网络图分析,在这个图上寻找具有重要作用的词或者短语,这些短语就是文档的关键词;
  • 基于主题关键词提取算法主要利用的是主题模型中关于主题分布的性质进行关键词提取;

有监督关键词提取方法

将关键词抽取过程视为二分类问题,先提取出候选词,然后对于每个候选词划定标签,要么是关键词,要么不是关键词,然后训练关键词抽取分类器。当新来一篇文档时,提取出所有的候选词,然后利用训练好的关键词提取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。

2.2、无监督方法和有监督方法优的缺点

无监督方法不需要人工标注训练集合的过程,因此更加快捷,但由于无法有效综合利用多种信息 对候选关键词排序,所以效果无法与有监督方法媲美;而有监督方法可以通过训练学习调节多种信息对于判断关键词的影响程度,因此效果更优,有监督的文本关键词提取算法需要高昂的人工成本,因此现有的文本关键词提取主要采用适用性较强的无监督关键词提取。

2.3、关键词提取常用工具包

  • jieba
  • Textrank4zh (TextRank算法工具)
  • SnowNLP  (中文分析)简体中文文本处理
  • TextBlob (英文分析)

3、常见的关键词抽取方法

3.1、TFIDF

3.1.1、TF-IDF算法介绍

       TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。 TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。     

词频(TF)表示词条(关键字)在文本中出现的频率。这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。表示如下:

       TF=该词语在这篇内容中出现的次数/这篇内容所有的词语数量     

逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目再将得到的商取对数得到。如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1

       IDF=log((语料库中的文档总数包含该词语的文档数+1)/(语料库中的文档总数包含该词语的文档数+1))

   TF-IDF=TF * IDF

       某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

3.1.2、TFIDF关键词提取jieba实现

import jieba.analyse'''
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
'''text = '关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、\
信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、\
文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作\
'keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=True, allowPOS=())
print(keywords) #[('文档', 0.7683580497346154), ('文本', 0.4587102868907692), ('关键词', 0.45658796811333335), ('挖掘', 0.37005466278512816), ('文本检索', 0.30653250007435895)]

3.1.3、tfidf的缺点

优点:

解释性强,能快速实现

缺点:

1)TF-IDF 采用文本逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文本集已经分类的情况下。

2)在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 十分有效地反映单词的重要程度和特征词的分布情 况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被盖。

3)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。

4)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。

5)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。

6)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

3.2、TextRank关键词提取

3.2.1、TextRank原理简介

TextRank算法是一种基于图的用于关键词抽取和文档摘要的排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它利用一篇文档内部的词语间的共现信息(语义)便可以抽取关键词,它能够从一个给定的文本中抽取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法抽取出该文本的关键句。

TextRank算法的基本思想是将文档看作一个词的网络,该网络中的链接表示词与词之间的语义关系。TextRank算法将词视为“万维网上的节点”,根据词之间的共现关系计算每个词的重要性,并将PageRank中的有向边变为无向边。

3.2.2、TextRank具体构建过程

 

3.2.3、TextRank实例

import jieba.analyse
'''
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 textrank 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
'''if __name__ == "__main__":text = "来源:中国科学报本报讯(记者肖洁)又有一位中国科学家喜获小行星命名殊荣!4月19日下午,中国科学院国家天文台在京举行“周又元星”颁授仪式," \"我国天文学家、中国科学院院士周又元的弟子与后辈在欢声笑语中济济一堂。国家天文台党委书记、" \"副台长赵刚在致辞一开始更是送上白居易的诗句:“令公桃李满天下,何须堂前更种花。”" \"据介绍,这颗小行星由国家天文台施密特CCD小行星项目组于1997年9月26日发现于兴隆观测站," \"获得国际永久编号第120730号。2018年9月25日,经国家天文台申报," \"国际天文学联合会小天体联合会小天体命名委员会批准,国际天文学联合会《小行星通报》通知国际社会," \"正式将该小行星命名为“周又元星”。"# 基于jieba的textrank算法实现keywords = jieba.analyse.textrank(text,topK=6,withWeight=True)print(keywords)   #[('小行星', 1.0), ('命名', 0.6266890825831086), ('国际', 0.5926007143549065), ('中国', 0.5078347136494592), ('国家', 0.45833708297743847), ('天文学家', 0.3978444911417721)]

优点:

1) 无监督方式,无需构造数据集训练。

2) 算法原理简单且部署简单。

3) 继承了PageRank的思想,效果相对较好,相对于TF-IDF方法,可以更充分的利用文本元素之间的关系。

缺点:

1) 结果受分词、文本清洗影响较大,即对于某些停用词的保留与否,直接影响最终结果。

2) 虽然与TF-IDF比,不止利用了词频,但是仍然受高频词的影响,因此,需要结合词性和词频进行筛选,以达到更好效果,但词性标注显然又是一个问题。

3.3、LDA(Latent Dirichlet Allocation)文档主题生成模型

主题模型是一种统计模型用于发现文档集合中出现的抽象“主题”。主题建模是一种常用的文本挖掘工具,用于在文本体中发现隐藏的语义结构。

LDA也称三层贝叶斯概率模型,包含词、主题和文档三层结构;利用文档中单词的共现关系来对单词按主题聚类,得到“文档-主题”和“主题-单词”2个概率分布。

PLSA和LDA的过程是一样的,只是引入了dirichlet主题分布和词分布的先验

3.2.1、LDA理论

 根据文档反推其主题分布

    反过来,既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。

    换言之,人类根据文档生成模型写成了各类文章,然后丢给了计算机,相当于计算机看到的是一篇篇已经写好的文章。现在计算机需要根据一篇篇文章中看到的一系列词归纳出当篇文章的主题,进而得出各个主题各自不同的出现概率:主题分布。即文档d和单词w是可被观察到的,但主题z却是隐藏的。

    如下图所示(图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):

上图中,文档d和词w是我们得到的样本(样本随机,参数虽未知但固定,所以pLSA属于频率派思想。区别于LDA:样本固定,参数未知但不固定,是个随机变量,服从一定的分布,所以LDA属于贝叶斯派思想),可观测得到,所以对于任意一篇文档,其是已知的。

    从而可以根据大量已知的文档-词项信息,训练出文档-主题和主题-词项,如下公式所示:

    

    故得到文档中每个词的生成概率为:

3.3.2、基于LDA主题模型的关键词提取算法实现

from gensim import corpora, models
import jieba.posseg as jp
import jiebadef get_text(texts):flags = ('n', 'nr', 'ns', 'nt', 'eng', 'v', 'd')  # 词性stopwords = ('的', '就', '是', '用', '还', '在', '上', '作为')  # 停用词words_list=[]for text in texts:words = [w.word for w in jp.cut(text) if w.flag in flags and w.word not in stopwords]words_list.append(words)return words_listdef lda_model(words_list):dictionary=corpora.Dictionary(words_list)#dictionary.token2id获取<单词,id>对;dictionary.doc2bow获取<文档,向量>对print(dictionary.token2id)corpus=[dictionary.doc2bow(words) for words in words_list]print(corpus)#lda主题模型lda_model = models.ldamodel.LdaModel(corpus=corpus, num_topics=2, id2word=dictionary, passes=10)return lda_modelif __name__ == "__main__":texts = ['作为千元机中为数不多拥有真全面屏的手机,OPPO K3一经推出,就簇拥不少粉丝', \'很多人在冲着这块屏幕购买了OPPO K3之后,发现原来K3的过人之处不止是在屏幕上', \'OPPO K3的消费者对这部手机总体还是十分满意的', \'吉利博越PRO在7月3日全新吉客智能生态系统GKUI19发布会上正式亮相', \'今年上海车展,长安CS75 PLUS首次亮相', \'普通版车型采用的是双边共双出式排气布局;运动版本车型采用双边共四出的排气布局']# 获取分词后的文本列表words_list = get_text(texts)print('分词后的文本:')print(words_list)# 获取训练后的LDA模型lda_model = lda_model(words_list)# 可以用 print_topic 和 print_topics 方法来查看主题# 打印所有主题,每个主题显示5个词topic_words = lda_model.print_topics(num_topics=2, num_words=5)print('打印所有主题,每个主题显示5个词:')print(topic_words)# 输出该主题的的词及其词的权重words_list = lda_model.show_topic(0, 5)print('输出该主题的的词及其词的权重:')print(words_list)

3.3.3、LDA优缺点

优点

1、LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。无需标注数据

2、它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。易于理解

3、document-level word co-occurrences 很稀疏,短文本上效果不好

缺点

1、但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。

2、每一个主题又代表了很多单词所构成的一个概率分布。由于 Dirichlet分布随机向量各分量间的弱相关性(之所以还有点“相关”,是因为各分量之和必须为1),使得我们假想的潜在主题之间也几乎是不相关的,这与很多实际问题并不相符,从而造成了LDA的又一个遗留问题。

3.4、基于词向量和聚类的关键词提取方法

先将文本中的词词向量表示->通过kmeans方法聚类->计算各个词与各个中心的距离->选取每个聚类的关键词;目前词向量表示方法有fasttext,word2vec,bert等。

3.5、有监督问题的特征选择提取词 

一般在模型中,词都可以表示为特征,通过模型训练可以发现一些一些关键的特征;在文本中,这些特征可以对应于词。比如树模型的信息增益,gini系数等

 

参考文献

https://www.cnblogs.com/enhaofrank/p/13972754.html (关键词提取 LDA,TFIDF)

https://blog.csdn.net/asialee_bird/article/details/96454544 (关键词提取的方法汇总,tfidf,textrank,lda,word2vec,信息增益,卡方检验,树模型)

https://blog.csdn.net/asialee_bird/article/details/81486700 (tfidf算法介绍及实现)

https://blog.csdn.net/asialee_bird/article/details/96894533 (textrank算法介绍)

 https://blog.csdn.net/wotui1842/article/details/80351386(textrank和pagerank的区别、以及textrank的具体构建过程;textrank4zh源码详解)

https://zhuanlan.zhihu.com/p/126733456 (textrank和pagerank的区别;给出了构建图的实例)

https://www.cnblogs.com/jackchen-net/p/8207009.html (jieba的各种使用)

https://blog.csdn.net/v_JULY_v/article/details/41209515 (LDA主题模型详解)

https://blog.csdn.net/chuange6363/article/details/100752622(LDA优缺点)

 

 


http://chatgpt.dhexx.cn/article/rT4nhd0F.shtml

相关文章

自然语言处理之——关键词提取(一)

一&#xff0e; 摘要 本次的分享中&#xff0c;我们将了解目前较常用的关键词提取技术。关键词是代表文章重要内容的一组词。在文本的分类聚类、自动摘要等方面有着重要的作用。还可以让人们更直观便捷的浏览文本信息。在现实的常用文本中是不包含关键词的&#xff0c;所以自动…

记一次 watchbog 挖矿病毒的清理

突然发现服务器上的mysql数据库连接不上遂使用xshell连接服务器查看进程发现被一个叫watchbog的进程沾满了cpu 通过查阅资料发现该病毒通过定时器 不断下载挖矿程序脚本 先清除 crontab中不属于自己的内容 kill掉所有的watchbog进程 bog 不是dog 查找到服务器上所有的…

手工清除Windows服务器上的Steam挖矿病毒:HackTool/CoinMiner.a及Trojan/Miner.ac

手工清除Windows服务器上的Steam挖矿病毒:HackTool/CoinMiner.a及Trojan/Miner.ac 起因&#xff1a; 最近服务器群里的两台Windows虚拟服务器上的CPU占用率超级高&#xff08;已经达到了91%&#xff09;&#xff0c;严重影响公司程序的正常运行&#xff0c;但是又不能安装杀毒软…

2019上半年恶意挖矿趋势报告

上一期&#xff0c;深信服安全团队对勒索病毒进行2019半年度总结&#xff0c;主要盘点了高发勒索家族、受灾区域分布、勒索病毒发展走向等。本期深信服安全团队对另一流行病毒类型——挖矿木马进行深入分析&#xff0c;给大家揭秘2019上半年挖矿木马的所作所为。 一、2019上半…

服务器被加了挖矿代码

2019独角兽企业重金招聘Python工程师标准>>> 平时很少使用的一台服务器&#xff0c;24G内存&#xff0c;在上面搭建了Hadoop环境。 突然发现负载好高&#xff0c;top看了一下&#xff0c;一个java进程占用了很多cpu 疑似国内来源的“8220挖矿团伙”追踪溯源分析 挖矿…

威胁快报|Nexus Repository Manager 3新漏洞已被用于挖矿木马传播,建议用户尽快修复...

2019独角兽企业重金招聘Python工程师标准>>> 背景 近日&#xff0c;阿里云安全监测到watchbog挖矿木马使用新曝光的Nexus Repository Manager 3远程代码执行漏洞(CVE-2019-7238)进行攻击并挖矿的事件。 值得注意的是&#xff0c;这一攻击开始的时间&#xff08;2月2…

威胁快报|ProtonMiner挖矿蠕虫扩大攻击面,加速传播

2019独角兽企业重金招聘Python工程师标准>>> 背景 近日&#xff0c;阿里云安全监测到一种挖矿蠕虫&#xff0c;正在互联网上加速传播。阿里云安全根据它使用ProtonMail邮箱地址作为矿池用户名的行为&#xff0c;将其命名为ProtonMiner。据分析&#xff0c;这种蠕虫与…

记一次mykings暗云挖矿木马的排查与解决

微信公众号&#xff1a;运维开发故事&#xff0c;作者&#xff1a;wanger 起因 之前有一台做测试的Windows server2012阿里云服务器的防火墙关掉之后开机总是启动&#xff0c;想了很多办法也没找到原因就提了工单问了售后&#xff0c;结果售后也没发现问题&#xff0c;并提示我…

应急响应流程以及入侵排查

归纳转载于&#xff1a; 应急响应的整体思路和基本流程 - FreeBuf网络安全行业门户不管是普通的企业&#xff0c;还是专业的安全厂商&#xff0c;都不可避免的需要掌握和运用好信息安全的知识、技能&#xff0c;以便在需要的时候&#xff0c;能够御敌千里。https://www.freebu…

阿里云服务器被挖矿程序minerd入侵的终极解决办法

突然发现阿里云服务器CPU很高&#xff0c;几乎达到100%&#xff0c;执行 top c 一看&#xff0c;吓一跳&#xff0c;结果如下&#xff1a; 3798 root 20 0 386m 7852 1272 S 300.0 0.1 4355:11 /tmp/AnXqV -B -a cryptonight -o stratumtcp://xmr.crypto-pool.fr:44…

如何更有效的消灭watchdogs挖矿病毒?华为云DCS Redis为您支招

2019独角兽企业重金招聘Python工程师标准>>> 漏洞概述 近日&#xff0c;互联网出现watchdogs挖矿病毒&#xff0c;攻击者可以利用Redis未授权访问漏洞入侵服务器&#xff0c;通过内外网扫描感染更多机器。被感染的主机出现 crontab 任务异常、系统文件被删除、CPU 异…

2t3ik与ddgs挖矿病毒处理

为什么80%的码农都做不了架构师&#xff1f;>>> http://ju.outofmemory.cn/entry/351669 转载于:https://my.oschina.net/lgfei/blog/1809898

Linux 服务器上有挖矿病毒 kdevtmpfsi 如何处理?

本文转载自&#xff1a;https://my.oschina.net/u/4437985/blog/3168526 侵删 症状表现 服务器CPU资源使用一直处于100%的状态&#xff0c;通过 top 命令查看&#xff0c;发现可疑进程 kdevtmpfsi。通过 google搜索&#xff0c;发现这是挖矿病毒。 排查方法 首先&#xf…

[问题已处理]-阿里云与本地机房中挖矿病毒处理,又又又中毒了

导语&#xff1a;被挖矿的现象是cpu异常的高。正常服务被系统杀掉。 先是发现线上业务挂了。紧接着发现本地机房也挂了。判断病毒应该是由本地机房的跳板机或者开放的端口&#xff0c;或dubbo框架漏洞进来的 基本判断是confluence最新的漏洞导致的 http://www.hackdig.com/0…

IDEA连接阿里云ECS运行的docker,及处理挖矿病毒kdevtmpfsi的经历

文章目录 前置条件docker版本&#xff1a;1.13.1相关参考文章 1.修改docker相关配置1.1 修改docker配置文件1.2 重新加载配置文件1.3 重启docker 2.配置阿里云ECS开放端口23753.配置IDEA的原生插件连接Docker4.配置IDEA的AlibabaCloudToolkit插件连接Docker5.因为开放了远程连接…

【安全攻防系列】教你如何 ssh暴力破解、捕捉短连接、清理挖矿病毒、盖茨木马和DDOS病毒

文章目录 ssh暴力破解0x00 前言0x01 应急场景0x02 日志分析系统账号情况/var/log/secure/var/log/auth.log0x03 处理措施0x04 我的实战记录捕捉短连接0x00 前言0x01 应急场景0x02 分析0x03 小结挖矿病毒0x00 前言0x01 应急场景0x02 事件分析A、排查过程B、溯源分析C、清除病毒D…

某云服务器挖矿病毒查杀日记

接手的某项目部署于某云平台centos服务器上&#xff0c;由tomcat作为中间件提供应用&#xff0c;且购买了该平台的域名服务&#xff0c;从2019年底上线运营&#xff0c;一直运行比较平稳&#xff0c;可能还没正式用起来&#xff0c;用的人也不是很多吧。但凡事总有个但是&#…

记一次感染挖矿病毒的经历

2019独角兽企业重金招聘Python工程师标准>>> 下午五点十分、手机开始狂收阿里云ECS实例告警&#xff0c;所有告警都提示机器CPU满载。 迅速登录阿里云查看监控大盘&#xff0c;发现全部38台机器CPU飙升满载。第三方客户也开始在群聊里反馈接口响应慢&#xff0c;失败…

记录一次云服务器被劫持下载了挖矿病毒的处理过程

etc被篡改导致系统中病毒 起因: 一年前买的阿里云服务器 , 买了没多久 , 因为没做什么安全措施 , 然后就莫名奇妙服务器被劫持 , 在上面下载了挖矿的一些脚本 ,当时做的处理方式 简单粗暴 直接重置了我的阿里云服务器 , 并且改了密码 , 同时在阿里云的服务器控制台 -> 安全…

中了挖矿病毒

最近一台服务器运行超级慢&#xff0c;任务管理器查看CPU占用100% &#xff0c;使用autoruns.exe工具查看到异常任务和进程。 打开文件路径还发现以下文件&#xff0c;config.json , c3a.bat , wina.exe config.json 代码如下&#xff1a; {"api": {"id"…