Press "Enter" to skip to content

CoSENT:特征式匹配与交互式匹配有多大差距?

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

©PaperWeekly 原创 · 作者 | 苏剑林

 

单位 | 追一科技

 

研究方向 | NLP、神经网络

 

一般来说,文本匹配有交互式(Interaction-based)和特征式(Representation-based)两种实现方案,其中交互式是指将两个文本拼接在一起当成单文本进行分类,而特征式则是指两个句子分别由编码器编码为句向量后再做简单的融合处理(算 cos 值或者接一个浅层网络)。

 

通常的结论是,交互式由于使得两个文本能够进行充分的比较,所以它准确性通常较好,但明显的缺点是在检索场景的效率较差;而特征式则可以提前计算并缓存好句向量,所以它有着较高的效率,但由于句子间的交互程度较浅,所以通常效果不如交互式。

 

上一篇文章笔者介绍了CoSENT,它本质上也是一种特征式方案,并且相比以往的特征式方案效果有所提高。于是笔者的好胜心就上来了:CoSENT 能比得过交互式吗?特征式相比交互式的差距有多远呢?本文就来做个比较。

 

 

自动阈值

 

在文章 《CoSENT:比 Sentence-BERT 更有效的句向量方案》 中,我们评测 CoSENT 所用的指标是 Spearman 系数,它是一个只依赖于预测结果相对顺序的指标,不依赖于阈值,比较适合检索场景的评测。但如果评测指标是 accuracy 或者 F1 这些分类指标,则必须确定一个阈值,将预测结果大于这个数的预测结果视为正、小于则为负,然后才能计算指标。在二分类的场景,我们用二分法就可以有效地确定这个阈值。

 

然而,搜索阈值确实并非二分类所独有,一般的多分类任务其实也存在着同样的需求,所以这里将这个问题展开来谈谈。比如对于分类的预测分布,我们一般是用概率最大的类别,即作为预测类别,但如果是类别不均衡的场景,这样做其实未必是最优的。我们可以通过验证集来搜索一个向量,然后用:

 

作为预测类别,这里的就相当于是多类别场景下的阈值。

 

那幺,怎幺搜索出呢?搜索目标自然是指标最大,但 accuracy 或者 F1 这些都是不可导的,因此梯度下降肯定是不考虑了;而又因为待搜索参数是一个多维向量,所以二分法也不大好用。这里介绍一种名为“Powell 法”的求解方案。

 

Powell 法的数学细节比较多,这里不打算展开,简单来说,Powell 法是一种求解低维无参数优化的算法,它不需要梯度,并且效率也相对较高,这里低维指的是待优化参数通常不超过 100 个(你总不能指望它去求解神经网络)。最关键是,Powell 法在 Scipy 中有现成实现,在 scipy.optimize.minimize 中指定 method=’Powell’ 即可调用它。

 

对于上述问题,参考代码如下:

 

import numpy as np
from scipy.optimize import minimize
def loss(t):
    """这里的y_true.shape=[batch_size],
    y_pred.shape=[batch_size, num_classes]
    """
    t = (np.tanh(t) + 1) / 2
    return -np.mean(y_true == (y_pred * t[None]).argmax(1))
options = {'xtol': 1e-10, 'ftol': 1e-10, 'maxiter': 100000}
result = minimize(
    loss, np.zeros_like(y_pred[:1]), method='Powell', options=options
)
thresholds = (np.tanh(result.x) + 1) / 2

 

 

实验结果

 

有了自动确定阈值的方法后,我们就可以检验分类性能了。笔者在 ATEC、BQ、LCQMC、PAWSX 这 4 个数据集上做了实验,分别对比了 CoSENT、Sentence-BERT 和交互式(记为 Interact)三种方案的效果。公平起见,每种方法都用 Powell 法在验证集上确定最优阈值,然后用该阈值报告测试集的效果,哪怕交互式的也是如此。

 

实验代码:

 

https://github.com/bojone/CoSENT/tree/main/accuracy

 

实验结果如下(指标是 accuracy):

 

 

实验结果显示,从效果上来看,交互式确实是“王者”地位,但是特征式(CoSENT 和 Sentence-BERT/RoBERTa)的效果差距并没有笔者想象中大。客观来说,在 ATEC 和 BQ 两个任务上,交互式 Interact 与特征式 CoSENT 并无显着差异,而在 LCQMC 任务上,交互式 Interact 与特征式 Sentence-BERT/RoBERTa 并无显着差异。

 

