关键词提取技术——无监督方法

文章目录

  • 无监督方法
    • TF-IDF
    • YAKE
    • TextRank
    • CollabRank
    • TopicRank
    • PositionRank
  • 参考

本篇主要是总结一下关键词提取中常用的技术。分两个部分介绍:无监督方法与有监督方法。本篇主要介绍常用的几种无监督方法。

有监督部分,详见 这里

无监督方法

无监督方法主要有:

  • TF-IDF
  • yake (A Text Feature Based Automatic Keyword
    Extraction Method for Single Documents)
  • textrank(TextRank: Bringing Order into Texts)
  • CollabRank(CollabRank: Towards a Collaborative Approach to Single-Document Keyphrase Extraction)
  • topicrank(TopicRank: Graph-Based Topic Ranking for Keyphrase Extraction)
  • positionrank(PositionRank: An Unsupervised Approach to Keyphrase Extraction from Scholarly Documents)

TF-IDF

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:nidj}+1D
其中,分子表示文档的总数(有多少篇文档),分母表示包含词 n i n_i ni的文档的数目。分母加1主要为了防止分母为0的情况。

tf-idf:
t f i d f = t f ∗ i d f tfidf=tf*idf tfidf=tfidf

TF-IDF的算法比较简单,在很多算法包中都有封装,甚至手动实现它也不是难事。

YAKE

YAKE使用了5个特征,分别是:

  • 大写term:大写字母的term(除了每句话的开头单词)的重要程度比那些小写字母的term重要程度要大。
  • 词的位置(Word Position):文本越开头的部分句子的重要程度比后面的句子重要程度要大
  • 词频(Term Frequency): 一个词在文本中出现的频率越大,相对来说越重要,同时为了避免长文本词频越高的问题,会对其进行归一化。
  • 上下文关系(Term Related to Context):一个词与越多不相同的词共现,该词的重要程度越低。
  • 词在句子中出现的频率(Term Different Sentence):一个词在越多句子中出现,相对更重要。

根据这5个特征可以算出最终每个词的分值,得分越小,重要性越大。具体的计算方法可以参见论文,这里列出YAKE提出的5个特征,在日常工作中可以根据实际情况使用。

TextRank

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)=(1d)+d×jin(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张图片
关键词提取技术——无监督方法_第3张图片

CollabRank

其流程如下:
关键词提取技术——无监督方法_第4张图片
(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相似:
在这里插入图片描述
关键词提取技术——无监督方法_第5张图片
在这里插入图片描述

TopicRank

TopicRank的流程如下:
关键词提取技术——无监督方法_第6张图片

  • candidate clustering: 首先获取候选词列表(可以是通过词性根据规则获取等等),主要选取名词短语作为其候选词;然后使用HAC(Hierarchical Agglomerative Clustering)进行聚类(短语中有超过25%重合的单词就考虑为相似短语),得到候选簇。
  • graph-based ranking:根据聚簇后的结果,计算每个簇的边权。
    关键词提取技术——无监督方法_第7张图片
  • 使用类似textrank的方式计算每个簇的重要程度:
    关键词提取技术——无监督方法_第8张图片
  • 对该结果进行排序,选取top k个簇,从每个簇中选择一个最重要的关键短语作为输出,因此共产生top k个关键短语。选取方法是:第一:选择关键短语中最开始出现在文档的那个关键短语;第二:选择频率最高的那个关键短语;第三:选择聚焦的群簇中心的那个关键短语。

PositionRank

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 mijM是节点 ( 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 viV的节点,初始 S S S每个元素值都为 1 ∣ V ∣ \frac{1}{|V|} V1。PageRank在t+1步计算每个节点的分值迭代公式如下:
关键词提取技术——无监督方法_第9张图片
以上,是pagerank的计算公式。PositionRank做的改进就是,增加了一个衰减因子,使得这个随机游走的结果,不会陷于某个环中。此时,公式变成了:
关键词提取技术——无监督方法_第10张图片
Position-Biased PageRank会根据每个词的位置的导数计算权重,若一个词出现在文档多个位置,则分值相加。核心思想是:越在一个文档靠前的位置,权重越大,同时频率出现越高,权重也越大。
假设一个词在文档的位置时第二,第五,第10,则权重分值为:1/2+1/5+1/10=0.8。再进行归一化,则向量 p ~ \tilde p p~的计算公式为:
在这里插入图片描述
最终,positionRank的每个节点的迭代公式如下:
关键词提取技术——无监督方法_第11张图片
候选词生成:

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使用实例

你可能感兴趣的:(NLP,nlp)