LET: Linguistic Knowledge Enhanced Graph Transformer for Chinese Short Text Matching学习笔记

上周在组里做了一次分享,介绍了《LET: Linguistic Knowledge Enhanced Graph Transformer for Chinese Short Text Matching》论文中提出的中文短文本匹配的方法,趁假期有空,做一下笔记。

1. 背景与相关技术

1.1 解决的问题与方法

这篇paper中介绍了一种针对中文短文本的交互式的文本匹配方法,记为LET。论文中,作者觉得当前中文短文本匹配的方法中,存在以下两个问题:

  1. 中文文本中存在一词多义的情况,而在中文短文本情况下,由于缺少上下文信息,导致中文短文本中的语义信息未能被充分挖掘。
  2. 中文分词中分词粒度不合适,会导致最终文本匹配的效果。

针对以上两种问题,文章中提出了两个方法:

  1. 引入HowNet外部知识库来帮助解决短文本中语义信息未能充分挖掘的问题。
  2. 利用多种分词工具,建立词网格图,解决分词粒度不合适的问题。

在后面介绍具体模型细节之前,我们需要先了解一下相关背景技术,以便后面更好的理解模型设计与作用。

1.2 HowNet

那么,啥是HowNet呢?
HowNet的官网上,是这么介绍的:

OpenHowNet源自在中文世界有巨大影响力的语言知识库——知网(HowNet)。知网的构建秉承还原论思想,即所有词语的含义可以由更小的语义单位构成,而这种语义单位被称为“义原”(Sememe),即最基本的、不宜再分割的最小语义单位。知网构建了包含2000多个义原的精细的语义描述体系,并为十几万个汉语和英语词所代表的概念标注了义原。

HowNet是一种经过人工整理的语言知识库,里面每一个词有不同的语义,每一个语义下还会拆分更细粒度的“义愿”,该知识库中包含了人对语言的知识与理解。论文中,就是通过引入了这样的外部语言知识库,来帮助模型学习到更多的语义信息。

为帮助理解,下面给出一个栗子:
Hownet example
我们以苹果这个词为例。我们知道,对于苹果这个词,我们可以理解为苹果公司这样的品牌,或者可以吃的水果,即上图中的sense1sense2。HowNet中,又对语义进行细拆,将每一个语义细拆违“义原”,比如sense1下面的[电脑, 样式值, , 携带, 特定牌子],sense2下面的[, 生殖, 水果]。并且HowNet会对每一个“义原”给出一个语义向量。
HowNet中,会对每一个词建立这样一个三层的树结构,从更细粒度来可以每一个词的每一语义。那么,我们可以利用这里面的语言知识,来帮助我们的模型获取更多的语义信息。

1.3 Word lattice graph

这里涉及到上面1.1节所说的建立词网格图word lattice graph的方法。我们知道,对于同一个中文句子,我们使用不同的分词工具,最终的分词结果可能会不一样,而这里面就包含了不同的信息。论文中使用了jieba, pkuseg, thulac这三种分词工具。

我们来看看这个所谓的词网格图是怎么建立的。比如,对于“北京人和宾馆”这个文本,我们按照字拆分,以及通过不同的分词工具拆分,会得到以下三种拆分结果:

[, , , , , ]
[北京人, , 宾馆]
[北京, 人和宾馆]

然后,我们根据这样的拆分结果,可以建立如下的词网格图:
word lattice graph
图中,每一个拆分后的词,都是图中的一个节点,若两个词在原句子中是相邻的,那么这两个词之间有一条边相连。比如,北京人W8与W4之间有一条边相连,W3与W4之间有一条边相连。但是北京人W8与W3之间是没有边相连的,因为这两个词之间是包含关系,而非相连关系。
后面在介绍模型中,我们会详细介绍论文中是怎么使用这个词网格图的。

1.4 Graph attention networks

这里再介绍一下图注意力网络Graph attention networks。图注意力网络是图神经网络中的一种特殊类型,将注意力机制引入到图结构中。

