补充关键词抽取:RAKE,LDA等

之前的《关键词抽取——结巴分词》一文仅仅利用了jiaba中的tfidf 与 textrank 进行关键词抽取,最近对以英文为主的新闻评论进行关键词提取时,这两种方法各有各的差:tfidf因为算法的限制,提取到的关键词不是很让人满意;jieba里面的textrank输出的是只针对中文语料的结果,对纯英文输入返回空值,根据源码猜测原因,可能是在处理时加入分词,将英文过滤掉了?(有待考究)。因此重新对“关键词提取”进行了有关论文的阅读,Python中新的模块——rake的应用以及主题模型的尝试。

一、理论梳理

文档的关键词集合应该具备完备性、确定性、独立性,即关键词的全体能够覆盖文档的主题信息,每个关键词应能表达准确的额意义,同时关键词间应具有一定的差异性。

(参考自基于文档主题结构的关键词抽取方法研究

利用文档内部信息或外部信息进行关键词抽取的方式:

  1. 基于文档内部信息,利用文档的词聚类算法构建文档主题,进行关键词抽取。该方法仅利用文档内部信息,通过度量文档中词与词之间的相似度,利用聚类的方法构建文档主题,并根据不同主题在文档中的重要性进行关键词抽取。
  2. 基于文档外部结构,利用隐含主题模型构建文档主题,进行关键词抽取。针对基于文档内部信息通过聚类算法进行关键词抽取受限于文档主题提供信息不足的缺点,利用隐含主题模型构建文档主题,进行关键词抽取。
  3. 综合利用隐含主题模型和文档结构信息进行关键词抽取。

基于词聚类的关键词抽取主要包括以下步骤:

  1. 候选词选取。首先,需要将停用词去掉,为关键词抽取选取合适的候选词。
  2. 计算候选词之间的语义相似度。
  3. 根据语义相似度对候选词进行聚类。
  4. 选取每个聚类中心词,在文档中选取合适的关键词。

具体方式举例:

TFIDF根据每个词在文档中的TFIDF值来计算其重要性;
TexkRank基于图的方法;

LDA则是根据文档和单词的主题分布相似度来计算单词的重要性。

无监督的抽取方法又可细化为:

  • 基于统计:统计词频,位置等信息,计算句子权值,选取权值高的句子作为文摘
  • 基于图模型:构建拓扑结构图,textrank、lexrank
  • 基于潜在语义:使用主题模型,挖掘词句隐藏信息
  • 基于整数规划:将文摘问题转为整数规划问题,求全局最优解

微博 关键词抽取流程由以下几步组成:

  1. 根据输入查询通过新浪API获取微博集合;
  2. 利用中文分词系统对微博进行分词;
  3. 利用微博权重分析系统和单词权重分析系统计算微博中每个词的权重;
  4. 采用第5章的方法,利用翻译概率模型产生微博集合的关键词列表;
  5. 利用可视化系统将关键词列表进行可视化,并输出为关键词可视化图片呈现 给用户。

二、RAKE

Python实现:Github: python-rake

NLP keyword extraction tutorial with RAKE and Maui

论文Automatic Keyword Extraction from Individual Documents 

其中介绍了RAKE在准确率和效率方面均优于textrank

import RAKE

result =''' '''
Rake = RAKE.Rake(RAKE.SmartStopList())
keywords = Rake.run(result)
print(keywords)

结果比较惊艳,主要以短语的输出为主。

三、基于隐含主题模型构建主题的方法

LDA:Latent Dirichlet allocation

一种基于LDA模型的关键词抽取方法

四、其他

基于HMM的加权Textrank单文档的关键词抽取算法

猜你喜欢

转载自blog.csdn.net/sinat_36972314/article/details/79747292