1.TF-IDF的关键词抽取
这个比较熟悉,根据他的全名可以大概猜出:term frequency-inverse document frequency,直接上公式了: 词频(TF): 逆文档频率(IDF): 然后:
从公式看到得到,tf-idf描绘了一个词语在所属文档或句子的独有程度。
优缺点:
- 不够准确,对于一些很少见的词,比如整个语料字典里只出现了一次的一个词,往往IDF会很高,这时TF-IDF得分会比较高,这是不合理的。
2.TextRank的关键词抽取
这个也是比较经典的算法,它的灵感来自与谷歌的PageRank算法。上面的TF-IDF这种算法是基于词频的统计方法,只是对单个“词”进行统计。而TextRank是面向文本的关键词的提取方法,仅仅利用单文档的信息就可以完成关键词抽取和信息摘要的任务。
1.PageRank算法
其中:
- :表示网页的重要度(权重)
- :阻尼系数,通常取0.85
- :所有能跳转到网页的页面集,入读。
- :网页能够跳转到的页面,出读。
会初始化所有的值,然后通过上述公式一直迭代,满足某个条件(比如上次迭代结果与本次迭代结果小于某个误差)或者达到最大迭代次数停止。
2.TextRank算法
TextRank算法公式比PageRank公式多了一个权重。
TextRank算法是利用局部词汇之间关系(共现窗口,窗口大小为k)对后续关键词进行排序,直接从文本本身抽取。算法步骤如下:
- 把给定的文本按照完整句子进行分割,即
- 对于中的每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中是保留后的候选关键词。
- 构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用***共现关系(co-occurrence)***构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。
- 根据上面公式,迭代传播各节点的权重,直至收敛。
- 对节点权重进行倒序排序,从而得到最重要的top-k个单词,作为候选关键词。
- 由(5)得到最重要的top-k个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。例如,文本中有句子“Matlab code for plotting ambiguity function”,如果“Matlab”和“code”均属于候选关键词,则组合成“Matlab code”加入关键词序列。
3.TextRank算法在文本摘要中的用法
就是在句子级别执行上述算法,其中结点之间权重用句子相似度表示,同时与关键词抽取不同,关键词判断两个结点之间是不是有边,是通过共现关系(co-occurrence),而进行句子抽取,是通过看相似度是不是大于一个阈值。
4.优缺点
- 需要迭代,计算速度慢
3.LDA主题模型的关键词抽取
- 获取候选关键词
- 大规模语料学习主题模型
- 计算文章主题分布
- 排序,选取top_k
优缺点
- LDA在短文本上表现不好。
4.Word2Vec词聚类
5.信息增益(熵)
首先我们需要明确一点,一个词之所以能称为关键词,原因就在于这个词左右能搭配的词很丰富,于是我们可以定义一个词的信息熵:
其中w表示该词,p表示该词左边/右边出现的不同token的数目。
比如在一个文档中,"ABC"出现3次,"DBC"出现5次。 则B的左熵:-3/8log(3/8) - 5/8log(5/8) 右熵:-8/8log(8/8) = 0
对所有的词计算左右信息熵,如果某个词的左右信息熵都很大,那这个词就很可能是关键词。
最后考虑一种特殊情况,如果某个词左侧的信息熵很大,右侧信息熵很小,而他右侧的词左侧信息熵很小,右侧信息熵很大。形象描述为 X B C Y,B与C经常一同出现,但是X和Y经常变化,于是可以把B和C组合起来当成一个关键词,我们常常见到“智能手机”作为一个关键词出现就是这个道理。这也涉及到NLP中另一个很有意思的研究方向-新词发现。
6.互信息
互信息体现了两个变量之间的相互依赖程度。二元互信息是指两个事件同时发生的概率函数:
互信息值越高, 表明X和Y相关性越高, 则X和Y 组成短语的可能性越大; 反之, 互信息值越低,X 和Y之间相关性越低, 则X 和Y之间存在短语边界的可能性越大。