我们以1.3中,以北京人和宾馆构建的词网格图为例,来介绍一下图注意力网络具体是如何的。对于上面这样的图,我们可以表示为
G = ( V , ε ) G=(V, \varepsilon) G=(V,ε)
其中V为图中的节点, ε \varepsilon ε为图中的边。我们用 h i h_i hi来表示图中第i个节点的向量,通过下面公式来表示 h i h_i hi的第 l l l次迭代
h i l = σ ( ∑ x i ∈ N + ( x i ) α i j l ⋅ ( W l h j l − 1 ) ) h^{l}_{i}=\sigma(\sum_{x_i\in N^{+}(x_i)}\alpha^{l}_{ij}·(W^{l}h^{l-1}_{j})) hil=σ(xiN+(xi)αijl(Wlhjl1))
其中, x i x_i xi表示第i个节点, N + ( x i ) N^{+}(x_i) N+(xi)表示图中包括节点 x i x_i xi以及与 x i x_i xi相邻的节点的集合, α i j l \alpha^{l}_{ij} αijl表示注意力系数, W l W^{l} Wl是可训练参数。 α i j l \alpha^{l}_{ij} αijl是通过如下公式得到 α i j l = s o f t m a x j f s i m l ( h i l − 1 , h j l − 1 ) = s o f t m a x j ( W q l h i l − 1 ) ( W k l h j l − 1 ) \alpha^{l}_{ij}=softmax_jf^{l}_{sim}(h^{l-1}_{i}, h^{l-1}_{j})=softmax_j(W^{l}_{q}h^{l-1}_{i})(W^{l}_{k}h^{l-1}_{j}) αijl=softmaxjfsiml(hil1,hjl1)=softmaxj(Wqlhil1)(Wklhjl1)上面的式子中 α i j l \alpha^{l}_{ij} αijl是一个标量,论文中进一步使用多维注意力机制,将注意力系数改为向量,如下 α i j l = M D s o f t m a x j ( α i j l + f m l ( h j l − 1 ) ) \pmb{\alpha}^{l}_{ij} = {MDsoftmax}_j(\alpha^{l}_{ij}+f^{l}_{m}(h^{l-1}_{j})) αααijl=MDsoftmaxj(αijl+fml(hjl1))其中, α i j l \alpha^{l}_{ij} αijl就是前面公式中计算得到的标量, f m l ( h j l − 1 ) = W 2 l σ ( W 1 l h j l − 1 + b 1 l ) + b 2 l f^{l}_{m}(h^{l-1}_{j})=W^{l}_{2}\sigma(W^{l}_{1}h^{l-1}_{j}+b^{l}_{1})+b^{l}_{2} fml(hjl1)=W2lσ(W1lhjl1+b1l)+b2l最终得到的 h i h_{i} hi的迭代公式为 h i l = σ ( ∑ x i ∈ N + ( x i ) α i j l ⊙ ( W l h j l − 1 ) ) h^{l}_{i}=\sigma(\sum_{x_i\in N^{+}(x_i)}\pmb{\alpha}^{l}_{ij}\odot(W^{l}h^{l-1}_{j})) hil=σ(xiN+(xi)αααijl(Wlhjl1))其中, ⊙ \odot 表示两个向量之间的按位乘积。以上,便得到了图注意力网络的向量迭代公式。

由于后面很多地方都会使用到这个图注意力网络的向量迭代过程,因此,为方便起见,我们用如下公式表示 h i l = M D G A T ( h i l − 1 , { h j l − 1 ∣ x j ∈ N + ( x i ) } ) h^{l}_{i}=MDGAT(h^{l-1}_{i}, \{h^{l-1}_{j}|x_j\in N^{+}(x_i)\}) hil=MDGAT(hil1,{hjl1xjN+(xi)})

2. LET

有了上面一些的背景介绍之后,我们接下来就可以详细介绍论文中所提出的模型的具体细节了。

2.1 模型整体架构

首先,我们来看一下这个模型的整体架构。
LET整体架构
这个模型,从下到上,可以分为4个部分,分别是输入模块input module, 语义图转换器SaGT,sentence matching, 以及最后输出的relation classify。

  • input module: 得到word embedding和sense embedding,其中word embedding是每一个句子的词网格图中每个节点的向量,sense embedding是从hownet中得到的词网格图中每一个词的若干个语义向量;
  • SaGT:通过交叉迭代的方式,更新word embedding和sense embedding,最终得到包含上下文信息和语义信息的向量;
  • sentence matching:进行a文本和b文本的交互匹配;
  • relation classify:判断a,b文本的匹配关系

下面,我们对模型的各个部分进行详细介绍。

2.2 input module

由于该论文中介绍的方法是做文本匹配的,因此,模型是输入是两个待匹配的文本,针对每一个输入的文本,我们可以通过1.3节中介绍的方法建立词网格图。

