-
2022-04-15 16:00:40
1.什么是关键词抽取
将文本中具有代表性的词或者短语抽取出来,用来表示文章的关键内容。
2.方法
2.1无监督学习-统计类
【1】论文:YAKE! Collection-Independent Automatic Keyword Extractor
【2】代码地址:https://github.com/LIAAD/yake
yake是2018年的paper,是目前无监督关键词提取中效果比较好的(英文数据集上),还拿了ECIR’18 Best Short Paper由于版权原因,网上能够下载到的只有yake的五页短文,短文里并没有对yake的计算原理进行详细介绍,所以我采用从源码出发,结合论文进行理解。详细可以参考知乎大佬的Yet Another Keyword Extractor (Yake)代码解读,我也是通过这位大佬的知乎认识了yake这个算法,感谢这位大佬!
yake的源码并不能直接作用于中文的关键词提取,我自己实验的时候对源码部分进行修改,使yake算法可以适用于中文,大家实验的时候可以参考Yet Another Keyword Extractor (Yake)代码解读进行修改。
更多相关内容 -
Pytorch框架下应用Bi-LSTM实现汽车评论文本关键词抽取
2021-01-21 16:35:03需要调用的模块及整体Bi-lstm流程 import torch import pandas as pd import numpy as np from tensorflow import keras import torch.nn as nn import torch.nn.functional as F import torch.optim as optim ... -
cpp-THUCKE中文关键词抽取工具包
2019-08-16 05:44:10THUCKE(THU Chinese Keyphrase Extraction)由清华大学自然语言处理与社会人文计算实验室研制推出的中文关键词抽取工具包。 -
Python-利用Python实现中文文本关键词抽取分别采用TFIDFTextRankWord2Vec词聚类三种方法
2019-08-10 06:35:56利用Python实现中文文本关键词抽取,分别采用TF-IDF、TextRank、Word2Vec词聚类三种方法。 -
关键词抽取策略研究
2020-06-20 22:57:06针对传统关键词抽取方法统计特征单一,常用位置特征对文本写作结构有局限性的问题,提出了一种新的关键词抽取方法。该方法根据关键词在文中出现位置的分布特性,计算并提取出新的间距特征,更加适用于当下网络文本随意... -
中文网页关键词抽取
2014-11-25 08:51:41介绍一种基于TF-IDF的新闻网页关键词自动抽取方法。 -
关键词抽取方法
2021-01-28 20:47:13关键词抽取就是通过一定的方法抽取出能表达文章的中心主题的一系列方法。 2、关键词抽取方法分类 2.1、有监督无监督抽取方法 无监督关键词提取方法主要有三类:基于统计特征的关键词提取(TF,TF-IDF);基于词图...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 jieba def 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_list def 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_model if __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优缺点)
-
关键词抽取
2017-09-07 11:51:45我博士阶段的研究课题就是关键词抽取,欢迎下载阅读我的论文“基于文档主题结构的关键词抽取方法研究”。以我做关键词抽取的经验,建议如下: 1. TFIDF是很强的baseline,具有较强的普适性,如果没有太多经验的话,...1. 刘知远:
作者:刘知远
链接:https://www.zhihu.com/question/21104071/answer/24556905
我博士阶段的研究课题就是关键词抽取,欢迎下载阅读我的论文“基于文档主题结构的关键词抽取方法研究”。以我做关键词抽取的经验,建议如下:
1. TFIDF是很强的baseline,具有较强的普适性,如果没有太多经验的话,可以实现该算法基本能应付大部分关键词抽取的场景了。
2. 对于中文而言,中文分词和词性标注的性能对关键词抽取的效果至关重要。
3. 较复杂的算法各自有些问题,如Topic Model,它的主要问题是抽取的关键词一般过于宽泛,不能较好反映文章主题。这在我的博士论文中有专门实验和论述;TextRank实际应用效果并不比TFIDF有明显优势,而且由于涉及网络构建和随机游走的迭代算法,效率极低。这些复杂算法集中想要解决的问题,是如何利用更丰富的文档外部和内部信息进行抽取。如果有兴趣尝试更复杂的算法,我认为我们提出的基于SMT(统计机器翻译)的模型,可以较好地兼顾效率和效果。
4. 以上都是无监督算法,即没有事先标注好的数据集合。而如果我们有事先标注好的数据集合的话,就可以将关键词抽取问题转换为 有监督的分类问题。这在我博士论文中的相关工作介绍中均有提到。从性能上来讲,利用有监督模型的效果普遍要优于无监督模型,对关键词抽取来讲亦是如此。在Web 2.0时代的社会标签推荐问题,就是典型的有监督的关键词推荐问题,也是典型的多分类、多标签的分类问题,有很多高效算法可以使用
2.rake关键词提取
3.能够识别一个query里面哪些是关键term,哪些是比较弱的term。
假如来了一个query,那么我们要判断里面的哪个词是关键词,我们会给每一个term都打一个分(term weight),分高的就是关键词,分低的就是垃圾词。那么这个分怎么来打比较合理呢?下面讲两个算法,都是基于海量数据统计的(query数目大约60亿);
第一个:上下文无关的weight算法
一个term单独出现的频次越高,而且和其他term搭配出现的机会越少,那么我们可以肯定,这个term表达意图的能力越强,越重要。
所以有公式:
一看就知道是一个迭代的公式。初始化的时候,每一个query的所有term权重之和等于1,所以每一个term的权重就是1/m;m是当前query的term数目。
4.
曾经在微博上试过TF-IDF,LDA 和TextRank,感觉LDA在短文本上完全不靠谱,在文档级应用上应该可以(没试过,这方面的论文应该很多)
5.
facebookresearch/fastText 这个也不错,用起来挺好,也是基于 topic 来打标签
思路:term 词向量求和取平均 -> logistic regression,只不过由于标签过多,所以用层次 softmax 或者 negative sampling 来优化性能。
6.当前关键词提取算法主要可以分成两个流派:
1. Statistical
2. Rule Based
本文提供的是一种比较大的分类方法,也有很多reivew的文章分成3类、4类、5类种种,都不重要,关键把思路理清就好。
1) Statistical
统计流派,其思路是,先定义一个关键词指标,然后为文章中所有词汇计算关键词指标,把词汇按照指标从大到小排列,指标大的优先选为关键词。这种思路很简单,有点儿像班里选班长,老师说选学习成绩最好的同学当班长,那么选拔方法就是,先定义一个指标,比如考试总分,然后,给每个学生的语文、数学、物理成绩加总,排名,总分排第一的当班长(关键词)。当然,老师可以指定班里有任意多个班长,例如选K个班长,那么就是成绩排名前K个学生当班长。统计流派的关键在于,计算每个词汇的关键词指标,这个指标是根据词汇在文章中的表现统计并计算出来的,所以有Statistical其名。
在对关键词进行提取时,可以有多种指标,影响力最大的两个是:TF-IDF指标和 PageRank指标。TF-IDF基于词袋模型(Bag-of-Words),把文章表示成词汇的集合,由于集合中词汇元素之间的顺序位置与集合内容无关,所以TF-IDF指标不能有效反映文章内部的词汇组织结构。PageRank指标,基于网络模型(Graph Model),把文章表示成网络的结构,网络中的节点表示词汇,节点之间的边为词汇之间的位置邻接关系,网络结构比集合结构包含信息多,考虑了文章内词汇的顺序,所以PageRank指标一般比TF-IDF指标表现更好。
2) Rule Based
规则流派,其思路是,将关键词提取任务,定义为一个对词汇进行二元分类的任务。即给定一个词汇,要么是关键词,要么不是关键词,对其分类,是关键词为1,不是就是0。那么,关键词提取问题就变成了一个预测问题。预测问题,需要一个预测函数,这个函数就是规则,给定词汇,获得该词汇的特征(
),然后预测该词汇是否为关键词 。规则可以人工指定,也可以通过机器学习(Machine Learning)的方法获得。人工指定规则,一般比较难,费脑子,谁也不清楚究竟到底啥样儿的词是关键词....所以大家就想着让程序自己去获得规则,即通过机器学习。机器学习的方法相对省脑子,但是费体力,要一堆闲的蛋疼的人到网上找一堆文章手工标关键词,然后把标记过的样本扔到模型里去把规则给学习出来。机器学习过程中,需要指定一些词汇特征,用于训练。这些特征,一般也不知道,所以也需要人工指定,比如,考虑词频、词汇包含的字数、词性、词汇的位置等等。所以,前十年,做机器学习进行关键词提取的论文,特别好搞,你选几个指标,发一篇,他选几个指标,又发一篇,也不太费脑子,就是各种拍脑袋想指标,然后把想出的指标各种排列组合丢到模型里去跑,找个相对好的结果就行。这几年,深度学习比较火,有人说了,我想规则费脑子,想指标也费脑子,我就是懒,我直接搞个神经网络让他连词汇特征都一起给学习了。所以,现在深度学习成为关键词提取新的发展方向,但是深度学习的方法只能通过复杂网络的训练帮你抽象出词汇特征,但是还得依赖于人工标注,依然需要闲的蛋疼的人去标记文章。当然了,深度学习的一大好处在于,有一些模型支持对没标记的数据进行学习,可以优化词汇特征的表示。例如,自动编码器,深度玻尔兹曼机...什么的...
总结:
基于此,我想说的是,虽然关键词提取的算法很多,也很花哨,但是思路比较简单,应当在写Paper之前,或者开发技术应用之前,做好技术定位。另外,几乎没有论文回答最基础的一个问题,什么是关键词?为什么某些词应当被提取出来给阅读者看而另外一些词应当忽略?哪些词应当展示给用户看?太多研究关注算法的精度和效率,而忽视了关键词的本质内涵。关键词不是一个客观存在的东西,而本身也是人为标注的,因此模型的评估和优化,本身也是一个主观的东西。这种主观的东西,不应当以算法开发者的意志所左右,而是应当关注用户的需求,想用户之所想,把用户真正关心的那些关键词展示出来。因此,虽然关键词提取算法当前停滞不前,但是从用户的角度重新去考虑关键词的定义,把用户的特征与词汇的特征相结合,进行指标的构建(Statistical)或者规则模型的学习(Rule Based),或许是可以为关键词提取算法的未来研究提供新的发展契机。
http://blog.csdn.net/shijiebei2009/article/details/39696571
另外的一种方法,可以利用词性过滤,只保留指定词性的单词即可,类似的python有jieba分词,java有hanlp,ansj-seg,这些在分词的时候都有词性的标注,都可以很方便的处理
8.
先看你是单文档还是多文档。
如果是单文档,用textrank,另外你需要注意停用词处理。或者把单文档中按段或句分割成多文档
如果是多文档,那就更简单了,tf-idf是最简单的,也可用lda, 词嵌入svd,w2v,获取文档语义,然后找出与文档语义相关度最大的几个词就可
-
基于文档主题结构的关键词抽取
2017-01-20 11:05:06基于文档内部信息,利用文档的词聚类算法构建文档主题,进行关键词抽取。基于文档外部信息,利用隐含主题模型构建文档主题,进行关键词抽取。综合利用隐含主题模型和文档结构信息,进行关键词抽取。基于文档与关键词... -
关键词抽取、社会标签推荐 及其在社会计算中的应用-刘知远
2018-10-25 17:21:46清华大学刘知远老师的PPT:关键词抽取、社会标签推荐及其在社会计算中的应用 -
Python 结巴分词实现关键词抽取分析
2020-12-25 11:07:05关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。... -
中文短文本关键词抽取方案
2021-11-29 20:14:48本文提出一种中文短文本关键词抽取方案,适用于无监督语料场景。 无监督关键词抽取算法虽然无需标注语料,但是效果一般。有监督学习方法效果好但是需要标注数据,很多业务场景下并没有标注好的数据。能否...1. 前言
本文提出一种中文短文本关键词抽取方案,适用于无监督语料场景。
无监督关键词抽取算法虽然无需标注语料,但是效果一般。有监督学习方法效果好但是需要标注数据,很多业务场景下并没有标注好的数据。能否结合无监督学习方法和有监督学习方法的长处,用无监督方法标注语料,然后用于训练有监督方法?为此我们用实验证明了该方案是可行的,文末给出代码地址。2. 数据
我们选用联通问答数据集中的问题数据,从问题中提取联通业务关键词。下载地址
3. 方案
首先使用SIFRank方法标注语料,然后训练NegSamplingNER命名实体识别模型。
3.1 SIFRank
无监督关键词抽取算法选用SIFRank。原方法使用ELMO语言模型得到词向量和句向量,我们将其替换为RoBerta模型。原方法使用清华的分词工具thulac,我们对比了jieba、thulac、百度lac和哈工大LTP四种工具,发现LTP效果最好,于是我们选用LTP作为分词和词性标注工具。
SIFRank将名词和形容词+名词的组合视为候选关键词,使用语言模型得到每个词的向量,关键词中各个词向量加权得到关键词向量,同理句子中各个词向量加权得到句向量。关键词向量和句向量的cos值作为关键词得分。
SIFRank提取关键词的重要一点是词权重,可以使用他提供的词权重文件,也可以自行计算词权重。收集大规模问题语料,计算词频,再计算领域语料中的词频,可按照TFIDF方法计算词权重,也可以直接将词频倒数加上平滑项作为权重。
SIFRank流程如下图。
(1)分词+标词性。
(2)获取候选关键词列表:利用正则表达式确定名词短语(例如:形容词+名词),将名词短语作为候选关键短语。
(3)通过预训练语言模型,得到关键词的embedding。
(4)同样地,得到句子或文档的embedding。
(5)计算(3)与(4)结果的余弦相似度,选取topN作为其最终提取的关键词。
3.2 NegSamplingNER
用SIFRank去标注数据,为了让标注的词尽可能是正确的,每个句子我们只选取一个SIFRank输出的关键词。这样保证了标注的精确率,但是会导致很多漏标数据,这些漏标数据可视为噪声,用这样的数据去训练常规的命名实体识别模型显然是不可行的。
为此我们选择适用于远程监督数据的NER模型NegSamplingNER,该论文来自ICLR 2021。远程监督生成的NER数据集有个特点,标注的实体基本正确,但是存在大量漏标实体,这和我们用SIFRank生成的数据非常类似。NegSamplingNER采用BERT+span classifier结构,负样本通过随机采样片段得到,因此有很大概率噪声不会被采样,这也就避免了噪声影响。
NegSamplingNER结构如下图。编码器的输入输出和常规方法相同。采样过程就是随机挑选一个起始位置和一个结束位置,作为一个负样本,将起始位置和结束位置的向量拼接得到负样本表征。正样本的表征也是将起始位置和结束位置的向量拼接得到。将正负样本向量表征输入MLP分类,得到每个样本的类型,负样本的类型为‘O’。
4. 代码
本文开源代码:https://github.com/wjx-git/KeyWordsExtraction,需要自行下载预训练语言模型RoBerta。
-
jieba分词关键词抽取
2019-10-08 11:45:47关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。... -
全网最全的文本关键词抽取包括有监督和无监督方法
2021-06-12 21:26:56虽然一般情况下有监督的关键词抽取是要好于无监督的,但也看情况,这里分析原因主要有以下三点:1.TF-IDF和LDA的候选词个数对于前两个指标没有任何影响,因为前两个指标只考虑前三个预测关键词,所以将候选词个数调... -
中文文本关键词抽取的三种方法-python
2020-07-22 22:52:23目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的关键词抽取、基于Word2Vec词聚类的关键词抽取,以及多种算法相融合的关键词抽取。笔者在使用前三种算法进行关键词抽取的学习过程... -
使用 Node.js 对文本内容分词和关键词抽取
2020-10-19 19:04:13主要介绍了使用 Node.js 对文本内容分词和关键词抽取,需要的朋友可以参考下 -
论文研究-基于主题特征的关键词抽取.pdf
2019-07-22 20:40:53为了使抽取出的关键词更能...并将该特征与关键词抽取中的常用特征结合, 用装袋决策树方法构造一个关键词抽取模型。实验结果表明提出的主题特征可以提升关键词抽取的效果, 同时验证了装袋决策树在关键词抽取中的适用性。 -
关键词抽取算法TopicRank
2022-02-13 18:38:181、文本预处理,分词,POS ...w(i,j)为权重,其中 dist(ci, cj ) 是文档中候选关键词 ci 和 cj 的偏移位置的倒数,其中 pos(ci) 表示候选关键词 ci 的所有偏移位置,节点之间全部有连接,无向图。 ... -
python 关键词抽取工具
2020-11-05 15:49:58依任务需要,对多种关键词抽取工具进行比较,测试、调研。特此记录相关调用方法及最终评测结果。 1、jieba Github地址:https://github.com/fxsjy/jieba/ 安装:pip install jieba -i ... -
【NLP】python中英文关键词抽取技术总结
2021-09-29 13:56:10【NLP】python中英文关键词抽取技术总结 无论是在中文还是英文中关键词抽取技术都是有着很重要的应用价值和分析价值,下面在python环境中分别针对中文和英文介绍几种常用的关键词抽取方法。 1. 英文 抽取英文关键词... -
关键词抽取模型
2019-03-04 17:10:21关键词抽取模型常见的算法有TF-IDF、TextRank等,本文仅在这里对这两种方法作原理的简单介绍。 1 TF-IDF算法 TF-IDF(term frequency-inverse document frequency) :一种用于资讯检索于资讯探勘的常用加权技术。是... -
\"Tag-TextRank:一种基于Tag的网页关键词抽取方法\"分享总结
2019-04-20 01:09:47NULL 博文链接:https://snv.iteye.com/blog/1886969 -
关键词抽取算法 TF-IDF
2020-01-05 14:10:09但实际上,如果一个词语在一个类的文档中频繁出现,则说明这个词语能够很好代表这个类的文本的特征,例如“TF-IDF”频繁出现在“关键词抽取算法”中,却因为 IDF 过低而导致未能被抽取为关键词,这就是 IDF 的不足之... -
Python 结巴分词实现关键词抽取分析_竞价分词
2020-11-22 21:50:32Python 结结巴巴分分词词实实现现关关键键词词抽抽取取分分析析 这篇文章主要介绍了Python 结巴分词实现关键词抽取分析小编觉得挺不错的现在分享给大家也给大家做个 参考一起 随小编过来看看吧 1 简介介 关键词抽取... -
基于 TextRank 算法的关键词抽取
2021-10-28 18:59:192021SC@SDUSC -
基于语义扩展模型的中文网页关键词抽取 (2012年)
2021-06-14 07:47:08提出一种基于语义扩展模型、分步骤的无监督关键词抽取方法。选择词语的网页结构特征、词性、词长、TF-IDF 值等特征,通过聚类算法抽取候选关键词。根据n-gram 语言模型理论,引入邻接变化数等特征构建基于词的语义... -
用java实现的关键词抽取算法
2011-07-01 13:12:12基于种子的一种关键词抽取算法,并用java实现 -
关键词抽取工具-THUtag 个人使用心得
2017-09-15 10:11:22THUTag是清华大学自然语言处理与社会人文计算实验室实现的,具有关键词抽取与社会标签推荐工具包,提供关键词抽取、社会标签推荐功能,包括TextRank、ExpandRank、Topical PageRank(TPR)、Tag-LDA、Word Trigger ...