来源:《Python自然语言处理实战:核心技术与算法》
1.TF-IDF
TF-IDF从词频、逆文档频次两个角度对词的重要性进行衡量,可以根据tf-idf值由大到小排序取前n个作为关键词。
传统的TF-IDF算法中,仅考虑了词的两个统计信息(出现频次、在多少个文档出现),因此,其对文本的信息利用程度显然也是很少的。
除了上面的信息外,在一个文本中还有许多信息能对关键词的提取起到很好的指导作用,例如每个词的词性、出现的位置等。在某些特定的场景中,如在传统的TF-IDF基础上,加上这些辅助信息,能对关键词提取的效果起到很好的提高作用:
在文本中,名词作为一种定义现实实体的词,带有更多的关键信息,如在关键词提取过程中,对名词赋予更高的权重,能使提取出来的关键词更合理。
此外,在某些场景中,文本的起始段落和末尾段落比起其他部分的文本更重要,如对出现在这些位置的词赋予更高的权重,也能提高关键词的提取效果。
算法本身的定义是死的,但是结合我们的应用场景,对算法进行合适的重塑及改造,使之更适应对应场景的应用环境,无疑能对我们想要得到的结果起到更好的指导作用。
2.TextRank
TextRank算法,基本思想来源于Google的PageRank算法,最早用于文档的自动摘要,基于句子维度的分析,利用TextRank对每个句子进行打分,挑选出分数最高的n个句子作为文档的关键句,以达到自动摘要的效果。
TextRank算法,可以脱离语料库的背景,仅对单篇文档进行分析就可以提取该文档的关键词,即TextRank可以不用训练,直接根据单个文档就可以对关键词进行提取。这也是TextRank算法的一个重要特点。其他算法的关键词提取都要基于一个现成的语料库,如:
在TF-IDF中,需要统计每个词在语料库中的多少个文档有出现过,也就是逆文档频率;
主题模型的关键词提取算法,则是要通过对大规模文档的学习,来发现文档的隐含主题。
3. 主题模型
一般来说,TF-IDF算法和TextRank算法就能满足大部分关键词提取的任务。但是在某些场景,基于文档本身的关键词提取还不是非常足够,有些关键词并不一定会显式地出现在文档当中,如一篇讲动物生存环境的科普文,通篇介绍了狮子老虎鳄鱼等各种动物的情况,但是文中并没有显式地出现动物二字,这种情况下,前面的两种算法显然不能提取出动物这个隐含的主题信息,这时候就需要用到主题模型。
前面两种模型缺点:是直接根据词与文档的关系,对关键词进行抽取。这两种方法仅用到了文本中的统计信息,对文本中丰富的信息无法充分地进行利用,尤其是其中的语义信息,对文本关键词的抽取显然是一种非常有用的信息。
主题模型:与前面两种模型不同的是,主题模型认为在词与文档之间没有直接的联系,它们应当还有一个维度将它们串联起来,主题模型将这个维度称为主题。每个文档都应该对应着一个或多个的主题,而每个主题都会有对应的词分布,通过主题,就可以得到每个文档的词分布。
3.1 LSA/pLSA
相较于传统SVM模型(Space Vector Model,空间向量模型)对语义信息利用的缺乏,LSA通过SVD(奇异值分解)将词、文档映射到一个低维的语义空间,挖掘出词、文档的浅层语义信息,从而对词、文档进行更本质地表达。这也反映了LSA的优点,可以映射到低维的空间,并在有限利用文本语义信息的同时,大大降低计算的代价,提高分析质量。
LSA是通过SVD这一暴力的方法,简单直接地求解出近似的word-topic-document分布信息。但是其作为一个初级的主题模型,仍然存在着许多的不足。其中主要的缺点是:
1. SVD的计算复杂度非常高,特征空间维度较大的,计算效率十分低下。
2. 另外,LSA得到的分布信息是基于已有数据集的,当一个新的文档进入到已有的特征空间时,需要对整个空间重新训练,以得到加入新文档后对应的分布信息。
3. 除此之外,LSA还存在着对词的频率分布不敏感、物理解释性薄弱等问题。
为了解决这些问题,学者们在LSA的基础上进行了改进,提出了pLSA算法,通过使用EM算法对分布信息进行拟合替代了使用SVD进行暴力破解,从一定程度上解决了LSA的部分缺陷,但是LSA仍有较多不足。通过不断探索,学者们又在pLSA的基础上,引入了贝叶斯模型,实现了现在topic model的主流方法——LDA(LatentDirichlet Allocation,隐含狄利克雷分布)。
3.2 LDA