input module在输入文本对之后,会输出两类向量,word embedding和sence embedding。Word embedding就是这里图中每一个节点的词向量,sence embedding就是每个节点的词在hownet中对应语义的向量。我们分别来介绍一下这两类向量是怎么得到的。

2.2.1 word embedding

首先,我们可以将两个文本拆分为字级别的序列,并按照bert的输入方式进行拼接,如下 C = { [ C L S ] , c 1 a , ⋅ ⋅ ⋅ , c T a a , [ S E P ] , c 1 b , ⋅ ⋅ ⋅ , c T b b , [ S E P ] } C=\{[CLS], c^{a}_{1}, ···, c^{a}_{T_a}, [SEP], c^{b}_{1}, ···, c^{b}_{T_b}, [SEP]\} C={[CLS],c1a,,cTaa,[SEP],c1b,,cTbb,[SEP]}其中, T a , T b T_a, T_b Ta,Tb分别表示a, b文本的长度。将上述序列输入Bert之后,能够得到每一个输入字符的输出向量。

然后在词网格图(可以参考1.3节中北京人和宾馆的词网格图)中,每一个词可能是有多个字符组成,那么我们通过对每一个这样的字符向量序列进行注意力池化,得到每一个词的向量,注意力池化的公式如下 u k = M D s o f t m a x k ( F F N ( c k ) ) u_k=MDsoftmax_k(FFN(c_k)) uk=MDsoftmaxk(FFN(ck)) v i = ∑ k = t 1 t 2 u k ⊙ c k v_i=\sum^{t_2}_{k=t_1}u_k\odot c_k vi=k=t1t2ukck其中, c k c_k ck就是文本中第k个字的bert输出向量, F F N FFN FFN表示一个前向神经网络(论文中使用2层网络), t 1 , t 2 t_1, t_2 t1,t2表示词网格图中第i个词在文本中是从第 t 1 t_1 t1个字到 t 2 t_2 t2个字。通过上面公式,我们可以得到每一个词的向量表示 v i v_i vi

由于上面的注意力池化的过程后续也会使用到,因此,我们这里同样将这个过程表示为 v i = A t t P o o l i n g ( { c k ∣ t 1 < = k < = t 2 } ) v_i=AttPooling(\{c_k|t_1<=k<=t_2\}) vi=AttPooling({ckt1<=k<=t2})

2.2.2 sense embedding

2.2.1中得到的word embedding,是通过bert来得到的,由于bert中的self-attention,word embedding中包含了上下文信息。虽然在正常情况下,我们通过上下文信息中能够获取每一个字的语义信息,但是在短文本情况下,由于文本较短,上下文无法提供足够的语义信息。因此,该论文使用了hownet外部知识库来帮助获取每一词下面每一个语义的向量。

我们还是以1.2节中所举的苹果为例,如下图
sense embedding example
苹果这个词可以有苹果品牌和苹果食物两个语义,每一个语义下面都可以有若干义原。首先我们可以对每一个义原的初始向量(论文中是使用HowNet提供的向量)进行图注意力转化(就是1.4节中介绍的图注意力网络),从而获取每一个义原的最终向量。只是1.4节中,我们使用的是每一个词节点的有直接相连的词作注意力,而这里是通过在同一个语义节点下的所有义原作注意力。公式如下 o i , k m = M D G A T ( e i , k m , { e i , k m ′ ∣ o i , k m ′ ∈ O ( s i , k ) } ) o^{m}_{i,k}=MDGAT(e^{m}_{i,k},\{e^{m'}_{i,k}|o^{m'}_{i,k}\in O^{(s_i,k)}\}) oi,km=MDGAT(ei,km,{ei,kmoi,kmO(si,k)})其中 e i , k m e^{m}_{i,k} ei,km表示HowNet提供的义原向量通过SAT转化后得到的向量, o i , k m o^{m}_{i,k} oi,km表示第i个词的第k个语义的第m个义原的向量。在经过图注意力转化得到每一个义原的向量之后,再通过注意力池化,便得到每一个语义的向量 s i , k s_{i,k} si,k s i , k = A t t P o o l i n g ( { o i , k m ∣ o i , k m ∈ O ( s i , k ) } ) s_{i,k}=AttPooling(\{o^{m}_{i,k}|o^{m}_{i,k}\in O^{(s_i,k)}\}) si,k=AttPooling({oi,kmoi,kmO(si,k)})

至此,我们就分别得到了词网格图中每一个词的词向量word embedding和每一个词下的语义向量sense embedding。

