语义向量相似度之测地线距离

介绍测地线距离在语义向量相似度中的应用。

训练语义向量时,一种方法是使用对比学习。以对比学习方案来说,一般会使用正样本对和负样本对。正样本对就是两个语义基本相同的句子,我们可以认为它们的相似度很高,或者距离很小。负样本对是语义不相同的句子,我们可以认为他们相似度很低,或者距离很大。

正样本好说,两个句子距离很小,标签为1。但对于负样本来说,不管距离是大、很大还是非常大,对应的标签都是0,这样对于负样本来说,我们无法区分不同的程度。

举例来说,对于距离为1的样本对ab和距离为10的样本对ac,我们可以说ab之间更接近。但是对于距离为10的样本对ac和距离为15的样本对ad,我们没法说ac之间更接近,因为距离大了,都属于负样本,其绝对数值就不准了。

测地线距离,简单来说就是两点之间的最短距离,由于流形未必是平直的,因此该距离未必是两点之间的直线距离(欧式距离),经典例子就是从地球的南极走到北极,我们没法穿过地心走直线,只能沿着地球表面先走到赤道然后再走到南极,走了一条曲线(半圆)距离。

在局部范围内(此时距离比较小),地球还是平的,所以欧式距离还是可用的,但是放到“南极-北极”、“南极-赤道”这样的大距离就不够准确了,这就跟刚才的语义相似度场景很相似了——已知的距离(比如欧式距离)在近距离内比较准确,在远距离不准确,本质上就是因为流形不是平直的。

幸运的是,有局部距离就够了,我们将其转化为一个图的问题,可以利用“最短路径”的算法估算出近似的测地线距离。具体来说,我们可以用现有的距离函数算出每个点与剩余点的距离,然后只保留距离最近的k个点(也可以按阈值截断,看具体情况),在它们之间连一条边并标记上距离,这样一来所有点和边构成了一个加权图(我们称之为“k邻近图”),我们就可以用Dijkstra算法来搜索出图上任意两点的最短路径,并计算出它的长度,这就是测地线距离的近似结果。

总的来说,在“相近点的距离比较准、较远点的距离比较不准”的假设下,我们可以用k邻近图加最短路径的方法,估算较远点的测地线距离来作为替代品。由于测地线距离考虑了向量空间的流形状况,所以有可能取得比较好的效果。