网上看到一篇文章总结了几个关键词抽取的算法(如何做好文本关键词提取?从达观数据应用的三种算法说起),想到这是一个很重要的课题还是有必要小结一下的,有不足之处大家可以讨论讨论
还有几个比较好的链接供大家参考
大体上关键词抽取算法分三种:有监督(二分类问题,需提供大量标注好的训练数据),半监督(提供少量的有标注的训练数据作为种子数据构建模型),无监督(一些方法自动发现关键词)
有监督的方法需要大量的标注数据,这一点比较耗费人工,所以还是能无监督就无监督
对英语来说可以直接考虑以词语为单位,但是汉语处理还需要先经过分词处理,分词的准确率影响后来的算法准确率,分词的package包括jieba(github上有很多),NLTK,standford的分词器,清华大学,哈尔滨工业大学,中科院计算所都有各自的分词工具等等,不一而足,当然也可以自己尝试使用HMM,CRF等模型自己写一个分词工具
基于统计的关键词抽取
利用文档中的词语统计信息抽取,比如基于词性,词频,逆文本频率等,还可以依据词在文档中出现的位置提取
词性:现在的关键词绝大多数为名词或动名词,因为这些结构有比较大的,不容易产生歧义的信息量,可与其他指标结合
词频:一般来说一个词在文档中出现的次数越多越重要,但是由于一些常用的没有意义的词也会出现多次,所以我们需要一个停用词(stop word)表在统计词频时先过滤掉停用词
词位置:不同的词在不同位置有不同的重要性,对维基百科来说,第一段是总结性内容所以其中的词比较能概括全文,靠后的词会细化某一方面的情况,不太反应整体的情况
TF-IDF:TF-IDF是一个在自然语言处理和信息检索领域常用的一个指标,用来数值化,连续化一个词在一个文档集中的统计特征,为避免分母出现零的情况往往需要做平滑处理
互信息:信息论中的一个概念,表示变量间相互依赖的度量,I(X;Y)
词跨度:词首次出现与最后一次出现的距离
基于复杂网络的关键词抽取
首先要建立文档的语言网络图,然后对图进行分析找到重要的短语或词
有了图模型后就可以使用graph的各种-ness特征对词语的重要性进行排序选择
关于这个内容可以在自动关键词抽取研究综述这篇文章中查找
基于图模型的关键词抽取
PageRank和TextRank:TextRank基于PageRank的思想提出,PageRank认为如果一个网页被链接的次数越多那么这个网页越重要,如果这个网页被一个很重要的网页链接了当然这个网页权值更大,最后经过一系列的证明可以得出多次迭代过后的PR值是一定收敛的,也就是说我们对一个网页有且只有一个PR值,唯一性由PR值计算过程的Markov性保证;TextRank则是取文档中的一个窗口,如果共现则视为有效
基于Topic Model的关键词抽取
LDA主题模型:LDA是用来抽取文档中的主题分布,需要对文档进行LSA(latent semantic analysis),在文章中不论是主题的分布还是单词的分布都满足Drichlet Distribution,对每篇文章假设有多个主题而不是一个,LDA的运算中刚快速使用了EM算法,后来使用效果更好的Gibbs Sampling;候选的关键词与抽取的主题计算相似度并进行排序,得到最终的关键词
July大神有一篇通俗理解LDA主题模型写得十分详细
最后,当然在实际应用中只考虑一种方法是不够的,借鉴集成学习(ensemble learning)的思想,我们可以同时使用多个关键词抽取算法的结果然后进行整合,再选取最合适的关键词