关键词提取就是从文本里面把跟这篇文章意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。

除了这些以外,关键词还可以在文本聚类、分类、摘要等领域中有着重要的作用。比如在聚类时将关键词相似的几篇文章看成一个类团可以大大提高K-means聚类的收敛速度。从某天所有新闻中提取出这些新闻的关键词,就可以大致知道那天发生了什么事情。或者将某段时间中几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论些什么话题。

OK,总之关键词就是最能够反映出文本主题或者意思的词语。但是网络上写文章的人不会像写论文那样告诉你本文的关键词是什么,这个时候就需要去用计算机自动去抽取了,算法的好坏直接决定着后续步骤的效果。

关键词提取从方法来说大致有两种:第一种叫做关键词分配,就是有一个给定的关键词库,然后来一篇文章从词库里面找到几个词语作为这篇文章的关键词。另外一种就是关键词抽取,就是来一篇文章,从文章中抽取一些词语作为这篇文章的关键词。目前大多数领域无关的关键词抽取算法(领域无关算法的意思就是无论什么主题或者领域的文本都可以抽关键词的算法)和它对应的库都是基于后者的。从逻辑上说,后者比前着在实际使用中更有意义。

另外,从结果上看关键词抽取也可以分两种。第一种就是仅仅把词语抽取出来,这个非常简单实现也比较多,比如FudanNLP、jieba、SnowNLP。另外一种则是连词和短语一起抽取出来,这个还需要增加短语抽取这一个步骤,这一类的实现包括ICTCLAS、ansj_seg等,可以把类似于“智能手机”、“全面深化改革”、“非公有制经济”这些短语抽取出来。对于聚类或者分类来说,很明显短语比词语更有参考价值。

至于关键词抽取的算法,目前有各种不同的思路。其中争议最大的就是到底需不需要使用外部的知识库。比如《数学之美》中介绍的TF-IDF关键词提取算法就需要保存每个词的IDF值作为外部知识库,复杂的算法则需要保存更多的信息。对于不使用外部知识库的算法,主要是可以实现语言无关以及避免词表中不存在词语所造成的问题。

TF-IDF算法可以参见《数学之美》中的介绍,思路就是TF-IDF可以找到文本中常见但是在别的文本中不常出现词语,这个正好符合关键词的特点。使用这种方法典型的例子可以参见jieba。

初代KEA算法在论文中除了使用TF-IDF外还用到了词语在文章中首次出现的位置,这个根据就是大多数的文章(特别是新闻文本)是总分总的结构,很明显一个词语出现在文章首部和尾部成为关键词的可能性大于只出现在文章中部的词语。对各个词根据在文章首次出现的位置赋予不同的权值,结合TF-IDF以及连续数据离散化方法,这个就是初代KEA算法的核心思想。

除了这些知识外还可以结合一些更加复杂的模型。比如使用LDA模型Sample出文章主题分布时,寻找出跟文章主题向量空间夹角最新的一些词等等。另外也可以使用LDA或者word2vec模型对词聚类,然后找出文本中那些类团的词占多数,关键词就从这些类团中提取等等。

不依赖外部知识库的关键词算法主要根据文本本身的特征去提取。比如说关键词特征之一就是在文本中反复出现且关键词附近出现关键词的概率非常大,因此就有了TextRank算法。它利用类似于PageRank算法,将文本中每个词看成一个页面,认为文本中某一个词语与之周围N个词存在一个link,然后在这个网络中使用PageRank算出每个词语的权值,把权值最高的几个词作为关键词即可。TextRank典型的实现包括FudanNLP和SnowNLP等。

另外ICTCLAS则是从另外的一个思路出发,即一个词如果是关键词那么它反复出现并且左右出现不同的词语的概率非常高。用专业一点的话说就是左右熵比较高,至于什么是左右熵可以去参考一下中文新词发现的论文或者Matrix67的blog

目前关键词抽取的算法的论文越来越复杂,结合的特征也越来越多,因此速度也当然越来越慢。如果是实际中使用还是建议一些简单的算法,如果要写论文拼效果则可以将各种LDA、TextRank或者word2vec等深度学习模型加进去。特征选择的越多,当然效果也就越好了。

参考文献

Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]//Proceedings of EMNLP. 2004, 4(4): 275.

Witten I H, Paynter G W, Frank E, et al. KEA: Practical automatic keyphrase extraction[C]//Proceedings of the fourth ACM conference on Digital libraries. ACM, 1999: 254-255.

Chien L F. PAT-tree-based keyword extraction for Chinese information retrieval[C]//ACM SIGIR Forum. ACM, 1997, 31(SI): 50-58.

Liu Z, Chen X, Zheng Y, et al. Automatic keyphrase extraction by bridging vocabulary gap[C]//Proceedings of the Fifteenth Conference on Computational Natural Language Learning. Association for Computational Linguistics, 2011: 135-144.