推荐系统笔记4-建立大规模分类模型
分类问题就是寻找一个超平面,分开不同标签的数据集。
一、分类模型应用
1.1、点击率预估模型:
1.1.1、 传统的以统计特征来做点击率预估,即用前几天的统计来做下一天的点击率预测,如下式所示:
其中ad_ctr表示历史的具体广告点击,cate_ctr表示一个具体的属性类别,可能包含多个ad类别,显然,当具体的广告数过小时,点击率不具备统计意义,所以需要用cate_ctr代表ad_ctr;
1.1.2、 模型做点击率预估,包括Logistic regression或者DNN等等,如下图所示:
1.1.3、 一般线上CTR预估系统示例如下:
也就是将一些数值特征用GBDT做离散化处理(GBDT具备组合特征能力),然后拼接原来的类别特征,使用FM训练模型并提取高阶特征,再次用LR训练ctr模型;
1.2、用户偏好预测
基于ItemCF的推荐算法调用示意图如下:
上述推荐算法的核心是三个部分,match->rank->rerank,其中这个算法会存在一个Trigger Selection Problem(触发选择问题)?这个问题是指物品冷启动吗(这里不甚理解)?那么我们可以借助用户偏好模型来帮助解决上面的问题;
用户偏好模型的作用主要是预测用户下⼀个浏览或者购买的类目、用户性别预测、用户年龄预测等,假设是物品冷启动问题,且预测用户下一个浏览的类别是A,如果新物品B和A相似,那么将B推荐给用户;
那么如何构造用户偏好模型呢?可以将其抽象化为基于时序行为的二分类模型(用户-商品对,标签喜欢-不喜欢),对于二分类模型,就涉及到特征部分,一般作如下处理:
-
统计量、变化类特征(人工组合)、序列类模型(部分自动组合).
-
分析先行:比如对于⼀些商品trends变化和目标相关性进行分析.
- 人工组合特征:
- 部分自动组合方式.
-
模型⽤法:做独立model;做进feature.
二、模型构建
2.1、低维线性模型: 最经典的便是LR模型了,如下:
2.2、非线性模型: CART、RF、GBDT、FM、DNN等等;
其中对于FM模型做个简单总结(其他模型应该都很熟悉了),其公式如下:
- FM 受到前面所有的分解模型(如MF、SVD、SVD++等)的启发;
- 每个特征都表示成embedding vector,并且构造二阶关系;
- FM 允许更多的特征公程,比如可以使用上下文信息、环境信息作为特征加入特征矩阵;
2.3、模型融合: 比如经典的GBDT+LR,以及DNN+GBDT(原文paper),如下所示:
2.4、特征介绍:
2.4.1: 特征分类:
2.4.2:特征组合
Dense特征组合
- A. 将⼀个特征与其本⾝或其他特征相乘(称为特征组合)(⼆阶或者⾼阶)。
- B. 两个特征相除。
- C. 对连续特征进行分桶,以分为多个区间分箱。
ID特征之间的组合
- D. 笛卡尔积:假如拥有⼀个特征A,A有两个可能值{A1,A2}。拥有⼀个特征B,存在{B1,B2}等可能值。然后,A&B之间的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)}。
2.4.3、特征选择
为什么要做特征选择:
- 剩下的特征与目标target应该更加相关
- 剩下的特征之间冗余度低
特征选择方法分为3种:
- Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
- Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
- Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter⽅方法,但是是通过训练来确定特征的优劣。
总结常用的特征工程如下图所示:
举一个今日头条开源的特征工程示例(传送门):
- 第一类是相关性特征,就是评估内容的属性和与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离可以得出。
- 第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。
- 第三类是热度特征,包括全局热度、分类热度,主题热度,以及关键词热度等。内容热度信息在大的推荐系统特别在用户冷启动的时候非常有效。
- 第四类是协同特征,它可以在部分程度上帮助解决所谓算法越推越窄的问题。协同特征并非考虑用户已有历史。而是通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力。
在结束以前,我想介绍一下16年google开源的一篇论文关于Wide & deep learning for recommender systems(给个传送门),其典型结构如下:
对于谷歌所使用具体训练模型如下图:
deep部分使用Embedding+Relu三层DNN训练,Wide部分使用交互特征,最后使用sigmoid函数并用logloss来进行BP反向误差传播;具体的实现细节可参考论文和(该笔记)。