关键词提取 (Keyphrase Extraction,KPE) 任务可以自动提取文档中能够概括核心内容的短语,有利于下游信息检索和 NLP 任务。当前,由于对文档进行标注需要耗费大量资源且缺乏大规模的关键词提取数据集,无监督的关键词提取在实际应用中更为广泛。无监督关键词抽取的state of the artSOTA)方法是对候选词和文档标识之间的相似度进行排序来选择关键词。但由于候选词和文档序列长度之间的差异导致了关键短语候选和文档的表征不匹配,导致以往的方法在长文档上的性能不佳,无法充分利用预训练模型的上下文信息对短语构建表征。下面主要介绍一些主流的KPE算法。

目录

数据集

一、基于词袋加权的TFIDF算法

1.1 代码实现

1.2 优缺点

二、考虑词关联网络的TextRank算法

2.1  代码实现

2.2  优缺点

三、结合主题的LDA算法

3.1 代码实现

3.2 优缺点

四、结合语义编码的KeyBert算法

4.1 代码实现

4.2 优缺点

五、Yake

5.1 算法思想

5.2 代码实现

六、Rake

6.1 算法思想

6.2 代码实现

七、Summa

八、Autophrasex

8.1 算法思想

8.2 代码实现

九、 MDERank

9.1 算法思想

9.2  实验结果

十、小结

十一、关键词提取的评价指标

十二、下一步计划


数据集

数据集来自知网和维普网,知网、维普网等数据集的关键词提取可以作为知识发现的一种途径,由于当前关键词提取的各类算法各有优劣,基于统计学的算法依赖切分词效果且缺失上下文语义信息,基于预训练模型的算法偏向于获取长度较长的短语,且在英文数据集效果好于中文数据集,可以尝试结合各类算法结果互补,在缺乏专家知识情况下得到较优的新词发现结果,然后获得细粒度的切分词效果,然后基于词信息熵约束构建整个概念权重网络。

一、基于词袋加权的TFIDF算法

TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降,也就是说一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。

如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。

其中:

1.1 代码实现

