第2篇:三分钟热情学NLP-关键词提取TF-IDF

一篇文章或1个文档中,哪些词对文章更重要?哪些词可以作为关键词?自动提取关键词可以快速地从海量的信息中提取和获取信息,下面简述下关键词提取技术。

1、关键词提取的机器学习方法

有监督的机器学习方法:构建1个丰富的词表,判断每个文档与词表中每个次的匹配程度,这种方法是准确高;缺点是维护词表和标注的成本高;
无监督的机器学习方法:2个常见算法是TF-IDF算法和TextRank算法

2、TF-IDF算法

TF-IDF词频-逆文档概率,一般是指词频和逆文档概率这2个度量的乘积,[参考阅读]https://www.cntofu.com/book/85/nlp/tf-idf.md 基本理念是:
1、词频TF。在1篇文档中,1个词出现次数越多,那么这个词在这篇文章中约重要;
通俗点就是:越多越好
TF=该词出现的次数/文档中的总词数

nlp 关键词抽取 nlp关键词提取算法_nlp 关键词抽取

词频.png

 

2、逆文档IDF。在若干个文档中,1个词,出现的次数较少,那么这个词越重要;这是衡量1个词普遍重要的度量,或者说是衡量1个词是否具有较好分类的1个度量。
通俗点就是:越少越好
IDF=log{文档的个数/(该词在多少个文档中出现+1)}

 

nlp 关键词抽取 nlp关键词提取算法_nlp_02

逆文档.png

举例:
在某个语料库中,共有2000个文档,标记为d1,d2,d3……,d5000
其中d1文档,共有1000个词,其中“自然语言处理”出现了33次;
全部5000个文档中,“自然语言处理”这个词,在10个文档中出现过;

则d1中的,“自然语言处理的”的TF值为:33/1000=0.033;
在整个语料库中,“自然语言处理”的IDF值就是:log(5000/11)=8.82

3、TF-IDF算法实战

本部分以Jieba分词下的TF-IDF进行实战,摘选一段jieba的git上的对jieba.analyse.extract_tags的参数说明。

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选

查看top20和top3的关键词

import jieba.analyse
import math

text = '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,自然语言处理是一门融语言学、计算机科学、数学于一体的科学。'

keywords_all = jieba.analyse.extract_tags(text)
print('所有关键词(默认取top20):'+"/".join(keywords_all))

keywords_top = jieba.analyse.extract_tags(text,topK=3)
print('top3的关键词:'+"/".join(keywords_top))

输出

所有关键词(默认取top20):自然语言/计算机科学/领域/处理/人工智能/语言学/一体/一门/计算机/通信/数学/科学/方向/有效/理论/方法/实现/各种/之间/研究
top3的关键词:自然语言/计算机科学/领域

由结果可以得出,在不指定topK时,默认取出了top20的关键词;

查看下该段文本的总词数

输入:

print('总的词数:{}'.format(len(list(jieba.cut(text)))))

输出

总的词数:48

返回top20关键词的权重

输入

keywords_weight = jieba.analyse.extract_tags(text,withWeight=True)
# withWeight=True,返回权重值
for item in keywords_weight:
    print(item[0],item[1])

输出

自然语言 1.1180294731285714
计算机科学 0.6969673518271428
领域 0.3865925387435714
处理 0.38648968981142856
人工智能 0.3377866569817857
语言学 0.31996554390607146
一体 0.2634684052082143
一门 0.2623328842917857
计算机 0.2430280153885714
通信 0.23719862585285714
数学 0.23601215985000001
科学 0.19919838444250001
方向 0.19094219187892855
有效 0.18915023044464285
理论 0.18780139184250003
方法 0.1774216082157143
实现 0.1670260813067857
各种 0.16528642764035714
之间 0.15934034996642857
研究 0.15441970035535715