本文为DeepCTR学习交流小组在0113-0120期间的部分讨论内容的记录,本期整理的主题包括图算法的应用,推荐冷启动,多任务学习,召回模型以及面试求职刷题等方面。由于时间和原因并不能完整记录所有讨论内容,请大家谅解~
Node2Vec得到embedding后计算出的距离不符合逻辑
提问者:想请教大家一个问题,Node2Vec嵌入以后计算的距离有点不符合逻辑,有的点直接连接算出来的距离却比path为3或者4的点对距离还要大,有人遇到过这个问题吗?
大佬A: 图中的边是否有权重?
提问者:有的,感觉和边权有关。刚刚和同学讨论,他提到了网络里的聚类效应,也可能影响了这个距离。
大佬A:另外,还可能是游走的时候,采样的问题,因为边你也加了权重。
大佬B: 我觉得是权重的问题吧,你提到的相邻的边,权重是不是比较大呢
提问者:都不大,边权为1或者是2
大佬B:如果权重差不多,我觉得应该是图结构问题吧。因为随机采样的时候,跳转概率会受到权重的影响,所以生成的序列也会受到影响,我猜测出现你这种情况可能恰好是path=3或4的节点刚好与近邻节点是邻居,也就是受到了结构的影响
提问者:path=3或4的节点刚好与近邻节点是邻居,能否再解释一下?
大佬B:图里a,b是直连的,path=1,ac的path=3,但是算上边权的话ab的权重是2,ac之间权重是3。这样很可能得到的结果是ab的距离比ac要大。
关于图网络在推荐场景的应用
大佬A:昨天我问了下知识图谱做embedding特征的可行性,记得有人问我GNN上线了没?DeepWalk GraphSAGE作为与训练的方式上线了,GAT等试了没效果,估计和GraphSAGE重复了。
大佬B:实体节点里除了ID类特征还有别的吗
大佬A:没有的,纯ID类特征。
大佬B:不是hin?就是一个id类的graph?
大佬A:嗯 只加id就够了
关于推荐系统冷启动的问题
提问者:关于推荐系统冷启动都有什么好的算法和技术吗?之前一直topk和onboarding label容易出现马太效应
大佬A:业内有在用多臂老虎机解决冷启动问题的吗?
大佬B: e-greedy最简单好用
大佬C:我们目前用的汤普森采样
大佬B:楼上怎么和召回排序算法结合起来的?
大佬C:EE是独立的链路,每天给一定比例的流量曝光,不参与其他内容的排序。
大佬D:上了EE点击率等指标应该会掉,你们怎么权衡这个事情呢
大佬C:掉指标是正常的,但是对生态有帮助
大佬D:你们生态的指标大概有哪几类?
大佬C:基尼系数,新增优质内容占比等
大佬B:你们现在基尼系数多少?
大佬C:这个不方便透露~
大佬E:你们有基尼系数的实现代码吗或者原理解释
大佬F:李航统计学习方法那本里有,一般在决策树章节
关于多任务学习模型ESMM的若干问题讨论
讨论一
esmm 训练模型的时候 最小化pctr和 pctcvr的loss 最后出来俩模型,pctr和pcvr,其中pcvr模型是间接得到的。我的理解是,训练的时候pctr和pcvr可以使用相同的模型结构和特征,不知道理解的对不对?
回答:对的
讨论二
最近看了esmm论文,有点问题,请教各位:
1.ctcvr 模型就是用避免直接学习点击--》购买的 model,直接从 曝光-点击(ctr), 曝光-购买(ctcvr)来估计 ctr ,这样理解对么?
2.既然能够得到ctcvr(我理解就是曝光到最终转化的概率),那么需要求cvr点击到购买的转化么?我们业务主要就是推荐转化,我理解为就是从曝光到转化。是不是广告领域需要在不同阶段的转化,不同计费?
3.如果曝光-点击,曝光-购买,建立个模型ctcvr,那如果有更多个阶段的转化,理论每个转化路径都可以建模了?
回答:
1.是这样
2.确实是click和转化是两个定价
3.也就是其他行为比如电商里面收藏啊这些都可以用类似esmm的办法去建模,可以看下ESM^2 《Conversion Rate Prediction via Post-Click Behaviour Modeling》(https://arxiv.org/abs/1910.07099)
讨论三
ESMM的损失函数对于曝光未点击样本当作了cvr任务的负样本,实际上未点击样本我们并不知道是否可能发生转化。
另外就是对于点击且转化样本 相当于是给ctr任务的样本加权了 更新的 2*ctr_loss +cvr_loss。这个感觉说的过去,因为既然转化了那用户对其点击的兴趣可能比点击未转化的高
关于双塔模型的来由
提问者:各位大佬,双塔的网络结构是为了解决啥问题啊?
大佬A:双塔当初不为了解决啥,是从微软文本匹配问题得到的思路,把推荐问题看做user和item的匹配问题。不过双塔有一个独特的优势是两个塔互相独立,可以各自缓存,线上infer就飞快
关于Transormer中的masked multi head attention
提问同学:请教一下这个masked multi head attention的masked的意义不,专门画了图记忆,网上说是masked是已经产出sequence的,应该如何理解
大佬A: 在训练的过程中 为了加快收敛一般会采用teacher forcing策略 也就是会把待解码的序列一次性的输入给解码器。
因为self-attetion是并行的,不像RNN那样有天然的顺序,所以他会看到待解码词未来时刻的词,而这样解码是不符合现实的,所以把待解码词未来时刻的词mask掉,来模拟解码时逐个时刻的求解过程
举个例子,
i am vegetable ---> 我贼菜
正常情况的解码,应该是
[go] ---> 我
[go],我 ----> 贼
[go],我 ,贼 ---> 菜
为了加快收敛,解码的时候会把 我 贼 菜 全都输入给解码器,但是你解“贼”的时候,“菜”还是未知的,不能让模型提前获取到“菜”的信息,所以把“菜”mask掉提问同学B:
这句为了加快收敛是什么意思呀?为什么一起输入就会加快收敛,一个个进去就不加快呀?
我好像知道了,这里采用了并行,然后就会快,比那个lstm不能并行只能按顺序一个个输入运算要快,大佬,您觉着我说的对吗?所以收敛换成并行是不是更合适?大佬A:
不是。因为如果你按照经典的解码方式,可能会出现误差传导的问题。
还拿“我贼菜”做例子,经典解码是
[go] ---> 我
然后你要把上一时刻的输出“我”当作下一时刻的输入,但如果你这一时刻的输出错了,比如输出变成了 [go] ---> 贼
那你后面就全错了
后面就得迭代更多的轮次来试图修正这种错误 所以为了防止这种错误 会在训练阶段直接输入正确答案,而不用输入上一时刻的输出,这样就能保证解码的时候尽可能都是正确的了 从而加速了收敛提问同学B:
那transformer的encoder端输入的时候,把整个句子输入进去,此时这个multihead attention的优势是并行对吗大佬A:
一方面是并行,另一方面 有些实际应用上发现 像LSTM这种网络 当句子太长的时候 会偏向于记住靠后时刻都信息 transformer采用self attention 一定程度上也能缓解这个问题
背包九讲
大佬A:背包九讲看前面三张感觉面试就够了
大佬B:和剑指比怎么样??
大佬C:可以理解为背包九讲是专门讲有深度的 dp。
大佬D:背包九讲就那么几页,但是我从来都看不完
大佬A:找工作而已,不用看完
大佬D:acwing上背包九讲各种背包问题的题,看完可以刷一刷
大佬E:推荐一本书 算法笔记 胡凡写的
大佬F:https://www.zhihu.com/people/wang-jian-25-7/posts 这里面记录了面试遇到的leetcode的题
大佬C:分享一下存的干货。https://www.cnblogs.com/grandyang/p/4606334.html
完)