-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于loss中向量的拼接 #8
Comments
主要参考的这篇文章,提到了这个trick:https://zhuanlan.zhihu.com/p/87384188 这个trick是我们工作早期在探索有监督场景下提升性能用到的。从早期验证集的实验结果来看确实使用这个trick会有少量的性能提升(记得在0.3~0.5个点左右),因此我们在之后的有监督实验中(包括复现SBERT结果的实验、结合对比损失joint training的实验)也都加入了这个trick去提升性能。不过在最终论文写作上,因为把重心放在无监督那一块了,就没有强调这个监督损失中的trick,也没有放对应的消融实验结果。 |
所以公式(2)里的其实应该是f = Concat(r1, r2, |r1-r2|, max(r1, r2)**2)了,嗯嗯,谢谢,没问题。我还有一个题外问题, 在对比学习中,你们用的batch_size=96, 意味着每一个data point, 它的In-batch negative samples = 190,这个比例是是通过实验发现是最好的吗?FlatNCE提到了小批次会导致浮点误差最终会让对比学习效果变差,不知道你们有没有一些实验上的看法。还有就是对于负样本的选择,这里只是in-batch negative samples, 会不会相对局限?毕竟实际负例是95个。 |
96其实是经验上的选取,是我们在显存的限制下(对bert-large而言)选取的尽可能大的batch_size,也是考虑到当时图像领域的对比学习已经有batch_size越大效果越好的结论。之后我们也在bert-base、无监督实验的设置下,补充了不同batch_size对最终结果影响的实验(论文5.5节),不过我们的结论是batch_size似乎对STS最终结果的影响不是特别显著。 关于负样本,我理解的它的作用就是把不同样本的表示推远,从而提升表示空间的uniform。如果只使用正样本对训练,最终会发生坍缩,即所有样本编码结果都相同。NTXent的in-batch negative samples算是最简单、基础的设置,可能会有一些局限性。最近一年也有蛮多的hard negative mining方面的工作,也是挺有意义的一个探索方向,能提高数据的效率,用小batch达到类似大batch的效果。此外,如果有人工标注的训练样本的话,也可以利用这些标注数据作为对比学习中的正样本或负样本(如SimCSE融合监督信号的方法)。 |
谢谢回答,我的做法就是用了一个已经训练好的很强的语义模型(paraphrase数据)来做检索,返回的数据,做一个分析获得一个合理的threshold来选择hard-negatives, 然后再随机抽取其他”简单“的负样本,最终组合成的batch对于效果也有一定的提升。 |
在一些Loss中能看到添加了额外的一个向量的拼接if concatenation_sent_max_square: torch.max(rep_a, rep_b).pow(2),请问有实验对应的结果吗?SENTENCE-TRANFORMERS的默认拼接就如论文所引用concat(u, v, |u-v|),已经在大量实验上证明其有效性(更好的句子语义相似表示),不知道如寐建议的这个trick的出处或者数学含义是什么?
The text was updated successfully, but these errors were encountered: