本篇主要是总结一下关键词提取中常用的技术。分两个部分介绍:无监督方法与有监督方法。本篇主要介绍常用的几种无监督方法。
有监督部分,详见 这里
无监督方法主要有:
TF-IDF的思想是如果在一个文档中某个词出现的频率高,但是在其他文档中出现的频率较少,说明该词具有较好的区分能力,可以作为关键词。
tf(term frequency, 词频):
t f i , j = n i , j ∑ k n k , j tf_{i,j}=\frac{n_{i,j}}{\sum_k n_{k,j}} tfi,j=∑knk,jni,j
其中, n i , j n_{i,j} ni,j表示在 d j d_j dj文档中,词 i i i出现的次数, ∑ k n k , j \sum_k n_{k,j} ∑knk,j表示文档 d j d_j dj中词的总数。
idf(inverse document frequency,逆文档频率):
i d f i = l o g ∣ D ∣ ∣ { j : n i ∈ d j } ∣ + 1 idf_i = log \frac{|D|}{|\{j:n_i\in d_j\}|+1} idfi=log∣{ j:ni∈dj}∣+1∣D∣
其中,分子表示文档的总数(有多少篇文档),分母表示包含词 n i n_i ni的文档的数目。分母加1主要为了防止分母为0的情况。
tf-idf:
t f i d f = t f ∗ i d f tfidf=tf*idf tfidf=tf∗idf
TF-IDF的算法比较简单,在很多算法包中都有封装,甚至手动实现它也不是难事。
YAKE使用了5个特征,分别是:
根据这5个特征可以算出最终每个词的分值,得分越小,重要性越大。具体的计算方法可以参见论文,这里列出YAKE提出的5个特征,在日常工作中可以根据实际情况使用。
TextRank算法是一种基于图的用于关键词抽取和文档摘要的排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它利用一篇文档内部的词语间的共现信息(语义)便可以抽取关键词,它能够从一个给定的文本中抽取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法抽取出该文本的关键句。
pagerank:
(1)链接数量:如果一个网页被越多的其他网页链接,说明这个网页越重要,即该网页的PR值(PageRank值)会相对较高;
(2)链接质量:如果一个网页被一个越高权值的网页链接,也能表明这个网页越重要,即一个PR值很高的网页链接到一个其他网页,那么被链接到的网页的PR值会相应地因此而提高。
其计算公式如下:
s ( v i ) = ( 1 − d ) + d × ∑ j ∈ i n ( v i ) 1 ∣ o u t ( v j ) ∣ s ( v j ) s(v_i)=(1-d)+d\times \sum_{j\in in(v_i)} \frac{1}{|out(v_j)|} s(v_j) s(vi)=(1−d)+d×j∈in(vi)∑∣out(vj)∣1s(vj)
s ( v ) s(v) s(v)表示网页的重要性,即pr值,d是阻尼系数,一般是0.85, i n ( v ) in(v) in(v)是网页的入度,表示对所有指向该网页的网页; o u t ( v ) out(v) out(v)表示网页的出度, 1 ∣ o u t ( v j ) ∣ s ( v j ) \frac{1}{|out(v_j)|} s(v_j) ∣out(vj)∣1s(vj)说明,传入 v i v_i vi的pr值,被所有的出度分摊。
同样的,我们可以写出textrank的公式:
与pagerank不同的是,pagerank之间的边是有向无权边,而textrank之间的边是无向有权边。 ω j i \omega_{ji} ωji即表示边权。
那么,如何从文本中构建图呢?如何设计边,计算边权呢?接下来,我们根据textrank4zh包来大致解析一下textrank算法的实现原理。textrank4zh是针对中文文本的TextRank算法的实现,其源码地址为:https://github.com/someus/TextRank4ZH
textrank4zh的实现
(1)对于给定的document,分句、分词。其中,分词使用的是jieba,关于更多分词的细节,请详见:结巴分词原理。
(2)设定窗口(Window,default=2),如果两个词在均在该窗口中,则这两个词存在边。通过这种方法构建词图。
(3)通过构建完的词图,调用pagerank计算其score。
(4)对score排序,得到top N个关键词。
其流程如下:
(1)聚类。在论文中没有给出具体的聚类方案。
(2)Collaborative Keyphrase Extraction:
计算关键词分数的方式与pagerank不同,这里主要是计算cluster所有word的分数总和:
而 W o r d S c o r e c l u s WordScore_{clus} WordScoreclus与pagerank相似:
PositionRank包含三个步骤,分别是:
(1)构建词图;
(2)Position-Biased PageRank的设计;
(3)候选词组的生成。
构建词图(方法与TextRank相同):
对于给定的文档,首先对其进行词性标注,再设定窗口window,如果两个词在一个窗口中,则这两个词之间存在边。通过该方法得到词图: G = ( V , E ) G=(V,E) G=(V,E)
Position-Biased PageRank
假设 G G G是一个按照上述方法构建的无方向图, M M M是它的邻接矩阵, m i j ∈ M m_{ij} \in M mij∈M是节点 ( v i , v j ) (v_i, v_j) (vi,vj)之间的边的权重,若不存在边,则为0。PageRank计算节点 v i v_i vi的分值,是不断迭代计算所有指向 v i v_i vi节点的分值之和。
令 S S S为PageRank分值,对于所有 v i ∈ V v_i \in V vi∈V的节点,初始 S S S每个元素值都为 1 ∣ V ∣ \frac{1}{|V|} ∣V∣1。PageRank在t+1步计算每个节点的分值迭代公式如下:
以上,是pagerank的计算公式。PositionRank做的改进就是,增加了一个衰减因子,使得这个随机游走的结果,不会陷于某个环中。此时,公式变成了:
Position-Biased PageRank会根据每个词的位置的导数计算权重,若一个词出现在文档多个位置,则分值相加。核心思想是:越在一个文档靠前的位置,权重越大,同时频率出现越高,权重也越大。
假设一个词在文档的位置时第二,第五,第10,则权重分值为:1/2+1/5+1/10=0.8。再进行归一化,则向量 p ~ \tilde p p~的计算公式为:
最终,positionRank的每个节点的迭代公式如下:
候选词生成:
We consider noun phrases that match the regular expression (adjective)*(noun)+, of length up to three, (i.e., unigrams, bigrams, and trigrams).
通过上述正则方式提取出来后,再提取出topK的关键词即可。
结巴分词介绍,作者:zhbzz2007
关键词提取(keyword extraction)技术
TextRank
TextRank算法的基本原理及textrank4zh使用实例