NLP系列-关键词抽取技术(一)-技术原理篇

一、背景介绍

  关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来,在文献检索、自动文摘、文本聚类和文本分类等方面有着重要的应用。

  关键词提取算法一般分为有监督和无监督两类:

  • 有监督:有监督的关键词提取方法主要是通过分类的方式进行,通过构建一个较为丰富和完善的词表,然后判断每个文档与词表中每个词的匹配程度,以类似打标签的方式,达到关键词提取的效果。优点是精度较高,缺点是需要大批量的标注数据,人工成本过高,并且词表需要及时维护。

  • 无监督:相比较而言,无监督的方法对数据的要求低,既不需要一张人工生成且需要持续维护的词表,也不需要人工标注语料辅助训练。目前比较常用的关键词提取算法都是基于无监督算法。如TF-IDF算法,TextRank算法和主题模型算法(包括LSA,LSI,LDA等)。

二、TF-IDF算法简介

  TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。

  TF-IDF是一种统计方法,用以评估一字/词对于一个文件集合或一个语料库中的其中一份文档的重要程度。字/词的重要性随着它在文档中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

  TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。


TF-IDF实例图

图1:TF-IDF实例矩阵
  如图1所示,图示为一个TF-IDF的实例矩阵,该矩阵有10行,即语料库一共有十篇文档,每列表示整个语料库内的某一个词典的字/词,如果谋篇文档中出现了词典中的字/词,那么在实例矩阵中,该位置不为0;若用字/词在该文档中出现的词频来填充,则该实例矩阵为TF矩阵,又称为词频矩阵。当使用逆文档率乘以对应的词频矩阵即可得到如图1所示的TF-IDF矩阵。

2.1 TF-词频(Term Frequency)

  词频(TF)表示字/词(关键字)在文档中出现的频率。

  这个数字通常会被归一化(一般是词频除以文档总词数), 以防止它偏向长的文档。

  

  其中是该字/词在文档中出现的次数,分母则是文档中所有字/词出现的次数总和;

