前记
这篇文章其实是对俊林全能的FM模型和沉重的FFM模型工程实现的个人理解和整理。这两篇文章写得非常通俗易懂,强烈推荐。
问题
1. FM和FFM为什么要做在线召回?
- 我理解是1)加上上下文特征(比如4G),离线召回没办法考虑到这些特点。2)更为实时的特征需要考虑(比如播放数、转评赞数等)
2.FM在线向量检索主要是考虑了二阶项,怎么融入一阶项呢?
图片.png我们在Criteo数据集合的实验结果也证明:如果是FM模型,一阶项是有用的,去掉一阶项,只保留二阶项,AUC大约会掉1个绝对百分点,对于CTR来说,这个差距还是很明显的;而如果是采用DeepFM模型,则FM部分是否保留一阶项对最终结果没有什么影响,这说明DNN的隐层有效地将一阶项的作用吸收掉了。
图片.png
上面两个图的方案都可以。
3. 在线向量检索怎么考虑特征域内部的特征交叉
图片.png在用户的二阶项embedding后添加两位:一位就是用户侧内部特征组合得分,在对应的物品侧位置,增加一位,值设置为1。这样的话,在Faiss做内积的过程中,就将用户侧内部特征组合得分计入;类似地,在物品侧也可以如此炮制。这样就将U和I的内部特征组合融入FFM召回模型中了,FM模型也是一样的道理。
4. 在线向量检索怎么融入上下文特征?
- FM因为平方项是所有向量都累加,所以操作比较暴力:1)所有上下文向量求和得到综合的上下文向量C。2)将在线算好的上下文向量C和这个用户的事先算好存起来的用户兴趣向量U进行内积计算Score=<U,C>;3)将U和C向量累加求和,利用(U+C)去Faiss通过内积方式取出Top K物品
- FFM:1)一组是用于拿Context特征和用户特征域的特征进行特征组合用的,不依赖和物品发生关系,在用户侧在线计算完成,拿到用户特征和context特征进行內积计算(因为跟物品无关,所以其实不影响物品排序,如果是召回阶段使用FM/FFM,是可以不考虑引入的);2)第二组是拿Context特征和物品特征域的特征进行特征组合用的,这个类似用户特征与物品特征组合,离线把特征埋入物品特征中,在线获取特征与用户特征进行组合,一起去相似检索;3)第三组是Context特征用于自身内部特征组合用的,跟用户内部特征或者物品内部特征一样,可以实时计算好放入在线检索向量中
网友评论