import jieba.posseg
import jieba.analyse as analyse
text = '''注重数据整合,……风险防控平台。'''
jieba.analyse.extract_tags(text, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v','nr', 'nt'))
[('人工智能', 1.3136147771513889),('学习', 0.40118887617430554),('教育', 0.3154662543388889),('领域', 0.30068308568944446),('智能', 0.29833992884875),('应用', 0.23755056059833335),('数据挖掘', 0.18343792321388888),('报告', 0.1447372240438889),('美国白宫', 0.14254293739166665),('测评', 0.1342579326025),('战略规划', 0.13309985470055555),('关键技术', 0.12556757288347223),('迫切需要', 0.12473189897430556),('导师', 0.12365924136402778),('题为', 0.11886588055569443),('方面', 0.11841974111416666),('助手', 0.11316812518263888),('伙伴', 0.10634042710152777),('引领', 0.10570780668152778),('情感', 0.10347510041430556)]

1.2 优缺点

TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。

此外,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,IDF的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整。

二、考虑词关联网络的TextRank算法

上面说到,TF-IDF基于词袋模型(Bag-of-Words),把文章表示成词汇的集合,由于集合中词汇元素之间的顺序位置与集合内容无关,所以TF-IDF指标不能有效反映文章内部的词汇组织结构。

TextRank由Mihalcea与Tarau提出,通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词。

TextRank是一种基于随机游走的关键词提取算法,考虑到不同词对可能有不同的共现(co-occurrence),TextRank将共现作为无向图边的权值。

其中,TextRank的迭代计算公式如下:

其实现包括以下步骤:
(1)把给定的文本T按照完整句子进行分割;
(2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中 ti,j 是保留后的候选关键词;
(3)构建候选关键词图G = (V,E),其中V为节点集,由2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词;
(4)根据上面公式,迭代传播各节点的权重,直至收敛;
(5)对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词;
(6)由5得到最重要的T个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词;

2.1  代码实现

text = '''注重数据整合,……风险防控平台。'''
jieba.analyse.textrank(text, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v','nr', 'nt'))
[('人工智能', 1.0),('学习', 0.6800568212134035),('智能', 0.4389534533321184),('教育', 0.43548509800254215),('领域', 0.40052664326981924),('应用', 0.2700569709749324),('报告', 0.2670045024866088),('方面', 0.23187049758189643),('美国白宫', 0.212792514544243),('表示', 0.19660053148836146),('技术', 0.19208881567499897),('机器', 0.1866120173833769),('伙伴', 0.18077573362593893),('科技', 0.17403990709678335),('政策', 0.17351519161476764),('办公室', 0.1729439493752458),('知识', 0.16756939766301235),('体现', 0.1648925203267789),('计算', 0.16287121059070878),('关键技术', 0.1626651496174857)]

2.2  优缺点

TextRank与TFIDF均严重依赖于分词结果—如果某词在分词时被切分成了两个词,那么在做关键词提取时无法将两个词黏合在一起

不过,TextRank虽然考虑到了词之间的关系,但是仍然倾向于将频繁词作为关键词。

三、结合主题的LDA算法

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。

所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

因此计算词的分布和文档的分布的相似度,取相似度最高的几个词作为关键词。

3.1 代码实现

下面调用百度预训练主题模型famila为例,预先训练2000个主题,得到给定文档的关键词集合。

pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
import paddlehub as hub
lda_news = hub.Module(name="lda_news")
lda_news.cal_doc_keywords_similarity(text)
[{'word': '领域', 'similarity': 0.06851161624447644},{'word': '学习', 'similarity': 0.06485399440791326},{'word': '教育', 'similarity': 0.0495215784697363},{'word': '人工智能', 'similarity': 0.04286504274500501},{'word': '报告', 'similarity': 0.030329787603339084},{'word': '智能', 'similarity': 0.027729840172003375},{'word': '发展', 'similarity': 0.02362142605550909},{'word': '技术', 'similarity': 0.014803972123798883},{'word': '数据', 'similarity': 0.01465273360067766},{'word': '方法', 'similarity': 0.012348153295121723}]

3.2 优缺点

LDA通过主题建模,在一定程度上考虑了文档与关键词在主题上的一致性,但这需要找到合适的主题数目作为超参数,具体的效果受其影响较大。

四、结合语义编码的KeyBert算法

KeyBERT(Sharma, P., & Li, Y. (2019). Self-Supervised Contextual Keyword and Keyphrase Retrieval with Self-Labelling),提出了一个利用bert快速提取关键词的方法。

原理十分简单:首先使用 BERT 提取文档嵌入以获得文档级向量表示。随后,为N-gram 词/短语提取词向量,然后,我们使用余弦相似度来找到与文档最相似的单词/短语。最后可以将最相似的词识别为最能描述整个文档的词。

其中,有几个参数:

keyphrase_ngram_range: 默认(1, 1),表示单个词, 如"抗美援朝", "纪念日"是孤立的两个词;(2, 2)表示考虑词组, 如出现有意义的词组 "抗美援朝 纪念日;(1, 2)表示同时考虑以上两者情况;
top_n:显示前n个关键词,默认5;
use_maxsum: 默认False;是否使用Max Sum Similarity作为关键词提取标准;
use_mmr: 默认False;是否使用Maximal Marginal Relevance (MMR) 作为关键词提取标准;
diversity: 如果use_mmr=True,可以设置该参数。参数取值范围从0到1;

4.1 代码实现

pip install keybert
pip install zh_core_web_sm-2.3.1.tar.gz
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ spacy==2.3.1
import os
from keybert import KeyBERTkw_model = KeyBERT(model='paraphrase-MiniLM-L6-v2')print("naive ...")
keywords = kw_model.extract_keywords(text)
print(keywords)print("\nkeyphrase_ngram_range ...")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(1, 2), stop_words=None)
print(keywords)print("\nhighlight ...")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(1, 2), highlight=None)
print(keywords)# 为了使结果多样化,我们将 2 x top_n 与文档最相似的词/短语。
# 然后,我们从 2 x top_n 单词中取出所有 top_n 组合,并通过余弦相似度提取彼此最不相似的组合。
print("\nuse_maxsum ...")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(1, 3), stop_words=None,use_maxsum=True, nr_candidates=20, top_n=5)
print(keywords)# 为了使结果多样化,我们可以使用最大边界相关算法(MMR)
# 来创建同样基于余弦相似度的关键字/关键短语。 具有高度多样性的结果:
print("\nhight diversity ...")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(3, 3), stop_words=None,use_mmr=True, diversity=0.7)
print(keywords)# 低多样性的结果
print("\nlow diversity ...")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(3, 3), stop_words=None,use_mmr=True, diversity=0.2)
print(keywords)
naive ...
[('推动实施智能教育的措施不能仅从高等学校人才培养和人工智能发展的必要性角度思考', 0.8883), ('人工智能及其分支技术对美国新闻业的渗透及影响日益深入', 0.8877), ('就人工智能热潮下中国经济增长和就业的演进趋势进行展望', 0.8823), ('探讨了人工智能技术在美国新闻业应用的现实状况', 0.8779), ('并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而', 0.8767)]keyphrase_ngram_range ...
[('在迈向人工智能时代的关键时期 联合国教科文组织2019年5月在中国北京举办了首届国际人工智能与教育大会', 0.9135), ('人工智能及其分支技术对美国新闻业的渗透及影响日益深入 本文探讨了人工智能技术在美国新闻业的研发应用格局', 0.9134), ('并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而 为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合', 0.9052), ('就人工智能热潮下中国经济增长和就业的演进趋势进行展望 并给出应对思路和建议', 0.9013), ('教育过程和因材施教实践所带来的深刻变革 纵观国内外人工智能人才战略规划', 0.8988)]highlight ...
[('在迈向人工智能时代的关键时期 联合国教科文组织2019年5月在中国北京举办了首届国际人工智能与教育大会', 0.9135), ('人工智能及其分支技术对美国新闻业的渗透及影响日益深入 本文探讨了人工智能技术在美国新闻业的研发应用格局', 0.9134), ('并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而 为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合', 0.9052), ('就人工智能热潮下中国经济增长和就业的演进趋势进行展望 并给出应对思路和建议', 0.9012), ('教育过程和因材施教实践所带来的深刻变革 纵观国内外人工智能人才战略规划', 0.8988)]use_maxsum ...
[('人工智能的生成成果是人工智能程序在人类参与度极低的情况下基于数据和算法通过自主学习和建模所自动生成的内容 并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而 为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合', 0.9074), ('应用与研发 美国白宫科技政策办公室于2016年10月发布了题为 为人工智能的未来做好准备', 0.9086), ('并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而 为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合 可将人工智能生成成果作为广义上的邻接权之客体', 0.9119), ('近年来 许多国家将人工智能技术发展列为国家战略规划 人工智能技术的快速发展将会给图书馆带来巨大的影响', 0.9119), ('在迈向人工智能时代的关键时期 联合国教科文组织2019年5月在中国北京举办了首届国际人工智能与教育大会 并形成成果文件', 0.9133)]hight diversity ...
[('最后对人工智能在电力系统及综合能源系统中应用所面临的挑战进行了分析和展望 2016年10月 美国国家科学与技术委员会相继发布了两份关于人工智能领域的美国国家战略报告', 0.9437), ('educational artificial intelligence', 0.0517), ('development strategic plan', 0.1816), ('数字计算机 digital computer', 0.3279), ('preparing for the', 0.1783)]low diversity ...
[('最后对人工智能在电力系统及综合能源系统中应用所面临的挑战进行了分析和展望 2016年10月 美国国家科学与技术委员会相继发布了两份关于人工智能领域的美国国家战略报告', 0.9437), ('人工智能与教育相互赋能成为时代命题 在迈向人工智能时代的关键时期 联合国教科文组织2019年5月在中国北京举办了首届国际人工智能与教育大会', 0.9288), ('并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而 为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合 可将人工智能生成成果作为广义上的邻接权之客体', 0.9119), ('对我国的现代化建设将具有重大的现实意义和深远的战略意义 人工智能的生成成果是人工智能程序在人类参与度极低的情况下基于数据和算法通过自主学习和建模所自动生成的内容 并非人类以人工智能为工具进行的个性化表达如果认定其为作品会违背传统的著作权法理论然而', 0.9035), ('从为数不多的公开报道的人工智能专利诉讼案件中 我们已经感受到了人工智能领域知识产权战争的硝烟 2017年', 0.9143)]
import keybert
import jieba
from keybert import KeyBERT
model = KeyBERT('bert-base-chinese')
doc = " ".join(jieba.cut(text))
keywords = model.extract_keywords(doc, keyphrase_ngram_range=(1,1),  top_n=20)
keywords
[('联合国教科文组织', 0.7681),('国家科学技术委员会', 0.7416),('北京大学法学院', 0.7122),('中南财经政法大学', 0.6801),('人工智能', 0.6776),('计算机科学', 0.6726),('华东师范大学', 0.668),('就业机会', 0.6372),('信息技术', 0.6331),('课程体系', 0.6325),('计算机辅助', 0.63),('著作权法', 0.6291),('保障机制', 0.6259),('深入开展', 0.6253),('机器人学', 0.6216),('医护人员', 0.6204),('个人信息', 0.6202),('信息科学', 0.6162),('各行各业', 0.616),('基因工程', 0.611)]
import keybert
import jieba
from keybert import KeyBERT
model = KeyBERT('bert-base-chinese')
# doc = " ".join(jieba.cut(text))
keywords = model.extract_keywords(text, keyphrase_ngram_range=(1,1),  top_n=20)
keywords
[('推动实施智能教育的措施不能仅从高等学校人才培养和人工智能发展的必要性角度思考', 0.9416),('为人工智能的生成成果提供一定程度的著作权法保护具有必要性鉴于人工智能生成成果的保护价值与邻接权制度的价值相契合', 0.9397),('探讨了现阶段影响基于人工智能的数据分析技术在状态检修领域应用效果的关键问题', 0.9368),('我国现行刑法体系对于人工智能时代有关主体刑事责任的追究具有一定的局限性和滞后性', 0.9353),('对这些深层问题的思考和回答将是决定人工智能在教育上乃至在未来社会能够走多远的关键', 0.9346),('从教育的本质特征和人工智能的研究领域来分析人工智能与教育的关系', 0.9322),('人工智能作品的著作权归属以及人工智能背景下的垄断与不正当竞争等问题', 0.9303),('人工智能技术的快速发展将对国际关系领域产生深远的影响', 0.9282),('人工智能与信息推荐是近年来信息科学领域最受关注的两个前沿课题', 0.9261),('人工智能生成物应当作为人利用人工智能创作的作品并按照现行著作权法关于作品的构成要件判断其独创性', 0.9258),('另一方面知识产权保护是建设创新型国家所面临的最重要的问题之一', 0.9254),('2016年alphago的异军突起引起了全社会对人工智能的广泛关注', 0.9251),('必然会导致以激励人类知识创新为核心的著作权制度在理论上难以自洽', 0.9246),('理论界与实践界应更加密切关注人工智能的后续发展', 0.9236),('人工智能的生成成果是人工智能程序在人类参与度极低的情况下基于数据和算法通过自主学习和建模所自动生成的内容', 0.9233),('人工智能教育应用现状与发展趋势研究有助于推动技术与教育的深度融合发展', 0.9229),('而人工智能与多种技术形成的新型交叉技术已经广泛地应用于移动互联网', 0.9226),('文章将从激励论和市场竞争的角度对是否应授予人工智能创作物以版权保护的不同政策选择的利弊进行分析', 0.9226),('深度学习算法的突破使人工智能技术进入了新一轮的高速发展周期', 0.9219),('人工智能的发展已经使得文学艺术领域作品的创作不再为人类所垄断', 0.9212)]

