前言:这篇文章是阅读石塔西《互联网大厂推荐算法实战》第二章推荐系统中的特征工程的学习笔记,在未来对于特征向量的学习笔记会在此基础上进行补充。编者认为特征工程已经过时的言论是错误的,该言论认为DNN模型可以自主的完成对数据特征的提取,但是在Deep Cross Network网络中,作者直接指出仅采用DNN模型是无法实现对二阶、三阶的特征进行交互的;并且虽然在DIN、SIM模型中可以从数据中挖掘用户的短期兴趣和长期兴趣,是因为模型足够复杂,需要通过复杂的计算才能提取这些兴趣特征。因此,一个好的特征工程在深度学习快速发展的环境还是必要的。
⭕ 表示笔者待学习部分
- 基本概念:
Field
:相当于是特征的集合,例如,特征为视频类别特征中,有【体育、音乐、戏剧】三个类,视频类别就被称为一个Field
Feature
:体育、音乐、戏剧均为视频类别的特征。
文章目录
- 物料画像
- ItemID
- 静态画像
- 动态画像
- 用户画像
- UserID
- 静态画像(用户基本信息)
- 动态画像
- 交叉特征
- 笛卡尔内积
- 交叉内积
- 偏差特征
物料画像
ItemID
在传统的识别任务中,物品的ID往往被认为是无效特征,因为ID是随机的,无法对识别、预测等任务提供有效的信息。但在推荐算法中,虽然本身也没具体含义,但是模型可以通过历史数据,对物品ID进行学习,记住物品ID与用户特征的信号关系。
静态画像
无需通过与用户交互的数据即可获得的特征,一般通过
BERT
/CLIP
对原始图像、标题等信息特征提取。一般分析得到的信息不是一个具体的值,例如在一个新闻推荐中,有【体育、音乐、戏剧】三类,分析后的结果并不是【体育】一个单一结果,而是各个feature的概率【0.9, 0.1, 0.1】💡 一般来说,标签空间肯定不止三个,可能有十几万个,因此,需要有基于内容的Embedding,一般维度为32、64.
动态画像
一种后验统计数据,是通过用户与物料的交互信息提取的特征,一般通过两个维度刻画:
- 时间:全生命周期、过去一周、一天、一小时…
- 对象:例如点击率、转化率、点赞率、平均播放进度…
【弊端】存在幸存者偏差、不利于冷门物品和新物料的冷启
用户画像
UserID
提供了用户侧最个性化的特征
静态画像(用户基本信息)
笔者认为这些基本信息(年龄、位置)对推荐算法的作用不大,对于老用户,他们的行为数据已经可以发挥巨大的作用,而利用老用户的基本信息来预测新用户的兴趣物品的效果是不明显的。
动态画像
从用户的历史行为数据提取他们的兴趣爱好,这个过程能反映用户的兴趣变化
- 实现方法
① 简单方法:通过历史行为数据的Item 多个Embedding池化得到用户向量;
② ⭕
DIN
,SIM
通过在池化中加入attention机制,根据候选物料的不同,从相同的行为数据中提取得到不同用户的兴趣;
- 弊端
方法虽然简单,直接利用用户行为数据即可完成对用户的动态画像描述,但用户的动态画像和CTR建模是合为一体的,在线上完成才能实时的捕捉用户的兴趣。而
DIN
,SIM
模型需要更强大的计算效率,无法满足对于历史更久远的用户行为序列以及实时性的需求,也无法应用于召回和粗排中。
- 解决方法
对用户的动态画像和CTR建模解耦,对提取兴趣的工作从线上转移到线下,在大数据平台下进行用户兴趣的提取,并存入数据库中,用户只需要根据ID查询
【优点】适合召回、粗排阶段、耗时低;
交叉特征
笛卡尔内积
直接对两个Field的每个特征进行两两组合,【体育、音乐、戏剧】和【男、女】两两组合,可以得到【体育+男、音乐+男、戏剧+男、…】共六祖新特征
交叉内积
通过一个用户动态画像的兴趣ID和物料ID进行内积,可以反应用户和物料的匹配程度
偏差特征
点击特征解释:用户点击了不一定是喜欢的,没点击不一定是不喜欢的,这种现象称为“偏差”。
- 位置偏差
【原因】:对于用户喜欢的物品,虽然已经曝光给用户了,但是用户还未刷到该物品,导致模型误认为用户“不喜欢“该物品而导致的偏差;
【解决】:① Aboveclick,只有在点击物品上方的曝光物品才会被用于负样本,因为这些物品已经进入用户的视野; ② 在训练时,利用曝光位置对点击率等指标进行学习,而在预测时,屏蔽曝光位置的干扰,将曝光特征设置为0
- 视频“年龄”偏差
【原因】:发布较早的物品可能会有更多的点击、点赞等
【解决】:⭕ Youtube在训练时将视频年龄作为偏差特征,预测时统一设置为0
- 其他消除偏差思路
CTR在预测时没有考虑到位置偏差,从而导致较差位置的优秀作品的点击率也较低,因此,采用CoEC代替CTR衡量物料的受欢迎程度,将展示位置也作为特征,计算公式如下:
C o E C = ∑ i = 1 N c i ∑ i = 1 N e c i CoEC=\frac{\sum_{i=1}^N c_i}{\sum_{i=1}^N ec_i} CoEC=∑i=1Neci∑i=1Nci