天天看点

NLP中关键词的提取

一:关键词提取的方法有多种,分别如下:

TF-IDF、主题模型、TestRank、rake

二:首先来说一下TF-IDF:

TF是词频,IDF是逆向文件频率,IDF起到给词赋予权重的作用。

TF-IDF的思想:重要的词一定在文章中出现多次,但同时在各个文章中出现多次的词一定没有在只在同一篇文章中出现多次的词的重要性大。

此方法类似统计方法,下面把计算方法列举出来:

TF=某个词在文章出现的次数/文章中词数的总和

IDF=Log(语料库文档总数或者大小/包含该词的文档文档的总数+1)

TF-IDF=TF*IDF

NLP中关键词的提取

中国在各个文档中出现的次数很多,所以让它的权重IDF小一些,所以中国不会在关键词中出现。相反蜜蜂和养殖出现的少让其大一些。

还有关键字一般出现在文章的第一段或者最后一段中,所以我们要将其IDF提升的大一些。还有就是TF-IDF是基于词频,会忽略其中的

一些语义信息。

给出一个例子:

import jieba.analyse as analyse
lines=open('/home/yang/下载/zuowen.txt').read()
print " ".join(analyse.extract_tags(lines,topK=10,withWeight=False,allowPOS=()))      

评语 12 评分 老师 qidian com 我能 2010 www 10

二:主题模型和关键词提取

LDA是一种无监督的贝叶斯模型,是一种无监督学习算法,不需要手工给出标签,我们需要的只有文档集和指定主题个数K,优点是可以找到一些词来描述它。

LDA可以看成是词袋模型,一篇文档可以有多个主题组成,每个词都是由主题生成的。

P(单词 | 文文档) = P(单词 | 主题) * P(主题 | 文文档)

对语料库中的每篇文档,LDA定义如下的生成过程:

1:对每篇文档,从主题分布中抽取一个主题;

2:从上述被抽取的主题所对应的单词分布中抽取一个单词

3:重复1,2直到遍历所有的单词

这里会有一个文档主题的分布图和主题单词的分布图,不给出来了自己领会把。

三:TestRank

基本思想:1:首先对文本进行分词处理;    2:固定窗口的大小,通过span设定,默认是5,根据词之间的共现关系构建无向图;  3:计算图中的pagerank,作为图的权重。

  • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默认过滤词性。
  • jieba.analyse.TextRank() 新建自定义 TextRank 实例

四:rake

rake提取的并不是单一的单词,而是单词组成的短语。

每个短语的得分由组成短语的词累加得到,而词的得分与词的度与词频有关

继续阅读