4.2 优缺点

Keybert基于一种假设,关键词与文档在语义表示上是一致的,利用bert的编码能力,能够得到较好的结果。

但缺点很明显:

首先,不同的语义编码模型会产生不同的结果,这个比较重要。

此外,由于bert只能接受限定长度的文本,例如512个字,这个使得我们在处理长文本时,需要进一步加入摘要提取等预处理措施,这无疑会带来精度损失。

五、Yake

5.1 算法思想

它是一种轻量级、无监督的自动关键词提取方法,它依赖于从单个文档中提取的统计文本特征来识别文本中最相关的关键词。该方法不需要针对特定的文档集进行训练,也不依赖于字典、文本大小、领域或语言。Yake 定义了一组五个特征来捕捉关键词特征,这些特征被启发式地组合起来,为每个关键词分配一个分数。分数越低,关键字越重要。你可以阅读原始论文[2],以及yake 的Python 包[3]关于它的信息。

特征提取主要考虑五个因素(去除停用词后)

大写term

(Casing)
大写字母的term(除了每句话的开头单词)的重要程度比那些小写字母的term重要程度要大。

Tase=\frac{max(TF_u,TF_a)}{TF}

其中,TF_u表示该词的大写次数, TF_a表示该词的缩写次数。

词的位置

(Word Position)
文本越开头的部分句子的重要程度比后面的句子重要程度要大。

T_{position}=log_2(log_2(2+Median(Sen_t)))

其中Median(Sen_t)表示包含该词的所有句子在文档中的位置中位数。

词频

(Term Frequency)
一个词在文本中出现的频率越大,相对来说越重要,同时为了避免长文本词频越高的问题,会进行归一化操作。

TF_{norm}=\frac{TF_{(t)}}{MeanTF+1\ast \sigma }

其中,MeanTF是整个词的词频均值,  \sigma是标准差。

上下文关系

(Term Related to Context)
一个词与越多不相同的词共现,该词的重要程度越低。

DL|DR|=\frac{|A{t,w|}}{\sum _{k\in A_{t,w}}{CoOccur} \, \, {t,k}}

其中  表示窗口size为  从左边滑动, DR表示从右边滑动。|A_{t,w}| 表示出现在固定窗口大小为 w下,出现不同的词的个数。 MaxTF表示所有词频的最大值。

词在句子中出现的频率

(Term Different Sentence):一个词在越多句子中出现,相对更重要

T_{Sentence}=\frac{SF(t)}{Sentence_{all}}

其中 SF(t) 是包含词t tt的句子频率, 表示所有句子数量。
最后计算每个term的分值公式如下:

S(t)=\frac{T_{Rel}\ast T_{Position}}{T_{case}+\frac{TF_{norm}}{T_{Rel}}+\frac{T_{Sentence}}{T_{Rel}}}

S(t)表示的是单词 t 的分值情况,其中 s(t) 分值越小,表示的单词 t 越重要。

5.2 代码实现

pip install git+https://github.com/LIAAD/yake

首先从 Yake 实例中调用 KeywordExtractor 构造函数,它接受多个参数,其中重要的是:要检索的单词数top,此处设置为 10。参数 lan:此处使用默认值en。可以传递停用词列表给参数 stopwords。然后将文本传递给 extract_keywords 函数,该函数将返回一个元组列表 (keyword: score)。关键字的长度范围为 1 到 3。

import yake
title = '人工智能'
full_text = title +", "+ text
full_text = " ".join(jieba.cut(full_text))
kw_extractor = yake.KeywordExtractor(top=10, n=1,stopwords=None)
keywords = kw_extractor.extract_keywords(full_text)
for kw, v in keywords:print("Keyphrase: ",kw, ": score", v)
Keyphrase:  人工智能 : score 1.2726925778426499e-05
Keyphrase:  机器人 : score 0.0003960331506800356
Keyphrase:  图书馆 : score 0.0017620405819233243
Keyphrase:  STEM : score 0.0018281187867754825
Keyphrase:  刑事责任 : score 0.002066516885053515
Keyphrase:  个性化 : score 0.002356090299070339
Keyphrase:  智能化 : score 0.0033658602388738313
Keyphrase:  人才培养 : score 0.003954639032169166
Keyphrase:  资源管理 : score 0.004255070574530873
Keyphrase:  著作权法 : score 0.004728008509892105
Keyphrase:  生成物 : score 0.005241329661570213
Keyphrase:  使用者 : score 0.005845555794886875
Keyphrase:  互联网 : score 0.005889898907848213
Keyphrase:  知识产权 : score 0.00589953336628331
Keyphrase:  职业培训 : score 0.006608544692913609
Keyphrase:  进一步 : score 0.0066618802973781935
Keyphrase:  程序设计 : score 0.007409809042653846
Keyphrase:  自然人 : score 0.007485194481383966
Keyphrase:  控制能力 : score 0.007494260825899035
Keyphrase:  信息技术 : score 0.007530569139208396

六、Rake

6.1 算法思想

Rake 是 Rapid Automatic Keyword Extraction 的缩写,它是一种从单个文档中提取关键字的方法。实际上提取的是关键的短语(phrase),并且倾向于较长的短语,在英文中,关键词通常包括多个单词,但很少包含标点符号和停用词,例如and,the,of等,以及其他不包含语义信息的单词。

Rake算法首先使用标点符号(如半角的句号、问号、感叹号、逗号等)将一篇文档分成若干分句,然后对于每一个分句,使用停用词作为分隔符将分句分为若干短语,这些短语作为最终提取出的关键词的候选词。

每个短语可以再通过空格分为若干个单词,可以通过给每个单词赋予一个得分,通过累加得到每个短语的得分。Rake 通过分析单词的出现及其与文本中其他单词的兼容性(共现)来识别文本中的关键短语。最终定义的公式是:

wordScore = wordDegree(w)/wordFrequency(w)

即单词  的得分是该单词的度(是一个网络中的概念,每与一个单词共现在一个短语中,度就加1,考虑该单词本身)除以该单词的词频(该单词在该文档中出现的总次数)。

然后对于每个候选的关键短语,将其中每个单词的得分累加,并进行排序,RAKE将候选短语总数的前三分之一的认为是抽取出的关键词。

6.2 代码实现

不调用包的情况下

