来了来了,今天我们来聊聊南大夏令营的入门篇。 知识图谱是我们众所周知的一个有广泛应用的内容。但是知识图谱的知识从哪里来呢,是从大量的各种不规则的文档当中生成的。所以知识图谱当中的几个技术难点。
- 三元组抽取(实体 关系 抽取)
- 实体消歧 构造相同的实体
- 推理 补全知识当中的信息
- 利用KB当中信息进行应用
我们做的呢,只是抽取当中的一个小分支,但也很重要。比如下面这句话:小毛在成电上学,他是个菜鸡。 如果我们只看第二句话,我们是不知道小毛和菜鸡之间的关系的,只有在document的层级上,我们才可以看到更多种的关系类型。尤其是在一些专用的内容当中,比如生物的专用词汇,很多mention之间的关系,不能单从一句话的mention当中得到,一个新的专用名词往往需要多个词汇进行解释,这也是document level抽取的意义。
目前的模型主要分为两大类
1.对于序列建模 比如直接用一个LSTM生成一个隐状态,然后判断。当然也有人用双向LSTM,Attention-LSTM(context-aware)来进行建模。这种序列化的建模方式引入的bias主要是,缺少在document当中的rich connection information。还是上面那个例子,小毛和他按照直觉是有个直接关联的信息。但是sequence模型,必须先看到“成电上学”,在一个几百字的文档当中变得更不合理。
2.对于图模型 图模型主要可以分为两大类
- 异质网络图
这种图根据不同的边来区分网络的类型 额,其实感觉有点像表示学习的方法,尤其是GCNN那篇引入的RGCN,和SACN前半部分有异曲同工之妙
主要的代表工作是EOG GCNN (感觉HIN也有点那味,分层次就是没明着说层次之间的关系) - 同质网络 latent structure图
虽然节点不同 边的类型不同 我们一视同仁,把所有的节点当作同质关系进行处理,利用attention或者其他的方式自动进行区分
EOG:Connecting the Dots: Document-level Neural Relation Extraction with Edge-oriented Graphs
动机:很多利用图网络的方法,只关心节点,而没有关心节点之间边的表达。实际上,文档级别的图具有更多层次化的边和节点,在关联的程度上有比较大的差别。在不同种类节点之间,建立不同类型的边来决定信息流入节点的多少,来更好的拟合文档之间异构的交互关系。
模型概述:八仙过海,各显神通,却又殊途同归。不同的节点根据不同的性质生成不同种类的边,但是采用相同的启发式规则归纳到相同的表达空间当中,从而不断更新节点表达
图节点构建(图节点最大的特点就是 不会更多的去考虑单个word对应推断的贡献):
- 把每个句子都放入BiLSTM当中生成新的隐表示状态(算是很多模型采用的基本操作)
- mention节点构建 mention的所有单词的平均表达(虽然约定熟成,这里是否有改进的空间呢)
- entity节点构建 所有mention的平均值
- sentence节点构建 sentence当中的word的平均值
边节点构建(八仙过海):
根据上文的三种节点类型 边的类型有
基本的边信息:
在不同类别的节点之间,即MS,ME,ES之间我们只考虑边的基本信息(可能是因为异质节点有效信息抽取比较困难,这里原因待定)
下面我们主要介绍MM SS和EE之间的关系
MM的表达(可以更好的表达共指信息,还有细粒度的mention之间的交互信息):除了基本的信息之外,加入了:
- 上下文信息(主要是应对类似it这种指代方法,不根据上下文不好推断节点的表达)
计算attention的时候,不把自己的相似度考虑在内(我们已经把节点的信息当作边信息融入,这里就不需要再次融入了) 上面的内容就是一个简单的attention,不是很清楚为什么要写成这个亚子(迷惑)
- 距离表达 距离作为特征主要是用来区分local和global的区别(具体的工作原理待定,这种距离加入的方式 距离衡量的方式是否合理也有待商榷 三元组的衡量方式会不会更合理)
SS的表达(更好的表达在长距离上的依赖关系,相比mention,句子的数目少很多,在整体上寻找相关性)
- 距离表达
距离表达形式有两种
direct order connection用1来表示边的权重(local)
indirect non-order connection 对于较长距离的边(global) 快速的推演到一些全局信息,使模型更快的达到一个比较好的效果
殊途同归
无论我们建立什么类型的边节点关系 最终的目的都是寻找EE之间是否存在关系 异构的边应该统一到相同的表达中
把不同边的类型根据不同的矩阵转换映射到相同的空间当中来进行后续的推导
推理EE之间的关系
我们没有构造直接的EE关联,但是我们可以通过其他的边构造关联 比如ES->SE 构造和EE之间的关系,也可以构造更长的距离关系(有点类似链路预测的做法)
如果i和j节点之间的原本就存在边,新建边的信息融合方式如下(β是一个对于远近关系控制的超参数,越大表示越对直接连接注意)
上述推理过程不断循环,图当中的信息流动循环生成最后的EE表达
实验分析
相比前面的部分 对于不同节点之间信息交互方式对以后的信息抽取会起到的一些帮助
三个变体模型
- EOG-full 所有节点全链接 全连接可能效果不会好,但是差距也不是很大,可能增加一些辅助的判断手段就可以得到一个比较好的结果(硬编码的方式是不是真正的好用呢)
- EOG-noinf直接把实体节点的表示获得就直接分类,而没有通过后续的推理(推理当然很重要了23333)这个直接效果差的离谱
- EOG-sent 增加假设,如果一个sentence证明三元组 证明整体上有三元组的信息 把document变成多个sentence
但full连接不一定是真的无效
从这张图我们可以看出:1. 在intra-sentence当中,full提供的熵很大的信息不能很好的,推理也不能达到很好的效果。然而在长句子建模的效果,尤其是4句以上的效果要远好于EOG,这证明了EoG在建模的时候可能忽略了一些重要的节点之间交互信息
关于SS direct和SS的内容探索
SS需要更少的推理环节达到收敛的效果 ,direct只能捕获到局部的信息,收敛速度较慢,同样也证明了句子间信息抽取的有效性
对于各种类型边产生的影响,文章利用控制变量法,去除不同的边来观察不同边的影响
在这张图的比较当中,我认为SS和把S实体全部去掉对模型的影响很大,这充分体现了document-level从句子层面,或者是说从一个全局层面提取inter-sentence信息的重要性。我不认为这篇文章MM的交互方式是有效的,ME和ES相较于MM和ME的映射对整体的帮助也不小,我认为这印证了对长期依赖建模更好的边会对模型产生更大的影响,正如下图所示,MM和MR需要更多的边来连接两个mention
关于EOG的一点感想
1.我们为什么要建立边?edge的意义是什么?
边的意义在于交互,我认为把两个向量拼接在一起就是寻找共现和交互的信息,归根结底,图构建需要解决的重要问题是:
考虑加入哪种边?加入的边怎么用节点信息表达
2.全连接的探索
全连接刚听起来是挺离谱的,但反过来想BERT都可以理解成为一个全连接的图,是不是在document-level上构造全连接图自行控制也是一种合理的想法呢?或者更准确地说,让模型自己挑选合理或者是不合理的边
3.距离信息的构建
在MM和SS的表达当中,我们都加入了距离的信息,在实验当中我们也看到了direct在intra当中的有效性,以及unorder method在较短的推理步骤中快速收敛。
在MM当中 我个人不是非常赞同这种硬编码的距离衡量方式,我并不认为自然语言的距离可以直接用embedding来衡量,比如distance=10和20或许在某些情况也没有那么大的区别?是不是在HIN当中那种距离衡量方式会更好呢。
anyway,距离,node类型等辅助信息有效的避免了模型的过拟合,如何把距离融入还有待·商榷。
这里再补充一下Docred利用距离h2t在共指信息上的表达方式。比如对下面这个句子:[实体1的mentionA] XXXXX, [实体1的mentionB] XXX[实体2的mentionC]XX。只用词向量输入进LSTM的话,模型不知道A, B是同一个实体,我们把它编码进去,让模型知道这两个是有关系的,另位postion encoding是针对一个句子中的实体来说的,比如C在A的右边10个词,我们就把这个10用一个embedding表示,这个表示就拼到C的词表示上,同样的A在C左边10个词,那我们是把-10用向量表示,拼接到A的表示上
4. 共指信息建立 MM关系
按照EOG的做法,共指信息可能没有那么重要,MM之间的关系并没有给模型带来一个significant improvement,但直接上共指信息的确有非常重要的作用。出现这种现象的原因是不是MS,ME的关系代替了MM上信息流通的直接作用。举个例子来说 it作为mention有很大的作用吗,我觉得未必,但在MM建模当中有同样重要的地位(毕竟是拼接起来的),这种it的信息是否应该得到弱化呢?
HIN:Hierarchical Inference Network for Document-Level Relation Extraction
动机:从名字我们就可以看出,文章从多个角度来抽取文档当中的有用信息。从local到global共分为三个角度:entity、 sentence、 document level来构建三个级别的信息
模型概述:
- entity level 利用双线性算子和TransE来挖掘实体之间的关系并利用前馈网络来混合不同子空间的信息
- sentence level 利用attention和语义匹配方法来得到推理机制构建entity和sentence之间的关联 构造sentence level的表达
- document level对于先前得到的信息进行层次化LSTM聚合推理信息
把各种信息综合起来得到最后的预测结果
节点信息构建
word节点表达:word type 和共现三者的结合
mention节点构建:过biLSTM 然后进行代码的表达然后average
entity节点构建:把mention average(都是常规操作了,并没有做数据工程产生新的节点信息)
entity-level
为了提高模型的复杂度(误)为了增加层次化的多方面映射,利用一个双层映射来构造模型的多种表达方式,你可以把这里看作multi head
和EOG相似的edge表达方式(但是这里构建的是推理的信息,边还是实体,真的有那么重要吗)
在原始表达的基础上,增加一个共现算子(rescal),和一个距离算子(transE)
在得到multi head表达后,同样用一个feed foward映射到初始的空间当中(这里还增加了距离的表达,和EOG的MM类似,这里就不赘述了
Sentence-level
别问,上来就是一个context-aware(attention的BiLSTM)然后采用和entity类似的推理方法再堆一个sentence和entity之间的推理
这里共现算子类似dismult 本质上都是矩阵低秩分解(dismult是这样),然后送入FFNN(基本操作了)
Document-level
在document-level上,接着用一个context-aware LSTM得到最后的表达(这里推理的就是句子和内容的结合了)
吐槽一下,这篇文章感觉LSTM用的很多,就不是我很喜欢的那种,RNN长期依赖和并行化效果感觉都很差
实验环节我们简单的来说几个我关注的实验内容
把不同的部分去掉,我们可以看出,translation的距离衡量方式可能还不是分厂好,但是biliear的交互方式相对要更好一点,我认为这可能和复杂度的提升不无关系。层次化的交互信息也是有用的,也就相当于ES边的表达,同EoG的解释,边之间的交互信息能更好的解决长期依赖的问题。
总结:
这篇文章感觉亮点并不是很突出,层次化的分析和联合推理的确是解释性比较好的推理方式,但在长期依赖的构建上可能还是要差一点,推理信息I和EOG当中的edge有异曲同工之妙,但还是这个感觉,inter之间的关联不太够,不过引入表示学习算子来表达节点之间的距离的确是一个不错的选择,只不过交互的方式是否需要改进呢
Inter-sentence Relation Extraction with Document-level Graph Convolutional Neural Network
动机:文档的句子之间存在不同的关联,每一种关系都能构造一张图,利用GCN来捕获图当中不同的信息,或者说,我们每次只关注一种关系,寻找句子内和不同句子之间的不同关系
模型概述:
建模最大的先验知识:根据实体的表达和上下文的信息来表示所有的entity信息。换句话说,所有的mention都能体现是entiy之间的关系,所有的mention对于我们挖掘关系类型都是有意义的。
然后我们构造语法树和序列化的信息,通过各种构建特征工程方法来找到图上关联。
- 在多个关系之间利用denseGCN挖掘entity之间的关联
- 利用MIL去聚集在图当中获得的信息
图的构建:
- syntactic depenency: 利用工具构造语法树,把每一种依赖当作不同的边类型
- coreference:共现边当然是非常重要的撒
- self node:每个mention和sentence当然也要关注自己的表达 GCN也有关注自己的内环 这种把自己单独拎出来的方式还是非常值得深究的
- adjancement sentence edge 把句子句法的根节点 和上下句的根节点相连 构造在句子层面上的表达
- adjancement word edge 和LSTM吸收上下文的信息方法不同,利用图神经网络局部收敛的方法吸收前后两个词汇作为节点的新的表达
GCNN的构建:
利用邻接矩阵构建relation GCN
额,其实这不能算正常的GNN哈,在how power GNN那篇论文提过这种类似的做法,也就是说做sum的方式最接近于WL-test,也算是比较好用的一种方法。但是范数没有得到有效的控制,这个问题是不是需要解决一下?
GCNN我们叠加了好多层,每一种关系都是分开叠加的,额,怎么感觉又有点和EoG有点像,也就是我们对不同的边采用不同的参量进行映射。
这里比较trick的地方就是,这个GCNN其实是一个不断把异质网络同质化的一个过程,图上每个节点逐渐变成混合的形式,也就是说在后面的层次我们看到的已经不是一个异质网络了,而是一个不断交互而近似同质化的网络。为了简化训练,在GCNN比较近的层次采用相同的参量W。
MIL匹配层:
和HIN使用的multi head比较类似 MIL层采用一个映射的方式来增加模型的表达能力(这里没有使用multi head 或者说sub space的方法)
然后利用bilinear算子的方法计算得分
模型感想:
这个模型算是把GCNN来引入这个领域当中,和EOG的方式不同,他没有特意的去强调异质边的交互,而实利用不断地节点信息交换来达到同质网络地目的
模型的缺点也显而易见:我们不能虽然可以很好的获取mention和mention之间的关系,但是好像对于mention和entity这样的信息缺少合理的建模方式(或许GAT是一种更好的解决方法)异质信息的融合不应该只是一个简单的融合加上一个加法机制
第二个问题在于sum的表达方法是否是正确的,如果是sum计算得分的话,连接比较多的节点,可能即便信息获取不多,向量模非常大也达到会得到很高的得分 这种现象是否可以得到合理的解决
论文也没有详细分析不同节点的作用,采用先进一些的图网络是否会有更好的结果呢,到底哪些边的信息是有用的呢
我认为比较大的几个亮点:
- 引入GCNN
- 构造不同的特征工程,节点间邻居的方式,是否能融入到后续的学习方法当中
LSR:Reasoning with Latent Structure Refinement for Document-Level Relation Extraction
终于到最近的STOA模型了,看名字就知道特点latent structure 是什么。简单来讲,如果full的效果都不是很差,那不如让模型自己来看看哪个边有用。邻接矩阵再就不是硬编码的东西,而是一个类似EoG对于边的表达(和两个节点相关)的方法
建模动机:对于document当中复杂的交互方式,是很难使用一些像语法树的硬编码方式来做到的,我们不采用硬规则编码方法和共现知识,通过一个邻居节点的隐状态来自动学习知识,在一个全连接的状态下自动进行学习来捕获更多的非邻居的信息。(或许就是所说的启发式学习8)
节点构建:
- 把每一个句子送入BiLSTM当中获得对应的隐状态(这东西实在是不好实现,直接送进一个document去听起来稍微靠谱一点点)
- mention节点是word的平均
- entity节点是mention的平均
- MDP节点是word的平均值(MDP是比较重要的一种特征,主要是在句子当中起到重要的连接作用 像of is这种词汇被特别看重
结构信息构建
简单来说,就是根据已知的三种节点信息来寻找节点之间的交互强度(这里用到了一些矩阵树理论,我们这里就不多讲。
这里最大的假设就是 对于不同的节点采用相同的方式来算概率来处理,这种做法换种说法来理解就是内容上的就是采用最基本的edge表达形式,来表达节点之间的关联。
最后这个就需要大量的数学功底作为我们计算的根据了。除了自身为0外,这真的是一个全连接的矩阵(根据相似度和概率生成)
Multi hop reasoning
根据之前生成的邻接矩阵信息,DenseGCN的方式来构造深层次的non-local信息,具体实现我们这就不多说了 根据最后生成的表达做一个Bilinear算子进行分类
实验结果
额,我们通过这样的实验看出MDP nod好像用处也不是很大? structure induce来构造的矩阵形式 structure induce的方法非常有用,GCN的方法一阶就可以提出不少的信息
模型总结
模型最大的优点在于 对异质网络利用attention的交互方式来构建相同的表达形式
这篇跟前两年的AGGCN的其实有点像 关键在于,如何构造一个概率矩阵控制信息转移的情况
DocRED: A Large-Scale Document-Level Relation Extraction Dataset
基本算是写到最后一篇了,我们来聊聊数据集的这篇DocRED
DocRED数据集的主要亮点:
原来的relation extraction数据集主要关系都可以通过单个句子进行抽取,而DocRED数据集当中的内容很多都需要好几个句子的内容联合起来。需要模型具有更好的长期依赖。
DocRED的数据集内容更加具有普遍性,而不是像原来的数据集专门聚焦在医学领域上,而是在wikipidea的更广泛的数据当中。
在人工标定之外,还标注了大量的弱监督数据 用于弱监督学习
- 生成弱监督标注
- 标注文档当中所有引用的entity
- 链接wiki data
- 标注需要预测的关系
- distantly supervise annotation generation
所有的标签都采用弱标注的方式 并且进行entity ID的映射
选出其中的少量进行手动标注 - named entity and coreference annotation
把mention的信息和entity的映射进行人工查重 - relation and support evidence collection
entity pair计算置信度进行剪枝 - distantly supervised data collection
人工一出若标签数据后,为了确保同样的entity和relation分布,使用BERT利用KB ID核并named entity
以及中间的一些结论
- 人工标定预料模型好于软件都预料上结果
- LSTM context-aware 在Ign F1上效果不是很好 证明实体关系如果出现重叠 会造成假学习的情况
- 和CNN这种卷积信息想去,LSTM效果更好,说明更多的利用上下文信息会取得更好的效果
- 对于不同的辅助embedding信息进行分析 实体关系>共指信息>距离信息 丰富的文档额外信息回对最终结果带来正向的影响
还有AGGCN没有介绍,最后我们附上现在的一下的一些杂碎的想法8,文章写的不好,多指教。
(待整理内容)
- 修改图的结构 找到更好的结构
- 把距离的信息 三元组的形式 表示符合一些原来的知识图谱上的约束
- 不能拿实体的表示 可能会覆盖一下东西 不去用表示 只去限制距离
- GCN的邻居做法
- 临近的内容的做法 相对关系简历的不够好 是否能被观察到
- BERT少边 进行补全 后处理 让BERT知道不同的实体有不同的mention 结果有57 图相对不错 召回率比较差一点 样本的数量比较少 很明显的长尾分布 两三个关系超过300多个 也比较靠后 能不能找回来 缺少一些边 贝叶斯BERT finetune一下
- 没有很好的捕获到local的信息
- 没有采用local的形式 而不是global的形式 所以转化成为启发的形式
- MDP是一个比较重要的内容
- mention当中内容采用average的形式 目前不是非常重要
- 启发式的学习图的方式 来学习边的方法