参考:百度AI Studio课程_学习成就梦想,AI遇见未来_AI课程 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
1.关键词提取算法分类
1.有监督
- 将关键词提取问题转换成二分类问题,判断每个候选关键词是否为关键词
- 该类算法,需要一个标注好关键词的文档集合来训练分类模型
2.半监督
- 需要少量的训练数据,利用这些训练数据来构建关键词提取模型
- 基于模型对 待处理文本 进行关键词提取
- 提取后,把这些关键词进行人工过滤,将过滤得到的关键词加入到训练集中,重新训练模型
3.无监督
- 不需要人工标注的训练集
- 利用某些方法来发现文本中比较重要的词作为关键词,从而进行关键词提取
- 基于词图模型的关键词提取
- PageRank、TextRank
- 基于统计特征的关键词提取
- TF、TF-IDF
- 基于主题模型的关键词提取
- LDA、LSA、LSI
- 基于词图模型的关键词提取
2.PageRank算法
1. 来源
Google 创始人拉里·佩奇和谢尔盖·布林于 1997 年构建早期的搜索系统原型时提出的链接分析算法,通过计算网页链接的数量和质量来粗略估计网页的重要性。
2.核心思想
- 链接数量:如果一个网页被很多其他网页链接到,说明这个网页比较重要。也就是PageRank的值会相对较高
- 链接质量:如果一个PageRank值很高的网页链接到其它网页,那么这个网页的PageRank值会响应地提高。
3.基本原理
1.先将整个万维网看作是一张有向图,网页构成了图中的节点.每个节点额权重作为其重要性的度量。
2.如果一个节点由很多其它节点指向它,那么它就很重要。同样的如果这个很重要的节点,它的外链数很少,那么这个被链接的点显然也很重要。
4.算法流程
1.给每个网页一个PageRank值
2.通过算法不断更新迭代,直到达到平稳分布为止。
3.TextRank算法
1.特点
TextRank算法构造的网络是无向有权图。
除了考虑链接句的重要性之外,还考虑两个句子之间的相似性。
计算每个句子给它链接句的贡献时,是通过计算权重占总权重的比例来分配的。
这里的权重即指句子之间的相似度,可通过编辑距离、余弦相似度等来进行计算。
2.总体思想
1.构建一张关系图来表示文本、词语以及其他实体。
2. 词语、词语集合、整个句子等都可以作为图中的顶点
3.在这些顶点之间建立联系(比如词序关系、语义关系、内容相似度等),就能够构建一张合适的关系图。
3.算法流程
1.将原文本分割成句子。
2.对每个句子进行分词,并做词性标记,然后去除停用词,只保留指定词性的词(如名词、动词、形容词)
3.构建词图。
1.节点集合由以上步骤生成的词组成。
2.然后根据共现关系,构造任意两个节点之间的边。
仅当两个节点对应的词在长度为K的窗口中共现时,它们之间存在边
其中,K表示窗口大 小 ,即最多共现K个单词,一般K取2
补充共现关系:共同出现的关系。
4.迭代计算各个节点的权重,直至收敛,得到各节点重要性的分值
5.对各个节点的权重进行倒序排序,得到最重要的N个单词,作为top-N关键词进行输出。
6.在原文本中标记top-N关键词,若它们形成了相邻词组,则作为关键词词组提取出来。
4.TextRank关键词提取案例
1.使用jieba分词
用法:jieba.analyse.extract_tags(sentence,topK=5,withWeight=True,allowPOS=())
- sentence:待提取关键词的原文本
- topK:返回关键词的数量,重要性从高到低排序
- withWeight:是否同时返回每个关键词的权重
- allowPOS:词性过滤,为空表示不过滤,若提供则返回符合词性要求的关键字。
举个例子:
def jieba_test(sentence):result=jieba.analyse.extract_tags(sentence,5,withWeight=True,allowPOS=())print("jieba分词得到的关键词和权重")for i in result:print(i)
if __name__=='__main__':sentence="分词就是将连续的字序列按照一定的规范重新组合成语义独立词序列的过程。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"jieba_test(sentence)TextRank4zh_test(sentence)
结果截图:
2.使用TextRank4zh
1.先导入包 pip install textrank4zh
2.调用函数
1.analyze函数:对文本进行分析
2.get_keywords函数:获取最重要的关键词
举个例子:
def TextRank4zh_test(sentence):tr4w=TextRank4Keyword()tr4w.analyze(sentence,True,5)print("TextRank4zh_test方法得到的关键词")for item in tr4w.get_keywords(5,word_min_len=1):print(item)
if __name__=='__main__':sentence="分词就是将连续的字序列按照一定的规范重新组合成语义独立词序列的过程。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"jieba_test(sentence)TextRank4zh_test(sentence)
结果截图: