向量距离计算 java_BERT 词向量之语法树

来自 Word2Vec 的词向量满足矢量相加: “国王 - 王后 = 男人 - 女人“ 。但 BERT或ELMO 给出的词向量编码了上下文信息,不再满足矢量相加。最近两篇文章发现这些上下文相关的词向量学到了语法的树结构【1,2】。这篇文章解读如何从 BERT 词向量提取语法树。

故事要从 Hewitt 和 Manning 的文章 A Structural Probe for Finding Syntax in Word Representations 【文献2】说起。这篇文章发明了一种结构探针“structural probe“,计算词向量在高维语义空间(比如1024维)中的距离,并将其映射到语法树中词与词之间的距离。从下图看出,BERT 词向量几乎完美学到了语句的语法树结构。

1815d3643ee196a2537a080be0e3243c.png
上方黑线为标准语法树,下方蓝线为BERT模型词向量学到的语法树。两者几乎没有区别。

语法树中词与词之间的距离 Tree Distance

这篇文章的第一个洞见是,语法树中词与词之间的距离满足勾股定理,即 Squared L2 distance。文献【1,3】给出了非常清晰的几何图像。即树结构中不相邻词之间的距离由勾股定理给出,如下图右边树的节点A和B之间距离计算公式:

。其中,语法树上的 4 个节点是3维立方体上的顶点。用三维坐标可以表示为,
。文献【3】中给出证明,任何 N 个节点的树,都可以嵌入到 N-1 维的超立方体。

22947d35f9324196f122e89312c8acfd.png

对于更复杂的语法树,文献【1,3】给出了树距离的一般计算公式,即每条边都对应一个新的与之前所有边都垂直的维度。

904b1113b92f62341591ca7ef6b37759.png

如上图语法树,

表示根节点(原点),每条边定义一个 one-hot 矢量,对应6维空间正交基矢量,

这样

节点在语法树空间的坐标为
节点在语法树空间的坐标为
, 而节点
之间的距离通过 Square L2 distance 计算得到:

高维空间词向量之间的距离

现在我们知道了如何计算语法树中两个词

之间的树距离
。接下来介绍如何计算两个词的词向量
在高维隐空间的距离。
只要词向量
之间的距离表现出勾股定理的模式(别名欧几里德距离,L2距离),则可说明 BERT 词向量学到了语法树结构。

计算两个1024维向量之间的距离,最简单的公式是内积距离:

。但这并不是唯一的距离计算公式。一般来说,只要满足三个条件,都是可行的距离定义,
  • 半正定
  • 交换对称
  • 三角不等式

这些条件可以通过一个半正定的测度矩阵

来满足,

这个公式也可以理解为先将 1024 维的词向量线性映射到低维空间,再计算距离。

但这个线性映射矩阵 B 如何选取呢?文章通过训练一个神经网络,来学习 B 矩阵的矩阵元。损失函数设为词向量之间的距离

与词词树距离
的差,

其中

表示不同的语句,
表示第
个语句中词的个数。第一个求和是对所有的训练语句,计算平均距离。第二个求和,是对一个语句中任选两个词的所有可能组合求和。训练的目标是通过误差向后传递,更新线性映射矩阵 B 的参数。

测试运行

文章的源代码开源,Github 地址为:https://github.com/john-hewitt/structural-probes 这个代码提供了预训练的 Pytorch 版 BERT-Large 模型,以及预训练的语法树探针(即线性映射矩阵B的参数)。使用这些预训练模型,大家可以测试 BERT 词向量学到的语法树。

根据说明文档,下载安装,运行Github中提供的最简单的例子,"The chef that went to the stores was out of food"。得到 BERT 词向量学到的树结构如下,树结构中“is”是 “was” 的原型。

d668c1af25b3438816390c084cdfb834.png
本人测试结果

对比 Github 中文章作者运行得到的树结构,两者有微小的差别,即文章作者运行结果正确寻找到了语法树的 Root -- “is”。我测试的结果,BERT 词向量学到的树结构把“out“识别成了语法树的 Root。

e7978ff9686af9fa52bb0a57eb451fa3.png
文章作者在 Github 中提供的 BERT Tree

代码还输了不同词在语法树中的深度,Root 词深度最浅,一般是一个语句的谓语。对于这个简单的例子,我测试运行得到的词深度分布如下,从词的深度来看,"was" 深度最浅,理应被当作 Root,之前所示树结构的画图部分应该有Bug。

1da8b4d5dc8381458025ba30baadca13.png
词在语法树中的深度。最浅的是树的 Root。

文章对一些非常长的语句,对比了词在基准语法树中的深度与在BERT Tree 中的深度。下图横坐标是词在句子中的位置,纵坐标是词在语法树中的深度。灰色原点表示词在基准语法树中的深度(标准答案),蓝色方块是 BERT 词向量学到的语法树中词的深度。可以看到两者比较一致,尤其是两者都学到了语法树的根结点 -- “indicates"。

6adc742023af00e40b26f5e8ac493806.png
词在语法树中的深度对比。灰色原点为基准语法树,蓝色方块为 Bert 学到的语法树。例子语句为,That he was the A’s winningest pitcher during its American League campaign with a 21-9 mark, plus ... this week.

总结

这两篇文章从一个异乎寻常的角度研究 BERT 词向量究竟学到了什么。从结果来看,语法树结构编码在 BERT 词向量中。但BERT 词向量是1024维空间的向量,语法树只是这个巨大空间的低维投影。如果将BERT词向量向其他方向投影,定义新的距离测度,能不能揭示 BERT 词向量学到的其他内容?

参考文献

  • Visualizing and Measuring the Geometry of BERT
  • https://nlp.stanford.edu/pubs/hewitt2019structural.pdf
  • Language, trees, and geometry in neural networks
  • https://dawn.cs.stanford.edu/2018/03/19/hyperbolics/
  • Poincaré Embeddings for Learning Hierarchical Representations
  • Hyperbolic Geometry
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值