文本数据挖掘:TextRank模型

# 简介

    TF-IDF 在大型语料库上的统计类似于一种学习过程,假如我们没有这么大型的语料库或者存储 IDF的内存,同时又想改善词频统计的效果该怎么办呢?此时可以使用 TextRank 算法。   

    TextRank基本思想来源于Google的PageRank算法。这种算法是1997年,Google创始人拉里.佩奇和谢尔盖.布林在构建早期的搜索系统原型时提出的一种链接分析算法,基本思想有两条:

  1)链接数量。一个网页被越多的其他网页链接,说明这个网页越重要.

  2)链接质量。一个网页被一个越高权值的网页链接,也能表明这个网页越重要.

    与TF-IDF需要在语料库上计算IDF(逆文档频率)不同,TextRank利用一篇文档内部的词语间的共现信息(语义)便可以抽取关键词。 

    一些简单实用的无监督关键词提取算法,由简入繁分别是词频TF-IDFTextRank

    根据运行时只需利用一个文裆即可得出关键词,还是需要考虑多份文档,提取算法可分为单文档和多文档算法。单文档算法能够独立分析每篇文章的关键词,包括词频TextRank。多文档算法利用了其他文档中的信息来辅助决定当前文档的关键词,同时也容易受到噪声干扰,典型例子是著名的TF-IDF

    除了用于提取关键词,TextRank还可用于提取关键句。由于一篇文章中几乎不可能出现相同的两个句子,所以朴素的PageRank在句子颗粒度上行不通。为了将 PageRank 利用到句子颗粒度上去,我们引入BM25算法衡量句子的相似度,改进链接的权重计算。

