关键词抽取介绍
关键词抽取(keywords extraction)是指从当前文章中,提取出最相关的词语。关键词在文献检索、自动文摘、文本聚类/分类等方面有重要的应用价值。
关键词提取通常分为两种方法:
- 关键词分配:根据给定的关键词库,在新文档中选择关键词。
- 关键词提取:通过算法分析,自动提取新文档中的关键词。
目前大多数应用都是基于后者实现的。
常见关键词抽取算法
TF-IDF算法
TF-IDF(Term Frequency-Inverse Document Frequency) 用于计算一个词对于某篇文档的重要程度。在信息检索和文本挖掘领域,它经常用于因子加权。
TF-IDF 的主要判断包括两个:
- 该词在一篇文档中出现的频率,即 TF(Term Frequency);
- 该词在语料库中其他文档中出现频率的倒数,即 IDF (Inverse Document Frequency)
其中,TF和IDF分别为:
$$ \mathrm{TF}_{\mathrm{i}, \mathrm{j}}=\frac{n_{i, j}}{\sum_{k} n_{k, j}}\\ \mathrm{IDF}_{\mathrm{i}}=\log \frac{|D|}{\left|\left\{j: t_{i} \in d_{j}\right\}\right|} $$
jieba中,实现了基于TF-IDF算法的关键词抽取,其调用方法为:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
其中:
sentence
:待提取的文本语料;topK
:返回 TF/IDF 权重最大的关键词个数,默认值为 20;withWeight
:是否需要返回关键词权重值,默认值为 False;allowPOS
:仅包括指定词性的词,默认值为空,即不筛选。
例如,下面这个句子,取出Top 20关键词
import jieba.analyse
sentence = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"
keywords = " ".join(jieba.analyse.extract_tags(sentence , topK=20, withWeight=False, allowPOS=()))
print(keywords)
人工智能 智能 2017 机器 不同 人类 科学 模拟 一门 技术 计算机 研究 工作 Artificial Intelligence AI 图像识别 12 复杂 流行语
可以只选择提取名词和动词,并显示权重值
keywords =(jieba.analyse.extract_tags(sentence , topK=10, withWeight=True, allowPOS=(['n','v'])))
print(keywords)
[('人工智能', 0.9750542675762887), ('智能', 0.5167124540885567), ('机器', 0.20540911929525774), ('人类', 0.17414426566082475), ('科学', 0.17250169374402063), ('模拟', 0.15723537382948452), ('技术', 0.14596259315164947), ('计算机', 0.14030483362639176), ('图像识别', 0.12324502580309278), ('流行语', 0.11242211730309279)]
TextRank算法
TextRank是基于PageRank思想的算法,把文本中的词看作图中的节点,通过边连接,不同的节点有不同的权重。权重高的将被作为关键词。
TextRank的迭代公式如下:
$$ W S\left(V_{i}\right)=(1-d)+d * \sum_{j \in \operatorname{In}\left(V_{i}\right)} \frac{w_{j i}}{\sum_{V_{k} \in O u t\left(V_{j}\right)} w_{j k}} W S\left(V_{j}\right) $$
具体TextRank算法的细节后面做介绍,这里只介绍如何使用。
jieba中实现了TextRank算法,具体如下:
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
可以看到,TextRank的用法和TF-IDF相同。下面使用TextRank算法对之前的文本做抽取:
sentence = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"
result =(jieba.analyse.textrank(sentence, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v')))
print(result)
[('智能', 1.0), ('人工智能', 0.9246734690243865), ('机器', 0.5015054081899979), ('人类', 0.40976200127273543), ('研究', 0.3997370595584669), ('技术', 0.3969474899351588), ('模拟', 0.3785794679439054), ('包括', 0.35734073181311554), ('科学', 0.3384764513894717), ('工作', 0.3088258912064178), ('领域', 0.2989163932874729), ('理论', 0.29863017186463336), ('计算机', 0.2828750117926578), ('年度', 0.27757529224711924), ('需要', 0.2590918783501102), ('语言', 0.25393764232373817), ('相似', 0.24802243669687102), ('方式', 0.2420017738562807), ('做出', 0.2404977224328254), ('心理学', 0.23943231207914265)]
HanLP也实现了该算法:
sentence = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"
from pyhanlp import *
result = HanLP.extractKeyword(sentence, 20)
print(result)
[人工智能, 智能, 人类, 研究, 不同, 工作, 包括, 领域, 模拟, 理论, 技术, 新的, 门, 机器, 计算机, 科学, 入选, 复杂, AI, 12月]
LDA主题模型算法
这里的LDA是指 Latent Dirichlet Allocation ,用于文本分类,具体后面会详细讨论,只列出来。一篇比较好的文章为:
https://zhuanlan.zhihu.com/p/31470216
参考文献:
[1] Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]//Proceedings of EMNLP. 2004, 4(4): 275.