import jieba
import jieba.posseg as pseg
import operator
import json
from collections import Counter# Data structure for holding data
class Word():def __init__(self, char, freq = 0, deg = 0):self.freq = freqself.deg = degself.char = chardef returnScore(self):return self.deg/self.freqdef updateOccur(self, phraseLength):self.freq += 1self.deg += phraseLengthdef getChar(self):return self.chardef updateFreq(self):self.freq += 1def getFreq(self):return self.freq# Check if contains num
def notNumStr(instr):for item in instr:if '\u0041' <= item <= '\u005a' or ('\u0061' <= item <='\u007a') or item.isdigit():return Falsereturn True# Read Target Case if Json
def readSingleTestCases(testFile):with open(testFile) as json_data:try:testData = json.load(json_data)except:# This try block deals with incorrect json format that has ' instead of "data = json_data.read().replace("'",'"')try:testData = json.loads(data)# This try block deals with empty transcript fileexcept:return ""returnString = ""for item in testData:try:returnString += item['text']except:returnString += item['statement']return returnStringdef run(rawText):# Construct Stopword LibswLibList = [line.rstrip('\n') for line in open(r"../../../stopword/stopwords.txt",'r',encoding='utf-8')]# Construct Phrase Deliminator LibconjLibList = [line.rstrip('\n') for line in open(r"wiki_quality.txt",'r',encoding='utf-8')]# Cut TextrawtextList = pseg.cut(rawText)# Construct List of Phrases and Preliminary textListtextList = []listofSingleWord = dict()lastWord = ''poSPrty = ['m','x','uj','ul','mq','u','v','f']meaningfulCount = 0checklist = []for eachWord, flag in rawtextList:checklist.append([eachWord,flag])if eachWord in conjLibList or not notNumStr(eachWord) or eachWord in swLibList or flag in poSPrty or eachWord == '\n':if lastWord != '|':textList.append("|")lastWord = "|"elif eachWord not in swLibList and eachWord != '\n':textList.append(eachWord)meaningfulCount += 1if eachWord not in listofSingleWord:listofSingleWord[eachWord] = Word(eachWord)lastWord = ''# Construct List of list that has phrases as wrdsnewList = []tempList = []for everyWord in textList:if everyWord != '|':tempList.append(everyWord)else:newList.append(tempList)tempList = []tempStr = ''for everyWord in textList:if everyWord != '|':tempStr += everyWord + '|'else:if tempStr[:-1] not in listofSingleWord:listofSingleWord[tempStr[:-1]] = Word(tempStr[:-1])tempStr = ''# Update the entire Listfor everyPhrase in newList:res = ''for everyWord in everyPhrase:listofSingleWord[everyWord].updateOccur(len(everyPhrase))res += everyWord + '|'phraseKey = res[:-1]if phraseKey not in listofSingleWord:listofSingleWord[phraseKey] = Word(phraseKey)else:listofSingleWord[phraseKey].updateFreq()# Get score for entire SetoutputList = dict()for everyPhrase in newList:if len(everyPhrase) > 5:continuescore = 0phraseString = ''outStr = ''for everyWord in everyPhrase:score += listofSingleWord[everyWord].returnScore()phraseString += everyWord + '|'outStr += everyWordphraseKey = phraseString[:-1]freq = listofSingleWord[phraseKey].getFreq()if freq / meaningfulCount < 0.01 and freq < 3 :continueoutputList[outStr] = scoresorted_list = sorted(outputList.items(), key = operator.itemgetter(1), reverse = True)return sorted_list[:50]if __name__ == '__main__':with open(r'Ai_zhaiyaohebing.txt','r') as fp:text = ''for i in range(100):text += fp.readline()
#         print(text)result = run(text)print(result)
[('人力资源管理', 4.75), ('金融风险管理领域', 4.58183990442055), ('新工科', 4.203030303030303), ('混合式教学', 3.9035087719298245), ('发展历程', 3.59047619047619), ('严重危害社会', 3.4918032786885247), ('创作物', 3.4154135338345863), ('刑事风险', 3.404891304347826), ('产业发展', 3.1469979296066253), ('快速发展', 2.8154761904761907), ('深度融合', 2.7992424242424243), ('智能系统', 2.764596273291925), ('人类社会', 2.7095452141723957), ('社会风险', 2.709194583036351), ('现行著作权法', 2.6240601503759398), ('革命', 2.5555555555555554), ('发展方向', 2.5434173669467786), ('监督义务', 2.5214285714285714), ('人类智能', 2.339481065918654), ('研究现状', 2.3337662337662337), ('发展现状', 2.2813852813852815), ('新技术', 2.2503987240829346), ('人力', 2.25), ('发展建议', 2.1904761904761907), ('刑事', 2.1875), ('科技', 2.1818181818181817), ('技术发展', 2.137844611528822), ('医疗', 2.125), ('办案', 2.125), ('主导', 2.111111111111111), ('新闻', 2.111111111111111), ('发展过程', 2.0967261904761907), ('辅助', 2.090909090909091), ('新时代', 2.0377241805813235), ('新挑战', 2.005733005733006), ('素养', 2.0), ('新一轮', 2.0), ('越来越', 2.0), ('金融风险', 2.0), ('智能作品', 1.9896636587366694), ('产业', 1.9565217391304348), ('人才', 1.9333333333333333), ('水平', 1.9), ('协同', 1.8571428571428572), ('智能机器', 1.805072463768116), ('平衡', 1.8), ('全球', 1.8), ('强智能', 1.7884057971014493), ('状态', 1.7692307692307692), ('学科', 1.75)]

调用包的情况下

pip install multi_rake
from multi_rake import Rake
rake = Rake()
keywords = rake.apply(text)
print(keywords[:20])
[('以应对人工智能的快速发展。 人工智能是人类社会的伟大发明', 4.0), ('适时进行机器人专门立法。 近期国内召开的人工智能教育论坛', 4.0), ('的人才培养体系。 对人工智能创作物的可版权性判断', 4.0), ('以鼓励投资人并促进人工智能技术的长足发展。 近几年', 4.0), ('未来教育将是教师与人工智能教师协同共存的时代。 以大数据、云计算、移动互联网等技术为代表的信息技术生态系统的形成和发展', 4.0), ('具有一定借鉴意义。 如果人工智能生成的内容在表现形式上不符合作品的构成要件', 4.0), ('并不意味着著作权法因人工智能而改变。 人工智能时代的到来必将带来风险', 4.0), ('教育中的人工智能将走向人机协同的增强智能。 美国总统行政办公室联合美国国家科学技术委员会', 4.0), ('以期为相关研究提供有益的借鉴和参考。 当前人工智能本质上是人类辅助工具', 4.0), ('以从反面论证当前对人工智能没有必要作为刑事主体认定。 在当今信息革命时代', 4.0), ('构建智慧社会的法治秩序。 新技术带来的教育变革方兴未艾', 4.0), ('基于智慧教育的框架对机器学习的教育应用与创新提出了相关建议。 现行法律体系下对于人工智能的法律人格规制缺位', 4.0), ('通过强制投保责任险、确立以人为本的监管体系、加速《人工智能发展法》立法等体系性安排促进人工智能在可控的范围内发展。 新技术浪潮汹涌而至。大数据、并行计算和深度学习驱动人工智能技术飞速发展', 4.0), ('旨在为我国人工智能与教育的融合发展提供理论指导。 人工智能的发展', 4.0), ('构成了人工智能语境下的法律转型。 随着自动驾驶汽车等智能机器人的自主性、学习和适应能力不断增强', 4.0), ('是建设校本人工智能教学资源的主要策略。 人工智能从辅助人类创造的工具逐渐发展到具有自主创造的能力。计算机辅助完成的创新成果体现了人类的创造性', 4.0), ('其权利归属问题也同样可以在不与传统规则相冲突的方式下得到解决。 正人工智能正以超出人们预想的速度发展。2017年', 4.0), ('华东师范大 推进能源生产和消费革命', 4.0), ('最后对人工智能在电力系统及综合能源系统中应用所面临的挑战进行了分析和展望。 2016年10月', 4.0), ('preparing for', 4.0)]

七、Summa

