zhougr1993 / DeepInterestNetwork

1.62k stars 558 forks source link

关于负采样的问题 #73

Open Yanglazi opened 4 years ago

Yanglazi commented 4 years ago

为什么负采样不能是序列中的元素呢,这样做会出现什么问题吗?

zhougr1993 commented 4 years ago

分布不一样,因为序列里的元素是用户过去点击过的item,这个和从所有item库里随机选一个用户没点击过的item是完全不同的分布。具体来说就是item出现的概率p(x)不一样。 其实这一点很重要,特别是DIEN里的辅助loss也强调了这一点,不过DIEN的辅助loss当时我在做的时候没有设计得很好,如果考虑contrastive learning的做法把DIEN的辅助loss改成一个CPC的loss理论上会完备很多。

Yanglazi commented 4 years ago

感谢大佬赐教,我刚去看了一眼CPC loss,感觉就是DSSM的loss换了个包装,现在有更深刻的理解和理论支撑,我早些时候用transformer 模型结合DSSM的loss,训练过,可以用transformer模型出的embedding来做召回,不过没想过可以结合两种loss直接来做ctr,这个思路太棒了,还有一个问题想请教您,我在业务中发现用户历史点击行为数据对CTR的精度影响起的作用不太大,反而是很多简单的id类特征起的作用很大,这一点是我数据的原因还是普遍现象呢?

Melaniemod commented 4 years ago

训练集中正负样本的label都是给好了的,但是 valid 和 test 阶段使用的正样本是给定的,负样本是随机采样的吧;这样训练集和测试集数据的分布是不一样的,评估起来会不会有问题呢?或者说为什么不直接从训练集中留一部分做 valid或测试集呢?