自动摘要算法

自动摘要算法_第1张图片

当时yahoo以3000万美元的价格收购了summly的消息传出来之后,貌似大家都比变的对自动摘要产生了极大的兴趣,关于自导摘要 wiki这里有很详细的介绍,一般自动摘要比较常用的一个是摘取文章中的关键词,另一个则是摘取文章中的关键的句子,在这里我主要是介绍用textrank算法来搞句子的摘取。

相对于textrank,摘取关键句子还有一些比较简单的算法,比如 这篇,我们可以把句子分别和整篇文章做比较,相似性最大的就是关键的句子。而textrank其实就是pagerank算法扩展到句子上,来的到一些全局的信息。textrank的论文在 这里。

首先我们看pagerank算法,就是google用的那个网页排序的pagerank算法,首先网页之间都是有超链接链接的,如果某个网站A有指向B的超链接,说明A网站认为B网站是有价值的,于是相应的我们可以给B来提升权重,但是就像现实中,一般人的意见和专家的意见的权重是不一样的,所以如果网站A的权重比较高,那么就可以贡献更多的权重给B,反之则贡献更少的权重,然后算法经过一轮轮的迭代,所有结点的权重会收敛,就得到了最终的权重了。然后我们有pagerank的计算公式,其中d是阻尼系数。

\(score(V_i)=(1-d)+d*\sum{\frac{1}{|out(V_j)|}*score(V_j)}\)

换到textrank,对于pagerank而言,边是没有权值的,而textrank的边是有权值的,表示两个句子的相似性,这个权值可以用Jaccard similarity coefficient就是交集数目除以并集数目,或者cosine的余弦夹角,或者是bm25一类的算法。在边有了权值之后,textrank的公式变为这个样子。

\(score(V_i)=(1-d)+d*\sum{\frac{weight(j,i)}{\sum{weight(j,k)}}*score(V_j)}\)

论文里显示带了权重之后收敛会慢一些,在经过若干轮的迭代之后,我们就可以得到每个句子的权重了,然后我们取出权重最大的几个就认为是文章的关键句子了。

自己实现了一份以bm25为相似性的textrank算法,代码在 github上,具体可以看代码,test.py展示了摘要的提取。同时这个项目实现了一些常用的操作,比如繁体转简体,中文的分词和词性标注等,欢迎试用提pull requests啊!
我猜您可能还会喜欢:

  • 基于用户的协同过滤和皮尔逊相关系数
  • 在线协同编辑的实现
  • wordpress防盗链
  • 利用函数来画任意图形
  • 谈谈SVD和LSA
  • c++智能指针的简单实现
  • 又去北京了喵

你可能感兴趣的:(Algorithm,python,program,NLP,ir)