什么是推荐系统

  • 是拟合共现。例如以往中用户u交互了一系列物品,其中类型a的物品占大多数,还有很多类型为b的曝光物品被交互的比例很小,那么模型就会学到用户u和类型a的共现概率是比较高的,当然,类型ab要作为一个特征让模型感知到(这也说明标签体系建设和特征区分度的重要性)。从这方面看,推荐系统可以理解为通过交互历史拟合出用户的当前的query,然后使用标签体系来检索候选物品(因此让模型感知到用户实时行为是很重要的,这点可以经由实时序列和时间、位置等上下文来体现)
  • 从历史看:让用户表示和其交互过的物品表示相接近(如DSSM、pinsage),这样某个用户交互过的物品会有比较相近的表征,同时该用户交互过的物品集和负例物品集表征距离比较远。例如,如果用户侧使用年龄这种泛化的特征,那么模型大概率可以将不同年龄层偏好交互的物品表征给区分开来。如果用户侧使用的是id这种强特征,那么模型的学到的物品表征的差异将会更大,相当于在所有样本中,男-女这个用户表征尽可能的在样本空间划了一条线,一侧是男性比较喜欢的,一侧是女性比较喜欢的(svm),但用户表征是id的话相当于在样本空间中圈了很多个小圈,每个小圈是这个用户交互过的物品,最终交集较多的用户表征更近一点,没有交集的用户表征离得远一点。同样,经常在不同的用户圈子中共现的物品也更相似一点。这样有一点好处,给某个用户做推荐时会优先给这个用户推荐和他交集最多的另一个用户交互过的其他物品,俗话说物以类聚人以群分,这也是协同过滤的思想。但也有一点坏处,就是过拟合,特别是那些交互特别稀疏的用户,他可能和别人的圈子交集得特别少,那他这个圈子的物品表征很可能和其他物品差的非常远,或者有很近的物品但其实只是参数凑巧在一块而已,那么使用这些“离得近”的物品给他推荐效果就非常差了,所以在使用id这类特征的时候就经常需要使用l2正则化、频率过滤等手段来防止用户表征出现一枝独秀,天马行空的情况了,其实对用户做哈希一定程度上也可以缓解这种情况,但哈希毕竟不可控,可能两个差异比较大的人就分到一个桶里面去了呢(实践中哈希的离线效果还行其实,也省了id-index映射的麻烦)。
  • 从演化看:让一个圈子里面共现的物品相似是经检验有效的(再谈尿不湿啤酒),但有时候我们也希望带有一点预见性,或者说顺序性,又或者说猜测用户下一个物品想看的是什么(这里当然要现有实时性,至少要有实时序列作为特征),比如说电脑和键盘,这两个共现很高,但顺序上看一般是电脑先,然后才是键盘,如果说用户现在再看电脑,你给他推键盘是没什么大问题的,但是如果他现在是在看键盘,这个时候推电脑是合理的吗?他在看键盘的话那是不是很有可能他已经有了电脑呢?现在的方法比如说dien是用了循环神经网络来捕获这种顺序性,但是循环神经网络并非总是有效(太菜了没实践出效果)并且速度上比较慢,容易被工程兄弟质疑,何解?
  • 多目标。比如原来有一个ctr目标,现在运营说提高一下时长、点赞,于是给模型多加一两个预测头,新加两个label,改造成MMoE,或者简单的只是用时长和点赞给样本加了个权。本质上是让模型多关注那些时长长、点了赞的样本(加权的话一般都会损害原先ctr的指标,多目标做得好的话可以持平,但很难比原来还好),最终很可能时长上去了,那些本身内容短的也被模型抛弃了。
posted @ 2023-10-31 17:07  风和雨滴  阅读(36)  评论(0编辑  收藏  举报