提取关键字的两种方法
1 背景
在前面的一篇博客里,笔者层提到过这两种计算关键词的思路(尴尬了,好像没有提到,没事待会儿写一篇LDA主题模型的博客,里面会涉及到),具体见:Python | 数据匹配+统计(这个博客里df_net_gt数据框的tf_word列就是根据TF-IDF得到的前五关键词)。今天笔者就带着大家来系统梳理一下这个知识点。
1.1 为什么要计算这两个指标?
- 业务需求是:将外部数据源和已有数据库中的数据进行merge,目的是扩充数据库已有的标签。
- 扩充的一种思路就是根据关键词来扩,即从外部数据源中提取出关键词来补充已有的数据库。
- 那如何从外部数据源中提取出关键词呢?就用到了TF-IDF和TEXT-RANK两种方式了!
2 什么是TF-IDF
2.1 定义
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词,而且算法简单高效,常被工业用于最开始的文本数据清洗。
2.2 计算方式
分三步进行计算。
- 第一步是计算词频TF(term frequency)
- 第二步计算逆文档频率IDF(inverse document frequency)
- 第三步是将上述两个结果相乘即得TF-IDF
TF-IDF和一个词在文档中出现的次数成正比,与该词在整个语料库中的出现次数成反比
于是计算出文档的每个词的TF-IDF值,然后按降序排列,排在最前面的几个词即为文章主要的关键词
2.3 举例
网上流传着一个特别经典的例子,分享给大家:
2.4 Python实现
具体见LDA主题模型实现的博客,sklearn就可以直接实现。
3 什么是TEXT-RANK
3.1 定义/思想
思想:通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词。
那啥是PageRank呢?
- PageRank是用来解决网页排名的问题,网页之间的链接关系即为图的边。
- 通过下面一个图具体了解PageRank是干啥的:
3.2 计算公式
- PageRank的迭代计算公式为:
- TextRank的迭代计算公式为:
3.3 Python实现
见LAD主题模型博客
3.4 用途
- 关键词提取
- 关键词短语提取:基于关键词提取,可以简单认为:如果提取出的若干关键词在文本中相邻,那么构成一个被提取的关键短语。
-
生成摘要 — 基于句子,将每个句子看作一个节点,计算TextRank。
4 两者对比
- 关键词提取依赖于分词效果。两种处理方式:①停用词的改变;②自定义词典的改变。TextRank与TFIDF均严重依赖于分词结果——如果某词在分词时被切分成了两个词,那么在做关键词提取时无法将两个词黏合在一起(TextRank有部分黏合效果,但需要这两个词均为关键词)。因此是否添加标注关键词进自定义词典(这个在LDA主题模型博客也会有涉及,即如何添加自定义词典?),将会造成准确率、召回率大相径庭。
- TextRank的效果并不优于TFIDF
- TextRank虽然考虑到了词之间的关系,但是仍然倾向于将频繁词作为关键词。
- TextRank涉及到构建词图及迭代计算,所以提取速度较慢
- 两者共同缺点:以上两种方法本质上还是基于词频,没有完全基于语义。
5 参考
- https://zhuanlan.zhihu.com/p/31197209
- https://blog.csdn.net/zrc199021/article/details/53728499
- https://zhuanlan.zhihu.com/p/41091116
- https://www.letiantian.me/2014-06-10-pagerank/