pip install summa
from summa import keywords
TR_keywords = keywords.keywords(full_text, scores=True)
print(TR_keywords[0:20])
[('人工智能', 0.20105816731313303), ('年', 0.11016040768956535), ('神经网络', 0.06388799726915423), ('近年来', 0.04027526419089607), ('intelligence', 0.03653466362942308), ('在大数据的支持下', 0.0346246971866595), ('artificial', 0.029128810102958716), ('strategic', 0.023389329179370238), ('plan', 0.021451371397580698), ('人类心智和认知分为神经', 0.020984152907027116), ('年alphago的异军突起引起了全社会对人工智能的广泛关注', 0.02098414835783193), ('人工智能体的拟主体性赋予了人工智能特有的拟伦理角色', 0.020984148321143422), ('人工智能拥有类似人类的智能', 0.020984148286721082), ('智能机器人实施严重危害社会的行为可分为两种', 0.02098414799550613), ('进入大数据人工智能时代', 0.020984147618257863), ('人类已步入人工智能时代', 0.020984146933629117), ('面对人工智能技术浪潮的再次爆发', 0.020984145756245923), ('介绍了中国人工智能从迷雾重重', 0.020984139474778257), ('大智能时代的来临', 0.02098413435650319), ('混合式教学通过', 0.020984132401813637)]
from summa import summarizer
from summa import keywordsif __name__ == "__main__":my_summary = summarizer.summarize(text)my_keywords = keywords.keywords(text)#     print("my_summary = \n{0}".format(my_summary))print("my_keywords = \n{0}".format(my_keywords))
my_keywords =
人工智能
年
神经网络
近年来
intelligence
在大数据的支持下
artificial
strategic
plan
人类心智和认知分为神经
年alphago的异军突起引起了全社会对人工智能的广泛关注
人工智能体的拟主体性赋予了人工智能特有的拟伦理角色
人工智能拥有类似人类的智能
智能机器人实施严重危害社会的行为可分为两种
进入大数据人工智能时代
人类已步入人工智能时代
面对人工智能技术浪潮的再次爆发
介绍了中国人工智能从迷雾重重
大智能时代的来临
混合式教学通过
人工智能时代即将到来
人工智能时代的到来必将带来风险
人工智能在经历了多次起伏之后
对人工智能创作物如何保护
现行法律体系下对于人工智能的法律人格规制缺位

八、Autophrasex

8.1 算法思想

Autophrasex是新词发现算法,主要思想是:

Robust Positive-Only Distant Training:使用wiki和freebase作为显眼数据,根据知识库中的相关数据构建Positive Phrases,根据领域内的文本生成Negative Phrases,构建分类器后根据预测的结果减少负标签带来的噪音问题。

POS-Guided Phrasal Segmentation:使用POS词性标注的结果,引导短语分词,利用POS的浅层句法分析的结果优化Phrase bo

AutoPhrase可以支持任何语言,只要该语言中有通用知识库。与当下最先进的方法比较,新方法在跨不同领域和语言的5个实际数据集上的有效性有了显著提高。

8.2 代码实现

pip install autophrasex
from autophrasex import *# 构造autophrase
autophrase = AutoPhrase(reader=DefaultCorpusReader(tokenizer=JiebaTokenizer()),selector=DefaultPhraseSelector(),extractors=[NgramsExtractor(N=4), IDFExtractor(), EntropyExtractor()]
)# 开始挖掘
predictions = autophrase.mine(corpus_files=['./Aizhaiyao.txt'],quality_phrase_files='./wiki_quality.txt',callbacks=[LoggingCallback(),ConstantThresholdScheduler(),EarlyStopping(patience=2, min_delta=5)])# 输出挖掘结果
for pred in predictions:print(pred)
('教育 人工智能', 0.31)
('智能 机器人', 0.2)
('教学', 0.18)
('价值', 0.18)
('职业培训', 0.17)
('教师', 0.17)
('智能', 0.15)
('实践', 0.14)
('人工智能 产品', 0.13)
('人力', 0.13)
('人类', 0.12)
('学习', 0.12)
('分析', 0.12)
('创新', 0.12)
('资源', 0.12)
('新闻', 0.12)
('规制', 0.11)
('提高', 0.11)
('个性化 学习', 0.11)
('体现', 0.11)
('严重危害', 0.11)
('研究', 0.1)
('领域', 0.1)
('人力 资源管理', 0.1)
('生成物', 0.1)
('控制能力', 0.1)
('信息化', 0.1)

九、 MDERank

相关研究ACL2022最新进展(MDERank),主要采用如下方法:

9.1 算法思想

1.由原先的短语-文本层面的相似度计算通过掩码转换为文本-文本层面,从而解决了长度不匹配的问题

2.避免了使用短语的表征,而是使用掩码后的文本替代候选词,由此可以获得充分利用了上下文信息的文本表征

1. 绝对采样:利用现有的无监督关键词提取方法,对每篇文章抽取得到关键词集合,将这些“关键词”作为正例对原始文章进行掩码。然后在剩下候选词(“非关键词”)中随机抽取作为负例。

2. 相对采样:利用现有的无监督关键词提取方法,对每篇文章抽取得到 d 关键词集合,在关键词集合中,随机抽取两个“关键词”,其中排名靠前的一个作为正例,另一个则为负例,从而构建训练数据。

9.2  实验结果

十、小结

从中我们可以看到,TF-IDF基于统计易于实现,但是缺点就是没有考虑词与词,词与文档之间的关系。

TextRank考虑了词与词之间的关系(提取思想就是从窗口之间的词汇关系而来),但是缺点是它针对的是单个文本,而不是整个语料,在词汇量比较少的文本中,也就是短文中,效果不会太好。

以上两种方式都没有考虑到词和整个文档的相关性或者一致性。

因此,如果认为关键词与文档在主题分布或者语义分布是一致或者相似时,我们就可以进一步的展开尝试。

例如,LDA主题模型认为文档是有很多主题组成的,文档既是主题的分布也是关键词的分布,可以计算词的主题分布与文档主题分布的相似性,抽取关键词。

通过Bert编码,可以分别得到文档和词语的embedding表示,通过比对两者之间的相似度,然后排序,可以得到关键词集合。

这两种都是很直接的想法,并且可以快速平移至摘要抽取上,如同类思想的BertSum工作。

基于统计学的关键词提取算法,依赖于切分词,然而普适的切分词,在缺乏领域知识情况下,很容易将我们需要的信息切分开

基于深度学习的keybert只能接受限定长度的文本,例如512个字,这个使得我们在处理长文本时,需要进一步加入摘要提取等预处理措施,这无疑会带来精度损失。而且在没有切分词的情况下,生成的结果偏向于长短语,常常达不到预期的效果。

