输入关键字 抓取所有网页(TextRank的灵感来源于PageRank算法(图)的网页重要度排序)
优采云 发布时间: 2021-10-11 20:37输入关键字 抓取所有网页(TextRank的灵感来源于PageRank算法(图)的网页重要度排序)
TextRank 的灵感来自 PageRank 算法,这是一种用于对网页的重要性进行排名的算法。
此外,该算法也是基于图的。每个网页都可以看作是图中的一个节点。如果网页A可以跳转到网页B,则存在有向边A->B。这样,我们就可以构造一个有向图。
然后,使用公式:
经过多次迭代,可以得到每个网页对应的权重。下面解释公式中每个元素的含义:
可跳转的页面对应图中的度数点。
可以发现,只要用这种方法构造了图,对应关系自然就存在了。这其实是一个比较通用的算法。所以对于文本,也是如此,只要我们能构造一个图,图中的节点就是单词或句子,只要我们通过某种方法定义这些节点之间的某种关系,那么我们就可以使用以上算法,在文章中得到一个关键词或摘要。
使用TextRank提取关键词
提取关键词,比从网页中选取的更重要,其实是一回事,所以,我们只需要想办法构造图片即可。
图片的节点实际上定义得更好。它们是词。将文章分割成句子,然后将每个句子分割成单词,以单词为节点。
那么边缘是如何定义的呢?这里我们可以使用n-gram的思想。简单来说,一个词只与它附近的n个词相关,即它附近n个词对应的节点连接到一条无向边(两个有向边)。
另外还可以做一些操作,比如删除某类词性词,删除一些自定义词,只保留一部分词。只有这几个词可以连接。
下面是论文中给出的一个例子:
组合成功后,就可以用上面的公式迭代求解了。
使用TextRank提取文章摘要
提取 关键词 以单词为节点。显然,提取文章 摘要自然是以句子为节点。侧面呢?如何定义?上面的方法似乎不太适用,因为即使两个句子相邻,也可以谈论两个完全不同的事情。
在论文中,作者给出了一个方法,就是计算两个句子的相似度。我的理解是这样的。这种计算相似度其实是比较粗略的判断两个句子是否在谈论同一个东西。如果这两句话说的是同一个东西,肯定会用相似的词。依此类推,您可以连接一侧。
既然有相似之处,就会有两个非常相似的句子,而这两个句子又不是很相似。因此,即使是边缘也需要加权边缘。
以下是论文中给出的相似度公式:
简单的说,就是把两句话的词的交集除以两句话的长度(至于为什么用log,我没看懂,论文里也没提过)。然后还有一点,就是其他计算相似度的方法应该也是可行的,比如余弦相似度,最长公共子序列等等,不过论文中提到了。
由于使用了加权边,因此必须相应地修改公式:
上面的公式基本上是对原来对应边的那部分加了权重,把边数之和变成了权重之和,很容易理解。