文章目录
关键词是指能反映文本主题或者主要内容的词语。关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来,是NLP领域的一个重要的子任务。在信息检索中,准确的关键词提取可以大幅提升效率;在对话系统中,机器可以通过关键词来理解用户意图;在文本分类中,关键词的发现也非常有帮助。关键词能让我们快速了解文章所讲内容,但是网络上写文章的人不会像写论文那样告诉你本文的关键词是什么,这个时候就需要利用计算机自动抽取出关键词,算法的好坏直接决定了后续步骤的效果。
关键词抽取从方法来说大致有两种:
关键词抽取从算法的角度来说主要有两类:
jieba分词系统中实现了两种关键词抽取算法,分别是基于TF-IDF关键词抽取算法和基于关键词抽取算法,两类算法均是无监督学习的算法,本篇文章将来学习基于TF-IDF算法的关键词抽取。
2、TF-IDF算法原理
TF-IDF是在信息检索理论中Term – 的简写,它是一种数值统计,用于反映一个词对于语料中某篇文档的重要性。在信息检索和文本挖掘领域,它经常用于因子加权。
TF-IDF的基本公式: TF-IDF = TF * IDF,TF-IDF在实际中主要是将二者相乘,也即TF * IDF,TF为词频表示词t在文档d中出现的频率;IDF为反文档频率表示语料库中包含词t的文档的数目的倒数。
由公式可知:一个词在文档中出现的次数越多,其TF值就越大,整个语料库中包含某个词的文档数越少,则IDF值越大,因此某个词的TF-IDF值越大,则认为这个词具有很好的类别区分能力,关键词的概率越大。
TF-IDF的基本思想是: 词语的重要性与它在文件中出现的次数成正比,但同时会随着它在语料库中出现的频率成反比下降。
一个文档中多次出现的词总是有一定的特殊意义,但是并不是所有多次出现的词就都是有意义的,如果一个词在所有的文档中都多次出现,那么这个词就没有什么价值了。或者说,如果某个词或者短语在一个文档中出现多次,但是在其他文档中很少出现,就可以认为这个词或短语具有很好的区分性,适合用来对文档进行分类。
TF-IDF算法步骤:
这时,需要一个语料库(),用来模拟语言的使用环境。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
TF-IDF的优点是: 简单快速,而且容易理解。
TF-IDF的缺点是: 1、为了精确的提取一篇文档中的关键词,需要有一整个语料库来提供支持。这个问题的解决方法,通常是在一个通用的语料库上提前计算好所有词的IDF值,jieba就是这么做的。这样的解决方案对于普通文档关键词提取有一定的效果,但是对于专业性稍微强一点的文档,表现就会差很多。2、有时候用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。如果要体现词的上下文结构,那么你可能需要使用算法来支持。
3、编程实例
jieba分词中已经对TF-IDF进行了实现,并预先统计出了汉语中每个词的逆文档频率(IDF),我的存储目录为D:\Libsite-jieba\idf.txt
jieba默认使用以上路径的IDF词典,并计算输入文档的TF(文本词频)值,进而求出TF-IDF提取关键词。
在jieba的TF-IDF模型里面,当调用获取关键词的函数 jieba..(, topK=20, =False, =()) 的时候,该函数会调用默认的IDF语料库。
其中:
当然,我们也可以自定义语料库,通过IDF计算公式去对词语逐个的计算,生成自定义语料库,通过 .(‘自定义语料库路径’) 指定语料库,再通过 tfidf(需要处理的文本) 语句进行关键词提取。在线语料库可自行选择:语料库
import jieba
from jieba.analyse import *
def stopwordslist(filepath): # 定义函数创建停用词列表