# 关键词

  ## 算法

    将PageRank应用到关键词提取,无非是将单词视作节点而已。另外,每个单词的外链来自自身前后固定大小的窗口内的所有单词。

    这么做的目的是模拟"解释说明"这种语言现象,窗口内的词语常常用来解释中心词语,相当于为中心词语投了一票,每一票的权重等于窗口词语的权重被投出去的所有票平分。中心词这种左右搭配越多,给自己投票的词语就越多。另一方面,单词频次越高,给它投票的机会就越多,这点与词频统计类似。然而在TextRank中,高频词不一定权重高,因为每一票还必须考虑投票者的权重。 

    1️⃣:把给定的文本 T 按照完整句子进行分割,即: \small T=[S_1, S_2, ... , S_m]
    2️⃣:对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,其中 \small t_{i,j}是保留后的候选关键词。\small S_i = [ t_{i,1}, t_{i,2}, ..., t_{i,n}]
    3️⃣:构建候选关键词图 G = (V,E),其中 V 为节点集,由2️⃣生成的候选关键词组成,然后采用共现关系(Co-Occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K 的窗口中共现,K表示窗口大小,即最多共现 K 个单词。
    4️⃣:根据 TextRank 的公式,迭代传播各节点的权重,直至收敛。

    5️⃣:对节点权重进行倒序排序,从而得到最重要的 T 个单词,作为候选关键词。
    6️⃣:由5️⃣得到最重要的 T 个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。

  ## 示例

  例如:

     “ TextRank是一种用于文本的基于排序算法。”  💨 “ TextRank/用于/文本//排序/算法。”
     对于‘用于‘这个单词,就有('用于', '文本')、('用于', '')、('用于', '排序')、('用于', '算法')4条边,且每条边权值为1,当这条边在之后再次出现时,权值再在基础上加1.

# 关键句

  ## BM25

    在信息检索领域中,BM25是TF-IDF的一种改进变种TF-IDF 衡量的是单个词语在文档中的重要程度,而在搜索引擎中,查询串 (query)往往是由多个词语构成的,如何衡量多个词语与文档的关联程度,就是BM25所解决的问题。

tf-idf 公式:TF(t,d) 代表t在d中出现的频次,DF(t)代表有多少篇文档包含t

 

📍 实际计算 tf-idf 时,tf会进行归一化(防止文档内容过长从而导致某些单词出现过多),idf会取对数。

     定义Q为查询语句,由关键字 (keyword) \small q_1, q_2, ..., q_n组成。D为一个被检索的文档,它们之间的相似度 BM25 度量的定义如下:

BM25 公式

    其中,k和b是两个常数,avgDL是所有文档的平均长度。BM25大意是对查询语句中所有单词的IDF加权求和,两个常数参数与TF可视作调整IDF权重的参数。

    k越大,TF对文档得分的正面影响越大。

    b越大,文档长度对得分的负面影响越大。

    当 k = b = 0 时,BM25完全等价于所有单词的IDF之和。

    📍 在TF-IDF中,当IDF固定时,得分正比于TF,这样长文档先天更有优势,这并不公平。BM25这种处理TF的方式显得更加精细,当IDF固定时,TF对得分的影响还必须考虑文档长度,相对而言更加公平。

  ## TextRank

    有了 BM25 算法之后,将一个句子视作查询语句,相邻的句子视作待查询的文档,就能得到它们之间的相似度。以此相似度作为 PageRank中的链接的权重,于是得到一种改进算法,称为TextRank,它的形式化计算方法如下:

    其中,\small WS(V_i) 就是文档中第i个句子的得分,重复迭代该表达式若干次之后得到最终的分值,排序后输出前N个即得到关键句。另外,由于文档中句子的数量远远小于单词的数量,并且句子几乎不重复,所以通常不再取窗口,而是认为所有句子都是相邻的。
    关键词与关键句的提取,在原理上都是同一种算法在不同文本颗粒度上的应用。

# 工具

  ## jieba中使用TextRank

         jieba.analyse.textrank(sentence, topk= 20 , withweight= true , allowpos=( 'n' , 'nr' , 'ns' ))

import jieba
import jieba.analyse

sentence ="2018年2月,深圳率先获批在前海启动资本项目外汇收入支付便利化试点,银行审核企业材料时间由试点前的几小时大幅缩短至试点后的几分钟。今年深圳外管局将资本项目外汇收入支付便利化试点扩大至整个前海蛇口自贸片区,并降低了企业试点门槛,受益范围进一步扩大。"

tag = jieba.analyse.textrank(sentence, 3,withWeight=True)
for (k, v) in tag:  
    print(k, v)

  ## TextRank4zh中使用TextRank

      TextRank4ZH是针对中文文本的TextRank算法的Python算法实现。更多内容请查看:YUENFUNGDATA

from textrank4zh import TextRank4Keyword, TextRank4Sentence

test_text="2018年2月,深圳率先获批在前海启动资本项目外汇收入支付便利化试点,银行审核企业材料时间由试点前的几小时大幅缩短至试点后的几分钟。今年深圳外管局将资本项目外汇收入支付便利化试点扩大至整个前海蛇口自贸片区,并降低了企业试点门槛,受益范围进一步扩大。"

tr4w=TextRank4Keyword()
tr4w.analyze(text=test_text, lower=True, window=2)

for item in tr4w.get_keywords(3, word_min_len=1):
    print(item.word, item.weight)

  ## 其他

 「adam-liu」:因为在了解textrank的时候,参考了jieba分词和TextRank4zh这2个开源库的写法。但是两者无论写法和运算规则都有很大出入,结合公式来说本人觉得jieba做的更符合公式,TextRank4zh更具有准确性,因为TextRank4zh在公式上面做了一定的优化。

# 参考

    「adam-liu」原文链接:https://blog.csdn.net/qq_41664845/article/details/82869596

    「qian99」原文链接:https://blog.csdn.net/qian99/article/details/83713872

    「米仓山下」原文链接:https://www.cnblogs.com/Micang/p/10366954.html

    《自然语言处理入门》何晗 [著]

     如有理解错误的地方,欢迎批评指正!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值