十一、关键词提取的评价指标

关键词的评价也是一个关键问题,一般来说,主要有以下几种方式:

搜索推荐评价指标Precision@kRecall@kF1@k假设对于一个查询,真实相关的结果是{ACE, Q},搜索模型得到5个结果{A, B, C, D, E},则其中只有ACE是相关的,标记为{1, 0, 1, 0, 1}1表示相关,0表示不相关。

1、F1@1:针对top-1的结果计算F1 score

在具体计算上,得到输出的关键词序列后,获取其中的第一个关键词和GT中的第一个关键词作对比,从而计算出f1 score;

2、F1@3:针对top-3的结果计算F1 score

在具体计算上,得到关键词序列中的前三关键词与GT中的关键词做对比(不关心这三个关键词的相互顺序)

3、MAP(mean average precision)平均精度均值:

在具体计算上,先求出每个候选词在当前文本的精确率(TP/(TP+FP)),然后将这一段文本的所有候选词精确率求和并除以候选词个数得到该文本的平均精确率(AP),最后将所有文本的平均精确率相加后除以文本数,就得到平均精度均值(MAP)。

十二、下一步计划

import pandas as pd
count = {}
filename = "./AI_test.csv"
inputs = pd.read_excel(filename)
for text in inputs['关键词’]:
for char in str(text).split():if char in count:count[char] +=1else:count[char] = 1
{'人工智能': 84, '教育人工智能': 5, 'EAI': 1, '机器学习': 4, '社会风险': 2, '法律挑战': 1, '制度安排': 1, '人工智能+教育': 1, '智能教育': 2, '智能作品': 1, '自然人': 1, '版权': 1, '人工智能教育应用': 3, '人工智能教师': 1, '协同共存': 1, 'AI': 5, '教育生态系统': 1, '独创性': 3, '刑事风险': 1, '刑事责任': 3, '严格责任': 2, '智能教学系统': 2, '学习分析': 1, '智慧教育': 2, '教育应用': 3, '主体地位': 1, '刑罚目的': 1, '法律规制': 2, '智慧社会': 1, '个性化学习': 2, '法律人格': 2, '人权': 1, '数据安全': 1, '深度学习': 4, 'ITS': 1, '自动化测评': 1, '法律认知': 1, '法律规则': 1, '法律价值': 1, '自动驾驶汽车': 1, '智能机器人': 6, '差别化责任': 1, 'AI教育': 1, 'AI课程与教学': 1, '计算思维': 1, '人工智能创造物': 1, '人类受众': 1, '作者': 1, '知识产权': 2, '未来教育': 2, '教育信息化': 1, '电力系统': 1, '综合能源系统': 1, '网络社会': 1, '大数据': 5, '美国': 1, '人工智能生成内容': 1, '著作权': 1, '类脑智能': 1, '认知计算': 1, '认知脑计算模型': 1, '弱人工智能': 3, '强人工智能': 2, '独立意志': 1, '辨认控制能力': 1, '法律人工智能': 1, '法律数据': 1, '算法': 4, '创作物': 1, '作品': 1, '版权保护': 1, '“人工智能+”时代': 1, '人工智能技术': 1, '学习行为': 1, '学习空间': 1, 'PST框架': 1, '教育目标': 1, '可版权性': 1, '人类社会': 1, '人工智能领域': 1, '隐私保护': 1, '个人信息': 1, '人工神经网络': 1, '人-机系统': 1, '人工智能生成成果': 1, '邻接权': 2, '数据成果': 1, '数据处理者权': 1, '智慧图书馆': 1, '智慧服务': 1, '智能图书馆': 2, '人工智能生成物': 3, '著作权法': 1, 'STEM/STEAM': 1, '法律': 2, '电子人': 1, '新工科': 2, '人才培养': 2, '技术框架': 1, '应用模式': 1, '发展难题': 1, '图书馆': 4, 'AlphaGo': 1, '蒙特卡洛树搜索': 1, '伦理': 1, '智能体': 1, '拟主体性': 1, '群体智能': 1, '教学机器': 1, '量子力学': 1, '物理主义': 1, '教育': 1, '未来社会': 1, '人工智能体': 1, '意志能力': 1, '物质性条件': 1, '机器人': 1, '就业': 2, '职业培训': 1, '主体': 1, '客体': 1, '理性': 1, '计算机辅助教学': 1, '治理': 1, '公共政策': 1, '人工智能教育': 1, '教育人工智能技术框架': 1, '人工智能时代原住民': 1, '智能时代': 1, '信息技术': 1, '图书馆服务': 1, '机器人权利': 1, '法律拟制': 1, '拟制电子人': 1, '《北京共识》': 1, '教育发展': 1, '可持续发展': 1, '战略博弈': 1, '军事系统': 1, 'STEM教育': 1, '跨学科': 1, '模式': 1, '人工智能时代': 1, '普通机器人': 1, '经济增长': 1, '收入不平等': 1, '混合式教学': 1, '发展应用': 1, '辩证关系': 1, '中国': 2, '智能科学': 1, '行政伦理': 1, '政府转型': 1, '社会管理': 1, '刑事法治理念': 1, '犯罪主体地位': 1, '人工智能犯罪': 1, '人类心智': 1, '人类认知': 1, '人类智能': 1, '人工智能产业': 1, '发展现状': 1, '对策': 1, '刑事责任能力': 1, '刑责承担范围': 1, '人工智能+': 1, '创新创业教育': 1, '复旦共识': 1, '多元智能': 1, '技术发展': 1, '人工智能创作物': 1, '非创作性投入': 1, '利益平衡': 1, '多方位挑战': 1, '老龄化': 1, '智能化生产': 1, '替代效应': 1, '人机共存': 1, '人性解放': 1, '机器人道德伦理': 1, '刑法规制': 1, '实证性': 1, '监管者': 1, '生产性资源': 1, '智能教育应用': 1, '个性化': 1, '智能教育核心服务': 1, '教育信息化2.0': 1, '“智能+”校园': 1, '教育生态': 1, '司法权': 1, '司法运营电脑化': 1, '法律推理': 1, '发展机遇': 1, '作品的作者': 1, '刑事法网': 1, '功能定位': 1, '主体资格': 2, '智能医疗': 1, '智慧医疗': 1, '手术机器人': 1, '创新原理': 1, '高等教育': 1, '学科': 1, '人力资源管理': 1, '薪酬': 1, '绩效管理': 1, '会计变革': 1, '风险控制': 1, '专利分析': 1, '产业发展': 1, '移动互联网': 1, '演进路线': 1, '新闻业': 1, '自动化新闻': 1, '逻辑起点': 1, '边界': 1, '神经网络': 1, '支持向量机': 1, '混合智能': 1, '刑事司法': 1, '司法判断': 1, '规则': 1, '概念内涵': 1, '目标定位': 1, '司法领域': 1, '办案辅助工具': 1, '数据分析': 1, '电力变压器': 1, '状态检修': 1, '自动化决策': 1, '技术-经济特征': 1, '高质量增长': 1, '就业结构': 1, '辨认能力': 1, '控制能力': 1, '共同犯罪': 1, '创客教育': 1, '国际考察': 1, '发展策略': 1, '数字图书馆': 1, '信息推荐': 1, '康德哲学': 1, '法律属性': 1, '人才体系': 1, '智能创新': 1}

结合知网、维普网等数据集的关键词提取可以作为知识发现的一种途径,由于当前关键词提取的各类算法各有优劣,基于统计学的算法依赖切分词效果且缺失上下文语义信息,基于预训练模型的算法偏向于获取长度较长的短语,且在英文数据集效果好于中文数据集,可以尝试结合各类算法结果互补,在缺乏专家知识情况下得到较优的新词发现结果,然后获得细粒度的切分词效果,然后基于词信息熵约束构建整个概念权重网络。

参考内容:

1. NLP关键词提取必备:从TFIDF到KeyBert范式原理优缺点与开源实现

2. 【Python】用 Python 从单个文本中提取关键字的四种超棒的方法

3. 行业短语抽取方案 - 今夜无风 - 博客园 (cnblogs.com)

KeyBert、TextRank等九种本文关键词提取算法(KPE)原理及代码实现相关推荐

  1. 关键词提取算法TextRank

    很久以前,我用过TFIDF做过行业关键词提取.TFIDF仅仅从词的统计信息出发,而没有充分考虑词之间的语义信息.现在本文将介绍一种考虑了相邻词的语义关系.基于图排序的关键词提取算法TextRank. ...

  2. 广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert

    导读:本文是"数据拾光者"专栏的第六十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了超好用的无监督关键词提取算法Keybert,对于希望使用无 ...

  3. 基于TextRank的关键词提取算法

    基于TextRank的关键词提取算法 前沿 TextRank是一种文本排序算法,是基于著名的网页排序算法PageRank改动而来.在介绍TextRank前,我们先简单介绍下什么是PageRank.另外 ...

  4. TextRank关键词提取算法

    参考:百度AI Studio课程_学习成就梦想,AI遇见未来_AI课程 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com) 1.关键词提取算法分类 1.有监督 将关键词提取 ...

  5. python视频提取关键帧_一种视频关键帧提取算法的制作方法

    本发明属于信息安全技术领域,涉及视频内容信息的提取,具体来说,是一种视频关键帧提取算法. 背景技术: 随着Internet的应用和普及,多媒体信息检索系统对社会各领域产生越来越大的影响.传统的信息检索 ...

  6. java 文本分析 关键词提取_文本关键词提取算法总结

    1.TF-IDF 昨天给大家演示简单的文本聚类,但要给每个聚类再提取一两个关键词用于表示该聚类.我们还是用TFIDF算法来做,因为这是比较简单的提取特征算法,不过这里的TF是指某词在本聚类内所有文章的 ...

  7. 【机器学习】九种顶流回归算法及实例总结

    线性回归通常是人们为机器学习和数据科学学习的第一个算法.它简单易懂,但是由于其功能有限,在实际业务中并不是最佳选择.大多数情况下,线性回归被用作基线模型来评估和比较研究中的新方法. 在处理实际问题时, ...

  8. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  9. 关键词提取算法之RAKE

    关键词提取算法之RAKE RAKE(Rapid Automatic Keyword Extraction)算法,作者Alyona Medelyan,她的GitHub上有很多关键字提取的项目. RAKE ...

