【实验目的】
能根据目标对任意给定的一篇文章进行自动摘要生成。
【实验原理】
TextRank
TextRank算法是一种文本排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它能够从一个给定的文本中提取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法提取出该文本的关键句。
TextRank算法过程
TextRank算法的核心公式如下,其中\omega_{\text{ji}}
用于表示两个节点之间的边连接具有不同的重要程度:
TextRank算法提取关键词和关键词组的具体步骤如下:
1)将给定的文本按照整句进行分割,即T=\lbrack S_{1},S_{2},\ldots,S_{m}\rbrack
;
2)对于每个句子S_{i} \in T
,对其进行分词和词性标注,然后剔除停用词,只保留指定词性的词,如名词、动词、形容词等,即S_{i} = \lbrack t_{i,1},t_{i,2},\ldots,t_{i,n}\rbrack
,其中t_{i,j}
为句子i中保留下的词;
3)构建词图G = (V,E)
,其中V为节点集合,由以上步骤生成的词组成,然后采用共现关系构造任意两个节点之间的边:两个节点之间存在边仅当它们对应的词在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词,一般K取2;
4)根据上面的公式,迭代计算各节点的权重,直至收敛;
5)对节点的权重进行倒序排序,从中得到最重要的t个单词,作为top-t关键词;
6)对于得到的top-t关键词,在原始文本中进行标记,若它们之间形成了相邻词组,则作为关键词组提取出来。
从给定文本中提取关键句时,将文本中的每个句子分别看作一个节点,如果两个句子有相似性,则认为这两个句子对应的节点之间存在一条无向有权边,衡量句子之间相似性的公式如下:
S_{i},S_{j}
为两个句子,w_{k}
为句子中的词。
分子部分的意思是同时出现在两个句子中的同一个词的数量,分母是对句子中词的个数求对数后求和,这样设计可以遏制较长的句子在相似度计算上的优势。
根据以上相似度计算公式循环计算任意两个节点之间的相似度,设置阈值去掉两个节点之间相似度较低的边连接,构建出节点连接图,然后迭代计算每个节点的TextRank值,排序后选出TextRank值最高的几个节点对应的句子作为关键句。
【实验操作】
-
使用Python语言,基于TextRank算法编程实现,设置算法参数中的窗口大小k=4。
-
对《包信和校长在中国科大建校60周年纪念大会上的讲话》进行分析,提取出关键词、关键短语、摘要。
输出如图:
【结果分析】
可以看出,TextRank自动摘要效果看起来非常不错。
TextRank能有这么好的效果,主要是因为图排序模型是基于全局信息来计算每个顶点的重要性,而不是仅仅使用局部信息。
【参考文献】
[1] Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.
[2] 包信和校长在中国科大建校60周年纪念大会上的讲话,
科大-历史文化网, 2018.9.27
留言