2.2 IDF-逆向文件频率(Inverse Document Frequency)

  逆向文档频率 (IDF) :某一特定字/词的IDF,可以由总文档数目除以包含该词语的文件的数目,再将得到的商取对数得到。

  如果包含字/词w的文档越少, IDF越大,则说明字/词具有很好的类别区分能力。

  

  其中,|D|是语料库中的文件总数。表示包含词语的文档数目(即 的文档数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 拉普拉斯平滑化处理
即:

  ,其中分母加1是为了避免分母为0

2.3 TF-IDF 实际为TF*IDF

  某一特定文件内的高词语频率,以及该词语字/词在整个文档集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的字/词,保留重要的字/词。

  

  注: TF-IDF算法非常容易理解,并且很容易实现,但是其简单结构并没有考虑字/词的语义信息,无法处理一词多义与一义多词的情况。

2.4 TF-IDF 应用

  • 搜索引擎;
  • 关键词提取;
  • 文本相似性;
  • 文本摘要;

2.5 TF-IDF算法的不足

  TF-IDF 采用文档逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映字/词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文档集合已经分类的情况下。

  在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文档频率小的字/词就越重要,文本频率大的字/词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 十分有效地反映单词字/词的重要程度和特征词的分布情 况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被覆盖掉。

  不足之处:

  • 没有考虑特征词的位置因素对文本的区分度,字/词出现在文档的不同位置时,对区分度的贡献大小是不一样的。
  • 按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
  • 传统TF-IDF中的IDF部分只考虑了特征词与它出现的文档数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
  • 对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

2.6 TF-IDF算法改进:TF-IWF算法

  摘要:在 TF-IDF 算法基础上,提出新的基于词频统计的关键词提取方法。利用段落标注技术,对处于不同位置的词语给予不同的位置权重,对分词结果中词频较高的同词性词语进行词语相似度计算,合并相似度较高的词语,通过词语逆频率 TF-IWF 算法,按权值排序得到关键词。这种改进算法解决了传统中文关键词提取方法中对相似度高的词的不重视而导致关键词提取精度不高的问题。实验结果表明,改进的算法结果在准确率和召回率上较原有的 TF-IDF 算法上都得到较好的提升,使得提取的关键词集合能较好体现文本内容。

  详细看论文:改进的 TF-IDF 关键词提取方法

三、TextRank算法简介

3.1 PageRank算法

  PageRank算法通过计算网页链接的数量和质量来粗略估计网页的重要性,算法创立之初即应用在谷歌的搜索引擎中,对网页进行排名。

  PageRank算法的核心思想如下:

  • 链接数量:如果一个网页被越多的其他网页链接,说明这个网页越重要,即该网页的PR值(PageRank值)会相对较高;
  • 链接质量:如果一个网页被一个越高权值的网页链接,也能表明这个网页越重要,即一个PR值很高的网页链接到一个其他网页,那么被链接到的网页的PR值会相应地因此而提高。

      PageRank算法计算公式:

  

  其中,是网页i的重要性(PR值),d是阻尼系数,一般为0.85,是整个互联网中所存在的有指向网页i的链接的网页集合,是网页j中存在的指向所有外部网页的链接的集合,是该集合中元素的个数。

  详细看论文:The PageRank Citation Ranking: Bringing Order to the Web

3.2 TextRank算法

  TextRank算法是一种基于图的用于关键词抽取和文档摘要的排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它利用一篇文档内部的字/词间的共现信息(语义)便可以抽取关键词,它能够从一个给定的文档中抽取出该文档的关键词、关键词组,并使用抽取式的自动文摘方法抽取出该文本的关键句。

  TextRank算法的基本思想是将文档看作一个词的网络,该网络中的链接表示词与词之间的语义关系,图2所示为文档内句子与句子之间的共现关系,词与词之间的共现关系类似,只是将图G的范围由文档改成了句子。


textrank文章内句子间的共现关系

图2:TextRank文档内句子之间的贡献关系

  TextRank算法计算公式:

  

  其中,是句子i的权重,右侧的求和表示每个相邻句子对本句子的贡献程度,在单文档中,我们可以粗略的人为所有的句子都是相邻的,不需要像多文档一样进行多个窗口的生成和抽取,仅需单一文档窗口即可,表示两个句子的相似度代表上次迭代出来的句子j的权重。d是阻尼系数,一般为0.85。

  详细看论文:TextRank: Bringing Order into Texts

3.3 主要算法

3.3.1 关键词抽取(keyword extraction)

  关键词抽取是指从文档中确定一些能够描述文档含义的术语的过程。对关键词抽取而言,用于构建顶点集的文本单元可以是句子中的一个或多个字;根据这些字之间的关系(比如:在一个框中同时出现)构建边。根据任务的需要,可以使用语法过滤器(syntactic filters)对顶点集进行优化。语法过滤器的主要作用是将某一类或者某几类词性的字(比如只保留名词)过滤出来作为顶点集。

3.3.2 关键短语抽取(keyphrase extration)

  关键词抽取结束后,我们可以得到的N个关键词,在原始文本中相邻的关键词构成关键短语。因此,从get_keyphrases函数的源码中我们可以看到,它先调用get_keywords抽取关键词,然后分析关键词是否存在相邻的情况,最后确定哪些是关键短语。

3.3.3 关键句抽取(sentence extraction)

  句子抽取任务主要针对的是自动摘要这个场景,将每一个sentence作为一个顶点,根据两个句子之间的内容重复程度来计算他们之间的“相似度”,以这个相似度作为联系,由于不同句子之间相似度大小不一致,在这个场景下构建的是以相似度大小作为edge权重的有权图。

3.4 PageRank算法与TextRank算法的区别

  • PageRank算法根据网页之间的链接关系构造网络,TextRank算法根据词之间的共现关系构造网络;
  • PageRank算法构造的网络中的边是有向无权边,TextRank算法构造的网络中的边是无向有权边。

四、LDA算法简介

4.1 基础知识

  给包含N篇文档的定语料库,其中为第i篇文档,包含个单词。语料库的所有单词来自于词汇表,其中V表示词汇表的大小,第 j个单词为。

  注意:文档中的单词标记为,它表示文档中第j个位置的单词为。如:文档中第1个位置的单词为(假设 ),则文档中第一个位置的单词为 我 。因此这里将w来表示文档中的单词(也称作 token ),用v表示词表中的单词。

  BOW:bag of words: 单词在文档中不考虑顺序,这称为词袋模型。

4.2 共轭先验、共轭分布的概念

  概率论中两大学派:频率派和贝叶斯学派。而我们口中所诉说的先验概率,后验概率,共轭分布和共轭先验是贝叶斯学派中的几个概念。原因是贝叶斯学派认为分布存在先验分布和后验分布的不同,而频率学派则认为一个事件的概率只有一个。

  (1)共轭分布:后验概率分布函数与先验概率分布函数具有相同的形式;

  (2)共轭先验:可以使得先验分布和后验分布的形式相同,一方面这符合人的直觉(它们应该是相同形式的)另外一方面是可以形成一个先验链,即现在的后验分布可以作为下一次计算的先验分布,如果形式相同,就可以形成一个链条。

  为了使得先验分布和后验分布的形式相同,我们定义:如果先验分布和似然函数可以使得先验分布和后验分布具有相同的形式,那么就称先验分布与似然函数是共轭的。所以,共轭是指的先验分布和似然函数。如果某个随机变量的后验概率和先验概率属于同一个分布簇的,那么称和为共轭分布,同时,也称为似然函数的共轭先验。

4.3 参数估计:

  (1) 离散型随机变量分布:二项式分布,多项式分布等;

  (2) 连续型随机变量分布:正态分布。

  他们都可以看作是参数分布,因为他们的函数形式都被一小部分的参数控制,比如正态分布的均值和方差,二项分布事件发生的概率等。因此,给定一堆观测数据集(假定数据满足独立同分布),我们需要有一个解决方案来确定这些参数值的大小,以便能够利用分布模型来做密度估计。这就是参数估计。

  从两个学派角度考虑参数估计:

  (1) 频率学派:通过某些优化准则(比如似然函数)来选择特定参数值;

  (2) 贝叶斯学派:假定参数服从一个先验分布,通过观测到的数据,使用贝叶斯理论计算对应的后验分布。
先验和后验的选择满足共轭,这些分布都是指数簇分布。它们之间的关系可以通过贝叶斯公式进行连接:

  。

4.4 多项式分布与狄利克雷分布

  Gamma函数:gamma函数其实就是阶乘的函数,比如,这个阶乘形式可以更加一般化,不限于整数。而更一般的函数形式就是gamma函数:

  

  

  

  

  

  二项分布与Beta分布

  (1)二项分布其中p为成功的概率,记作

        

  (2)Beta分布,一组定义在区间(0,1)的连续概率分布,有两个参数和,且。它是一个作为伯努利分布与二项分布的共轭先验分布的密度函数。Beta分布的概率密度函数:

        

  记作,其中分母函数为B函数,B函数是一个标准化函数,它只是为了使得这个分布的概率密度积分等于1。

  B函数与Gamma函数的关系:

        

  Beta分布的期望可以用公式来估计:

  二项分布代入似然函数:

        

  Beta分布代入先验分布:

        

  则根据贝叶斯公式:

    

    

    

    

  最后我们发现这个贝叶斯估计服从分布的,我们只要用B函数将他标准化得到我们的后验概率:

  不妨令;

  则有;

  将这个形式推广到多项式分布和Dirichlet分布:

  狄利克雷分布是多项分布的共轭分布,也就是它与多项式分布具有相同形式的分布函数。多项式分布是二项分布的推广,在n次独立试验中每次只输出k种结果中的一个,且每种结果都有一个确定的概率p。

  三项多项式与三维狄利克雷分布

  三维多项式表达

  ;

  ;

  

  三维狄利克雷分布

  

  

  

  

  多项式表达和多维Dirichelet分布

  多项式表达

  ;

  ;

  

  多维Dirichelet分布:

  

  

  

  

  

  多项式代入似然函数:

  

  Dirichlet分布代入先验分布:

  

  则后验概率:

  

  至此,LDA主题模型的概率可以表示为一个概率链,通相应的参数估计求解方法,例如EM迭代算法求解出估计参数。

  则LDA主题模型的概率表示:

  

  P(词语|文档)可以通过观察数据集求得。那么右边的两个概率分布如何求得?将这两个分布看作上帝的游戏:上帝为了创造一篇文档,先用一个有M个面的骰子做实验,M个面代表M个主题,每做一次投骰子试验,就可以得到M个主题中的一个,进行多次投掷,就可以得到一篇文档的多个主题,可以看到这个试验描述的分布就是多项式分布。同样某个主题下有多个词语,某个主题骰子有N个面,每个面表示一个词语(即词袋),每做一次投骰子实验,就可得到N个词种的一个,进行多次投掷,就可以得到一个主题下多个词语,同样可以看出这个试验也服从多项式分布。我们可以将他们的先验都取Dirichlet分布。

  如图3所示,从文档集合中抽取出四类主题,每类主题下有对应主题的主题词,而每篇文档都或多或少的会使用这些主题对应的主题词来构建文档,而这些主题词就是文档的关键词。


LDA主题模型实例

图3:LDA主题模型实例

你可能感兴趣的:(NLP系列-关键词抽取技术(一)-技术原理篇)