最新文章

  1. matlab基础(0)
  2. 正确理解python中二分查找
  3. SAP Spartacus 服务器端渲染模式下,在 Node.js 服务器端渲染视图的单步调试
  4. H5+JS实现《Just Do 8》游戏源码分享
  5. 媒体层图形技术之AssetsLibrary 学习笔记
  6. 17个Python的牛逼骚操作,你都OK吗?
  7. 正则表达式匹配NOD用户名与密码
  8. 步步为营-53-JavaScript
  9. 09-JS的事件流的概念(重点)
  10. 西门子g120变频器接线图_西门子S7—1500第二十一讲(G120变频器第一篇)
  11. PMP知识点:工作绩效数据、信息和报告的区别
  12. Visio 的uml数据库表示方法中容器无法设置外键?
  13. less函数的使用 c语言,less即学即用
  14. 如何利用黑天鹅事件来避险和赚钱(比如中国房价一定会崩盘但无法确定时间点)
  15. flashback的用法
  16. citra黑屏_3ds模拟器最新版Citra下载_3ds模拟器Citra2019最新版下载_游戏堡
  17. Python字符串编码检测
  18. 1006-奇怪的分式
  19. apache进程数不断增多是什么原因造成的呢?
  20. ubuntu1804安装mysql5.7教程

热门文章

  1. 前端模板——家乡风景的介绍
  2. HBM MM CDM Latch-Up
  3. QCC307X-QCC517X repo下载
  4. html怎么调整成苹方,web css 苹方字体设置
  5. 巨量引擎创意分类和创意标签使用技巧
  6. matplotlib.pyplot.imshow opencv.imread 图片显示 图片读取
  7. ssm基于微信小程序的毕业论文选题管理系统小程序 uinapp
  8. 轻松制作短视频网页工具:锐视RyView 帮助文档
  9. 电脑拨号无法连接远程计算机,Win8宽带连接错误720不能建立远程计算机连接如何解决...
  10. Java面试题基础系列