2.3 SaGT

在上一步中,虽然我们得到了词网格图中每一个词的词向量word embedding和每一个词下的语义向量sense embedding,但是在短文本情况下,word embedding中只包含了上下文信息,并没有语义信息,sense embedding只包含了语义信息,并没有上下文信息,因此,我们还需要讲这两者进行交替迭代,融合两边的信息。

首先,这里说明一下符号的变化。为了方便说吗后面的向量迭代的过程,将向量符号进行如下变化 v i → h i 0 v_i \rightarrow h^0_i vihi0 s i , k → g i , k 0 s_{i, k} \rightarrow g^0_{i,k} si,kgi,k0上标表示迭代的轮次,0表示初始状态。

在迭代过程中,依次是分别对sense embedding和word embedding进行交替迭代,下面分别进行介绍。

2.3.1 sense embedding迭代

在sense embedding迭代中,分别通过下面两个式子来获取前向的向量和后向的向量 m i , k l , f w = M D G A T ( g i , k l − 1 , { h j l − 1 ∣ x j ∈ N f w + ( x i ) } ) m^{l,fw}_{i,k}=MDGAT(g^{l-1}_{i,k},\{h^{l-1}_{j}|x_j \in N^{+}_{fw}(x_i)\}) mi,kl,fw=MDGAT(gi,kl1,{hjl1xjNfw+(xi)}) m i , k l , b w = M D G A T ( g i , k l − 1 , { h j l − 1 ∣ x j ∈ N b w + ( x i ) } ) m^{l,bw}_{i,k}=MDGAT(g^{l-1}_{i,k},\{h^{l-1}_{j}|x_j \in N^{+}_{bw}(x_i)\}) mi,kl,bw=MDGAT(gi,kl1,{hjl1xjNbw+(xi)})其中, N f w + ( x i ) 和 N b w + ( x i ) N^{+}_{fw}(x_i)和N^{+}_{bw}(x_i) Nfw+(xi)Nbw+(xi)分别表示词网格图中包含节点 x i x_i xi在内的前向连接和后向连接的节点的集合。

然后,对 m i , k l , f w 和 m i , k l , b w m^{l,fw}_{i,k}和m^{l,bw}_{i,k} mi,kl,fwmi,kl,bw进行拼接,得到 m i , k l = [ m i , k l , f w , m i , k l , b w ] m^{l}_{i,k}=[m^{l,fw}_{i,k}, m^{l,bw}_{i,k}] mi,kl=[mi,kl,fw,mi,kl,bw]最后,使用GRU来获取迭代后的 g i , k l g^{l}_{i, k} gi,kl g i , k l = G R U ( g i , k l − 1 , m i , k l ) g^{l}_{i, k}=GRU(g^{l-1}_{i, k}, m^{l}_{i,k}) gi,kl=GRU(gi,kl1,mi,kl)
由此,完成sense embedding的一次迭代。

2.3.2 word embedding迭代

在完成了sense embedding的迭代之后,便可以利用已经迭代后的 g i , k l g^{l}_{i, k} gi,kl向量来进行word embedding的迭代。迭代公式如下 q i l = M D G A T ( h i l − 1 , { g i , k l ∣ s i , k ∈ S ( w i ) } ) q^l_i=MDGAT(h^{l-1}_{i},\{g^l_{i,k}|s_{i,k} \in S^{(w_i)}\}) qil=MDGAT(hil1,{gi,klsi,kS(wi)}) h i l = G R U ( h i l − 1 , q i l ) h^l_i=GRU(h^{l-1}_i, q^l_i) hil=GRU(hil1,qil)其中, S ( w i ) S^{(w_i)} S(wi)表示词网格图中 与 w i w_i wi相连的词的集合。

从上面两边的迭代式子中我们可以看到,sense embedding的第 l l l轮迭代中会使用到 l − 1 l-1 l1轮的word embedding,word embedding的第 l l l轮迭代中会使用到 l l l轮的sense embedding。如此进行若干轮迭代之后,最终得到的word embedding就包含了上下文信息和语义信息,可以用于之后的文本匹配的使用了。

2.4 sentence matching

到上一步为止,input module和SaGT都是a文本和b文本分别在自身内部进行的操作和计算。而到了这一步,便进行a文本和b文本的交互。

在上一步,我们已经得到了a文本和b文本的词网格图中每个节点上的词经过迭代后融合上下文信息和语义信息的向量 h i l h^l_i hil,在sentence matching模块需要将这个信息融入到字符中。

