SimCSE 如何用对比学习训练句向量?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
分无监督与监督两种说法。无监督 SimCSE 把同一句话经过两次不同 Dropout 得到正样本视图,Batch 内其他句子做负例;监督版本使用蕴含句作正例、矛盾句作难负例。
回答到 InfoNCE、温度和归一化即可,再补两个风险:批内可能出现语义相近的假负例,效果也会受 Batch 大小与语料分布影响。
可以这样答:
无监督 SimCSE 将同一句话前向两次,依靠不同 Dropout Mask 形成一对相近表示,其余批内句子作为负例,再用温度缩放的对比损失拉近正对、推远负对。监督版本可把蕴含句当正例、矛盾句当难负例。它的弱点也来自批内负例:两句如果本来语义相近,却被当成负例推开,就会形成假负例,Batch 越大也不代表负例一定越干净。
核心回答
无监督 SimCSE 把同一句话通过带独立 Dropout 的编码器前向两次,得到一对正样本;同批其他句子作为负样本,用带温度的对比损失拉近正对、推远负对。监督版使用自然语言推断数据:蕴含句作正例,矛盾句可作困难负例。其关键不是普通数据增强,而是用最小扰动构造一致语义并改善句向量空间。
展开说明
对一个 anchor,InfoNCE 让正例相似度相对于批内候选的 Softmax 概率最大。温度越低,模型越关注最相近的负例,梯度也更尖锐。批量越大负例越多,但同批中可能存在语义相同的“假负例”;监督信号和困难负例能提升区分力,也可能因标注域偏差伤害迁移。
工程实践
训练时确认两次前向的 Dropout Mask 独立,分布式训练需决定是否跨卡收集负例,并正确处理梯度。用语义文本相似度和目标检索集共同评估,监控正负相似度分布、各向异性和假负例。推理时关闭 Dropout,固定 Pooling 与归一化配方。
常见追问
- 如果关闭 Dropout,无监督 SimCSE 会怎样? 两个视图几乎完全相同,学习信号退化,论文中性能明显下降。
- 批量越大一定越好吗? 更多负例通常有利,但计算、通信和假负例比例也增加,需要验证最优规模。
- 为什么矛盾句适合作困难负例? 它与原句词汇和主题相近却语义冲突,迫使模型学习比表面重合更细的区分。
一句话复习
无监督 SimCSE 用同句两次 Dropout 作正对、批内句子作负对;监督版再用蕴含和矛盾关系强化语义空间。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。