唯一拉开明显差距的是 PAWSX,在 《无监督语义相似度哪家强?我们做了个比较全面的评测》 、《中文任务还是SOTA吗?我们给SimCSE补充了一些实验》 [1] 中我们可以发现,几乎所有无监督句向量方法都在 PAWSX 上失效。为什幺呢?因为 PAWSX 的负样本几乎全是“对抗样本”,就是字面重叠度非常高但语义却不同的负样本。所以,对于这种无监督方法“全线崩溃”的“高难”负样本,哪怕用标注数据去训练,也自然需要更深层的交互才能更好地识别出来。

 

 

理论极限

 

有些读者可能会好奇:能否通过理论分析出特征式方案的理论极限呢?可能让人意外的是,这个分析其实不难,而答案是:

 

理论上来说,交互式能做到的效果,特征式“几乎”都能做到。

 

怎幺得到这个结果呢?事实上用本博客以往介绍过的文章就足够了。首先,我们假定正样本对的相似度为 1,负样本的相似度为 0,并且样本对是无序的,即,那幺如果有个样本,那幺我们每两个样本之间算相似度(不管实际的相似度是怎幺算来的),就得到一个相似度矩阵,它是一个“正定对称矩阵”。

 

按照线性代数的结果,正定对称矩阵的 SVD 分解必然是的形式,其中是正交矩阵而是对角阵,那幺我们有。这就表明了,正定对称矩阵一定可以分解为的形式,这等价于说,每个样本可以表示为一个维向量,使得。

 

至此,所有的结果都是有理论保证并且精确相等的,只不过目前的“维向量”实在是太大了,所以接下来应该往降维角度想。此时,我们去年介绍过的“JL 引理”(参考 《让人惊叹的 Johnson-Lindenstrauss 引理:理论篇》 )就可以登场了,它告诉我们,别管原来是多少维的,个向量都可以降到维,而保持内积近似不变,在 《让人惊叹的 Johnson-Lindenstrauss 引理:应用篇》 中我们还近似估计了这个量级应该是左右,所以对于 BERT base 的 768 维向量来说,理论上通过内积来拟合上百万个样本的两两相似度都不成问题。所以,基于内积的、维度达到几百维的“特征式”方案,理论上是可以相当精确地达到交互式效果的。

 

那为什幺在 PAWSX 这样的困难数据集上两者有明显差异呢?个人认为这是“神经网络和 cos 指标的连续性”与“文本匹配天然存在的对抗性”之间的矛盾造成的。

 

神经网络本身就是一个连续函数,然后编码器负责将句子压缩到一个句向量中,其结果的连续性必然是非常好的,这里的连续性,指的是句子的微小改动,导致句向量的改动也是微小的;同时,cos 的连续性也非常好,即如果比较小,那幺和的差距也很小。所以,总的来说就是“特征式”的方案连续性会非常好。但问题是,人设计出来的语言天然存在对抗性,即字面上的微小改动能导致标注结果的巨大变化,经典的就是加个“不”字导致所谓的“语义反转”,说白了就是连续性并不好。

 

于是,在此类任务之下,连续性非常好的“特征式”方案要去拟合对抗性明显的数据集,就会非常困难。当然,前面我们已经分析过理论上是可以拟合的,所以实际上是拟合确实能拟合,但需要训练比较多的 epoch 来“磨”掉特征式方案原有的连续性,但比较多的 epoch 也造成了更严重的过拟合。

 

因此,CoSENT 的训练 loss 也能降到接近于 0(说明拟合能力没问题),但是验证集的效果没有交互式的好。至于交互式,模型一开始就同时接触到了两个样本,在后面的层中模型可以自行拟合和放大差异,从而在交互式方案中连续性与对抗性的矛盾并没有那幺严重,因而效果更好。

 

 

文章小结

 

本文从理论和实验两个角度地探讨了特征式匹配与交互式匹配的效果差距,此外还讨论了多分类问题中阈值的自动搜索问题。

 

 

参考文献

 

 

[1] https://kexue.fm/archives/8348

 

特别鸣谢

 

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注