我们以a文本为例。首先,我们通过下面两个公式来对每一个字符的计算 y t a y^a_t yta c ^ t a = A t t P o o l i n g ( { h i a ∣ w i a ∈ W ( c t a ) } ) \hat{c}^a_t=AttPooling(\{h^a_i|w^a_i \in W^{(c^a_t)}\}) c^ta=AttPooling({hiawiaW(cta)}) y t a = L a y e r N o r m ( c t a + c ^ t a ) y^a_t=LayerNorm(c^a_t+\hat{c}^a_t) yta=LayerNorm(cta+c^ta)其中 W ( c t a ) W^{(c^a_t)} W(cta)表示包含 c t a c^a_t cta字符的词的集合。

然后进行a文本和b文本的交互 m t s e l f = M D G A T ( y t a , { y t ′ a ∣ c t ′ a ∈ C a } ) m^{self}_t=MDGAT(y^a_t, \{y^a_{t'}|c^a_{t'} \in C^a\}) mtself=MDGAT(yta,{ytactaCa}) m t c r o s s = M D G A T ( y t a , { y t ′ b ∣ c t ′ b ∈ C b } ) m^{cross}_t=MDGAT(y^a_t, \{y^b_{t'}|c^b_{t'} \in C^b\}) mtcross=MDGAT(yta,{ytbctbCb})注意,上面这两个式子中的 M D G A T ( ⋅ ) MDGAT(·) MDGAT()中的参数共享的,这样设计的话,当a文本和b文本相等的时候,我们计算得到的 m t s e l f 和 m t c r o s s m^{self}_t和m^{cross}_t mtselfmtcross也会相等。

然后,计算 m t s e l f 和 m t c r o s s m^{self}_t和m^{cross}_t mtselfmtcross的相似度 d k = c o s i n e ( w k c o s ⊙ m t s e l f , w k c o s ⊙ m t c r o s s ) d_k=cosine(w^{cos}_k \odot m^{self}_t, w^{cos}_k \odot m^{cross}_t) dk=cosine(wkcosmtself,wkcosmtcross)这里,我们得到的 d k d_k dk是一个标量,论文中为了能够通过更多维度去刻画这个相似度,获取更多信息,使用20个不同的 w k c o s w^{cos}_k wkcos来计算得到20个 d k d_k dk,将这20个 d k d_k dk组成向量 d t d_t dt。然后通过下面公式,最总计算得到每一个字符的向量 y ^ t a = F F N ( [ m t s e l f , d t ] ) \hat{y}^a_t=FFN([m^{self}_t, d_t]) y^ta=FFN([mtself,dt])最后,再通过注意力池化,文本整体的向量表示 r a = A t t P o o l i n g ( { y ^ t a ∣ c t a ∈ C a } ) r^a=AttPooling(\{\hat{y}^a_t|c^a_t \in C^a\}) ra=AttPooling({y^tactaCa})b文本的最终整体的向量表示 r b r^b rb的计算方式也是类似。

2.5 relation classify

然后就是最后一步进行文本匹配的关系判断了。通过如下公式 p = F F N ( [ c C L S , r a , r b , r a ⊙ r b , ∣ r a − r b ∣ ] ) p=FFN([c^{CLS}, r^a, r^b, r^a \odot r^b, |r^a-r^b|]) p=FFN([cCLS,ra,rb,rarb,rarb])其中 r a 和 r b r^a和r^b rarb就是上一步得到的a文本和b文本的整体的向量表示, r C L S r^{CLS} rCLS是在第一步input module中,通过bert得到的CLS位的输出向量。最终得到的p就是模型最终判断得到的a文本和b文本是否匹配的概率值。

最后,模型使用交叉熵作为损失函数,进行模型的训练 L = − ∑ i = 1 N ( y i l o g ( p i ) + ( 1 − y i ) l o g ( 1 − p i ) ) L=-\sum^N_{i=1}(y_ilog(p_i)+(1-y_i)log(1-p_i)) L=i=1N(yilog(pi)+(1yi)log(1pi))

以上,便是该论文所提出的中文短文本匹配模型的整体流程了。

3. Experiments

LET expriments
最后,该论文进行了一些实验,在BQ和LCQMC数据集上验证该模型的效果。论文分别在使用bert和未使用bert的情况下,跟其他同等模型进行比较,效果均优于其他使用bert和未使用bert的文本匹配模型。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值