关键词抽取

524 阅读4分钟

1.TF-IDF的关键词抽取

这个比较熟悉,根据他的全名可以大概猜出:term frequency-inverse document frequency,直接上公式了: 词频(TF): TFw,D=词语w在文档D中的个数文档D中词的总数TF_{w,D} = \frac{词语w在文档D中的个数}{文档D中词的总数} 逆文档频率(IDF): IDFw=log(语料中文档总数包含词语w的文档数量)IDF_{w} = log(\frac{语料中文档总数}{包含词语w的文档数量}) 然后: TFIDF=TFIDFTF-IDF = TF * IDF

从公式看到得到,tf-idf描绘了一个词语在所属文档或句子的独有程度。

优缺点:

  1. 不够准确,对于一些很少见的词,比如整个语料字典里只出现了一次的一个词,往往IDF会很高,这时TF-IDF得分会比较高,这是不合理的。

2.TextRank的关键词抽取

这个也是比较经典的算法,它的灵感来自与谷歌的PageRank算法。上面的TF-IDF这种算法是基于词频的统计方法,只是对单个“词”进行统计。而TextRank是面向文本的关键词的提取方法,仅仅利用单文档的信息就可以完成关键词抽取和信息摘要的任务。

1.PageRank算法

image_1e6vvib8i1k511snmac716q1f8om.png-10.7kB 其中:

  • S(Vi)S(V_i):表示网页ViV_i的重要度(权重)
  • dd:阻尼系数,通常取0.85
  • In(Vi)In(V_i):所有能跳转到网页ViV_i的页面集,入读。
  • Out(Vj)Out(V_j):网页ViV_i能够跳转到的页面,出读。

会初始化所有S(Vi)S(V_i)的值,然后通过上述公式一直迭代,满足某个条件(比如上次迭代结果与本次迭代结果小于某个误差)或者达到最大迭代次数停止。

参考1

2.TextRank算法

image_1e701cekhrmo1i3om3s93f6ga13.png-13.1kB TextRank算法公式比PageRank公式多了一个权重wjiw_{ji}

TextRank算法是利用局部词汇之间关系(共现窗口,窗口大小为k)对后续关键词进行排序,直接从文本本身抽取。算法步骤如下:

  1. 把给定的文本TT按照完整句子进行分割,即 T=[S1,S2,...,Sn]T=[S_1, S_2,...,S_n]
  2. 对于TT中的每个句子SS,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中是保留后的候选关键词。
  3. 构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用***共现关系(co-occurrence)***构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。
  4. 根据上面公式,迭代传播各节点的权重,直至收敛。
  5. 对节点权重进行倒序排序,从而得到最重要的top-k个单词,作为候选关键词。
  6. 由(5)得到最重要的top-k个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。例如,文本中有句子“Matlab code for plotting ambiguity function”,如果“Matlab”和“code”均属于候选关键词,则组合成“Matlab code”加入关键词序列。

3.TextRank算法在文本摘要中的用法

就是在句子级别执行上述算法,其中结点之间权重wjiw_{ji}用句子相似度similarity(si,sj)similarity(s_i,s_j)表示,同时与关键词抽取不同,关键词判断两个结点之间是不是有边,是通过共现关系(co-occurrence),而进行句子抽取,是通过看相似度similarity(si,sj)similarity(s_i,s_j)是不是大于一个阈值。

4.优缺点

  1. 需要迭代,计算速度慢

3.LDA主题模型的关键词抽取

  1. 获取候选关键词
  2. 大规模语料学习主题模型
  3. 计算文章主题分布
  4. 排序,选取top_k

优缺点

  1. LDA在短文本上表现不好。

4.Word2Vec词聚类

5.信息增益(熵)

首先我们需要明确一点,一个词之所以能称为关键词,原因就在于这个词左右能搭配的词很丰富,于是我们可以定义一个词的信息熵: H(w)=plogpH(w) = -\sum{p\log{p}}

其中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.互信息

image_1e70a3v3517q21sjm1p7h1jlgbks1g.png-7.1kB

互信息体现了两个变量之间的相互依赖程度。二元互信息是指两个事件同时发生的概率函数:

互信息值越高, 表明X和Y相关性越高, 则X和Y 组成短语的可能性越大; 反之, 互信息值越低,X 和Y之间相关性越低, 则X 和Y之间存在短语边界的可能性越大。

7.卡方检验

8.基于树模型