Open xzhws opened 2 years ago
楼主好,我看了您的有监督simcse的loss实现,发现对于三元组{x_1, x_2, x_3},只考虑了利用{x_1}和{x_2}的相互关系,及两者作为正样本,而负样本的选择是整个batch的其他样本作为负样本。
但考虑一个情况,如果{x_1, x_2}是真实正样本关系,{x_1}和{x_3}是真实负样本关系,那如果想利用真实负样本参与训练,请问在loss里面怎么区分真实负样本和batch内的负样本呢?谢谢您
https://github.com/vdogmcgee/SimCSE-Chinese-Pytorch/blob/e04263b1846fceef8dff60ead29d35e02947918b/simcse_sup.py#L130
你好, 根据我的理解 , 目前的loss实现方式 , x1, x2 互为正样本 , x3作为他俩的负样本 , 与batch内其他负样本并无差异 , x3作为负样本参与了训练 , 但由于他自己没有对应的正样本 , 所以算label的时候把每个三元组的x3剔除了 , 这样做可能不够优雅 , 具体可以看看论文和官方的实现 , 我看的不够深 , 可能理解有一些偏差 .
楼主好,我看了您的有监督simcse的loss实现,发现对于三元组{x_1, x_2, x_3},只考虑了利用{x_1}和{x_2}的相互关系,及两者作为正样本,而负样本的选择是整个batch的其他样本作为负样本。
但考虑一个情况,如果{x_1, x_2}是真实正样本关系,{x_1}和{x_3}是真实负样本关系,那如果想利用真实负样本参与训练,请问在loss里面怎么区分真实负样本和batch内的负样本呢?谢谢您
https://github.com/vdogmcgee/SimCSE-Chinese-Pytorch/blob/e04263b1846fceef8dff60ead29d35e02947918b/simcse_sup.py#L130