目录
论文阅读准备
课前基础知识
学习目标
知识树
论文导读
论文研究背景、成果及意义
研究背景
长文档匹配
- https://cloud.tencent.com/developer/news/52460
- https://baijiahao.baidu.com/s?id=1686872927774585420&wfr=spider&for=pc
难点 - 1.更多的内容
- 2.更复杂的语义
- 3.更复杂的逻辑结构
- 4.需要同时考虑word, entities, sentence等内容
应用场景
- 1.门户网站
- 2.搜索引擎
- 3.文档去重
Graph上的任务:
- 节点分类:预测特定节点的类型
- 链接预测:预测两个节点是否有联系
- 社区检测:识别密集联系的节点群落
- 网络相似性:两个(子)网络的相似性有多大
研究成果
首次提出了概念交互图(Concept Interaction Graph)
如何将长文档更好的概括或结构化的预处理一下,论文中使用了概念交互图。概念交互图可以理解为对整篇文章进行一个很好的概括,概念交互图中的每一个节点可以认为是关键词,利用关键词算法从整篇文章中找到的,然后在这个图里面做一些例如社区发现算法,将这个大图变得小一点,让后面的复杂度变得小点,构造一些边以及边之间的权重,对节点做一些编码。
首次发布长文档匹配问题数据集
- Chinese News Same Event dataset (CNSE)
- Chinese News Same Story dataset (CNSS)
平均字数:734
最大字数:21791
大幅度提高长文档匹配结果
在图上做长文档匹配,准确率提高17.31%和23.09%
论文泛读
论文结构
摘要
摘要核心
- 1.分析了长文档匹配问题的核心所在,以及目前算法的缺陷;
- 2.首次提出了一种可以有效抽象描述长文档对的“概念交互图”;
- 3.对于长文档匹配问题,提出“分而治之”的处理思路,引入强大的GCN来建模;
- 4.发布业界首个公开的长文档匹配问题数据集;
- 5.本文提出的模型在数据集上的表现,展示了非常明显的优势;
- 6.设计的知识点众多,是一篇综合性很强的文章。
论文精读
CIG-GCN算法模型总览
CIG-GCN结构
(a)构造一种图的表征(如何去构造图,如何去描述图;有一些场景是天然的图结构,比如知识图谱,一些不是天然的图结构可以通过自己的构思或方法将它变成一个有意义的图结构,比如本篇论文如何很好的概括两篇文档之间的关系以及把两篇文档融合到一起)keygraph(关键词或实体等),用社区发现算法进一步检测社区对节点的一些聚类,得到concepts,这一步完成后,节点数会变少,降低图的复杂度,会随着带来精度的损失;文档的句子与节点进行关联,节点有节点的特征,边有边的权重。第一步就是将两篇文档用CIG交互网络进行表示。
(b)Encoding.对节点做一些编码。(a)(b)两步准备模型的输入。
©用图卷积神经网络对图网络做信息的聚合或特征的转变。
(d)将上一步得到的结果输入到常规的分类层。
CIG结构
CIG-GCN模型的理论基础和相关知识
模型细节
1.构造概念交互图(Concept Interaction Graph)
-
- 使用TextRank抽取实体和关键词
- 使用TextRank抽取实体和关键词
-
- 根据关键词的共现关系构造KeyGraph
共现:上一步提取出来的关键词是不是在同一个句子里面出现。
- 根据关键词的共现关系构造KeyGraph
-
- 检测Concept(可选)
做社区发现的算法,对节点进行简单的聚类,节点数目减少
- 检测Concept(可选)
-
- 将句子连接带结点上
目的是进行对齐,例如,最简单的方式为节点中token是否包含在某个句子里面
- 将句子连接带结点上
-
- 构造CIG边
直接计算所有与节点相关的句子之间的TF-IDF
例如:将[1]、[2]这两句话进行拼接,[5]、[6]这两句话进行拼接, 计算这两部分的TF-IDF相似值作为边的权重。当然也可以用其他的相似度方法或模型进行处理。
知识点
- 构造CIG边
-
1)TextRank
在一个文本里面找关键词。TextRank来源于PageRank(搜索到的网页的排名,更重要的页面往往会被其他页面去引用),将文本中的token看做是一个网页,可以计算每个token的重要性,重要性比较高的就可以作为关键词。
PageRank的例子:
PR初始值为1,d为0.5
TextRank的实现步骤:
a.分句,将一篇文档进行分句;
b.分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,作为候选关键词;
c.构造图,候选关键词为结点,利用共现关系构造结点之间的边;
d.根据上面公式,迭代传播各节点的权重,直至收敛;
e.对节点权重排序,取top-k作为关键词;
f. 相邻词语拼接。 -
2)社区发现算法(Community Detection)
对于原始图,有很多结点,用一些策略或算法将有关联的结点聚到一起或用一个结点来表示,具体实现的方法有:
a. Agglomerative Methods(归并法)
从一个空的图开始,将图中结点之间的边先去掉,按照边权重从大到小的顺序,将边一个一个的加进来,权重的计算有不同的方式,社区的个数有一定的规则。
b. Divisive Methods(分裂法)
处理是在完整的图上,把边一个个的拿掉,有最大权重的边先拿掉,每一步计算之后,边的权重会被重新计算,因为边被去掉后,剩下的图结构改变,权重也有可能跟着改变,经过若干步,得到最终的结果。
本文使用的是Girvan-Newman Algorithm(格文-纽曼算法)
格文-纽曼算法
Edge Betweenness Centrality(边的中介中心性):图中最短路径上边的数量。
计算EBC score:
a) 每个节点开始,找出从这个节点到其他节点的最短路径;
b) 基于最短路径,计算每个边的EBC scores;
c) 重复上面动作,遍历图中全部节点;
d) 将所有边的得分相加;
e) 最后,每个边得到的值除以2得到图中所有边的最终EBC。
【举例】
a.构建最短路径图
对于节点A来说
是一个由上往下的过程。
b.计算每个边的EBC Scores
计算C到F、E到F边的权重,用最短路径的个数作一个比值;
其他边的EBC score的计算,节点的默认得分是1,所有指向当前节点的所有边的EBC score进行相加,再除以起始节点的最短路径的值,例如,计算BC边的EBC score:(1+0.33)/1=1.33
计算每个边的EBC score是一个由下往上的过程。
a、b两步为计算以A为起点算出的每条边的EBC score,用同样的方法得出以其它节点为起点得出的每条边的EBC score,然后按照计算EBC score的方法,得到最终的结果:
得到上图中右边的结果后,假设要分为三个社区,剪掉最大的边,得到下图中的情形:
-
- TF-IDF相似度
- TF-IDF相似度
2.Article Pair Matching through GCN
- a) 用CIG表示文章对
- b) 学习CIG的结点的多视角matching features
图是为了概括和表示两个文档的关系,每个结点需要表示两个文档中的词或句子之间是否匹配这种度量,通过一种方法算features或向量,这个向量的意义表现出与某个结点相连的两个文档里面句子的匹配关系。 - c) 使用GCN来解析CIG
- d) 聚合matching features得到最终的结果
结点编码
第一种方法是Siamese Encoder
第二种方法是Term-based Similarities
知识点1:BM25
BM25在信息检索领域用来计算query与文档相似度得分的算法。可以将其当做一个baseline,例如在文本匹配领域中,当候选句很多时,可以先用BM25做粗召回,之后可以用更好的算法做精细的排序等。
BM25由三部分组成:
1.query中每个单词t与文档d之间的相关性
2.单词t与query之间的相似性
3.每个单词的权重
BM25的一般公式:
其中,Q表示一条query;qi表示query中的单词;d表示某个搜索文档;n表示query中单词数量;Wi表示第i个单词的权重。
a.单词权重W
N表示检索系统中全部文档的个数,dfi表示包含当前token的文档的个数;包含当前token的文档数越多,说明这个token的重要性越小或区分度越低,刻画token与文档的相似度。
b.单词与文档的相关性
BM25依据的一个重要的发现是词频与相关性之间的关系是非线性的,即每个词对于文档的相关性分数不会超过特定的阈值;tftd表示单词t在文档d中的词频,Ld表示文档d的长度,Lave表示所有文档的平均长度,k1是一个正参数,标准化文档词频的范围,当k1=0时,相当于是二元模型,相当于没有词频,当k1是一个更大的值时,更多使用的是原始的词频信息,b的范围是0~1,用来决定使用多少文档长度来表示信息量的范围。
c.单词与query的相似度
当query很长时,更需要刻画单词与query之间的权重,tftq表示单词t在query中的词频,k3表示调节参数,矫正query中词频的范围。
知识点2:Jaccard similarity of 1-gram
【举例】
Sa : 小丁和小兰主修数学和计算机
Sb : 小丁主修数学小兰主修计算机
知识点3:Ochiai similarity
交集:[‘小丁’,‘小兰’,‘主修’,‘数学’,‘计算机’]
Ochiai : 0.772
引入GCN
结点分类的例子:
定义GCN
GCN计算细节
如何才能从邻居节点处得到每一个节点的特征值?
聚合邻居节点的特征向量:
存在的问题:
- 忽略了节点本身的特征;
- 不需要使用sum()函数,而是需要取平均值,甚至更好的邻居节点特征向量的加权平均值。
对应的解决方案:
相当于对行做了归一化。
列也应该做归一化操作。对列进行归一化,其实是对高度节点削弱影响,给低度的节点加大权重。
即对称归一化的作用就是削弱高度节点的影响。
例如对节点B进行计算:
层的数量
训练技巧
实验设置及结果分析
Datasets
Baselines
第一类:
第二类、第三类:
实验结果图
- 本方法优于所有其他方法
- 使用图分解的作用:图分解有利于进行文档匹配
- 图卷积的作用:引入GCN对模型的提升非常明显
- 社区发现算法的影响:使用社区发现算法对模型的表现有所影响,但是会提高模型的计算速度
- Multi-viewed Matching的作用:正面影响
- 加入全局特征的作用:只有很小的提升
论文总结
关键点
- 长文档匹配问题
- “概念交互图”
- “分而治之”的思路
- 图卷积神经网络GCN的引入
- 两个长文档匹配问题数据集
创新点
- 首次提出了一种可以有效抽象描述长文档对的“概念交互图”(CIG)
- 基于CIG,提出“分而治之”的处理思路,引入强大的GCN来建模
- 发布业界首个公开的长文档匹配问题数据集
- 将众多知识点综合运用
- 取得了出众的效果
启发点
- GCN如何与预训练模型更好的结合?
- 升级GCN,效果是否会更好?如GraphSAGE(局部图卷积神经网络)、GAT(图注意力神经网络)
- 是否可以改进CIG的构造?
- 其他长文档的处理方法?
Textrank
token1 = '我们 的 目标 就 是 能够 使用 海量 用户 搜索 日志'
token2 = '在 海量 数据 里 挖掘 潜藏 的 查询 之间 的 结构 信息'
token3 = 't'
#textrank
from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer
import network as nx
def textrank(sentences):
"""
Given input text, split sentences and calc text rank score.
:param sentences: input sentence list
:return : a dictionary of (sentence index, sentence score)
"""
bow_matrix = CountVectorizer().fit_transform(sentences)
normalized = TfidfTransformer().fit__transform(bow_matrix)
similarity_graph = normalized * normalized.T
nx_graph = nx.from_scipy_sparse_matrix(similarity_graph)
scores =nx.pagerank(nx_graph)
return dict(((i, scores[i]) for i, s in enumerate(sentences)))