一、FM
背景:主要解决大规模稀疏数据下的特征组合遇到的问题:1. 二阶特征参数数据呈指数增长
怎么做的:对每个特征引入大小为k的隐向量,两两特征的权重值通过计算对应特征的隐向量内积
而特征之间计算点积的复杂度原本为
实际应用:在推荐场景中,用户特征和物品特征可以相互组合,例如用户性别男经过onehot编码之后为[0,1],物品颜色蓝色经过onehot编码之后为[1,0],那么组合特征[用户性别=男,物品颜色=蓝]可能会很有用。此时可以用FM模型,对用户性别和物品颜色特征进行组合。
二、wide & deep
https://arxiv.org/abs/1606.07792 2016年
参考:https://blog.csdn.net/google19890102/article/details/78171283
核心思想是结合线性模型的记忆能力和DNN模型的泛化能力,从而提升整体模型性能。
wide 模型:可用线性模型如LR模型,起记忆作用,即从历史数据中发现特征之间的相关性。缺点:1.需要更多人工设计;2.可能出现过拟合;3.无法捕捉训练数据中未曾出现过的特征对。
deep模型:深度学习模型,起泛化作用,即相关性的传递,发现在历史数据中很少或者没有出现过的特征组合,寻找用户的新偏好。当user-item矩阵比较稀疏时,模型会过分泛化,即使部分user-item应该是没有关联的,但模型仍旧可以得到user-item的非零预测,导致推荐并不相关的物品,这时准确性不能得到保证。
将这两个模型结合起来可以更好地在用户的历史兴趣和探索新的兴趣点之间做到平衡。
模型结构:
特征处理:以文章中的场景用户app推荐为例,每一条训练数据的特征包括用户数据和曝光数据,label是用户是否下载。
wide的输入:离散特征以及离散特征之间的组合特征。
deep的输入:1. 连续特征,通过归一化到区间[0,1]后直接输入到DNN中;2.类别特征,通过词典映射成32维稠密向量,词典根据模型训练调整参数。
wide & deep联合训练,输出通过加权方式合并到一起,通过sigmoid激活函数输出。
wide部分对deep模型进行记忆能力的补充,因此小规模的交叉特征即可。
三、DeepFM
https://arxiv.org/pdf/1703.04247.pdf 2017年
将Deep和FM相结合。FM做特征见低阶组合,Deep部分做特征间高阶组合。
DeepFM相对于wide & deep的改进就是将wide人工建立交叉特征变为自动获取交叉特征权重,并且FM和Deep模块共享feature embedding的部分,可以更快的训练。
连续变量可以直接作为单个值输入,或者离散化作为一个向量输入。标准代码中是将它直接作为DNN的输入。
以“看点日报”优化算法为例:
输入分为如下4组:
- 连续型特征:这部分特征的典型代表为文章CTR,文章点赞数,评论数等。
- 单值离散特征,这部分将进行embedding操作,典型代表为文章分类信息,用户收入等级,学历等级等。
- 多值离散特征:这部分将进行加权embedding操作,典型代表为用户画像信息,假设用户有多个分类的兴趣爱好,如动漫与娱乐,在lookup table中其向量分别为v33与v3,其中动漫点击10次,娱乐点击2次,那么最终以点击加权的embedding特征为(10/12)v33+(2/12)v3
- 向量特征:通过PCA等手段将向量特征进行维度变换后作为embedding输入模型,典型代表为文章的TFIDF向量,用户预训练向量等。
优化后的DeepFM主要由三部分组成,分别为 - FM部分:该部分接受全部的embedding特征,进行二交叉,输出结果至concat层
- Deep部分:该部分接受全部的embedding展开特征与连续特征,经过多层的全连接网络,输出结果至concat层
- Wide部分:该部分接受离散特征进行LR,将最终结果输出concat层
推荐领域中的向量召回之双塔DSSM
Deep Structured Semantic Models
LSA 潜在语义分析
分布式假设:一个单词的属性是由它所处的环境刻画的。如果两个单词在含义上比较接近,那么他们也会出现在相似的文本中,也就是说具有相似的上下文。
构建一个“单词-文档”矩阵:矩阵的每一行表示一个单词,矩阵的每一列表示一个文章,第i行第j列的值表示第i个单词在第j个段落里面出现了几次或者表示该单词的tf-idf值。
将这个矩阵基于奇艺值分解SVD:
优点:对文本特征维度降低到一个低维语义空间,减轻一词多义和一义多词问题。
缺点:无监督模型,没有利用点击信息。
DSSM 2013年
总体分为三层结构:输入层、表示层和匹配层。
输入层:将文本映射到低维向量空间转化成向量提供给深度学习网络。主要的技术点是Word Hashing。方法:将每个单词word表示成n-gram形式,例如将每个单词写成trigram的形式:good -> “#go”,“goo”,“ood”,“od#”。这样原本500K的vocab_size能够简化为30k的Token size。
表示层:即图中的Multi-layer nonlinear projection 和 semantic feature。
匹配层:即图中计算query和
训练方法:选择query和文档集合D,其中
应用时可以离线计算item/doc/广告的embedding,线上计算query/user的embedding,线上计算相关性。
优点:
- 有监督,使用最大似然函数进行优化
- 使用word-hashing方法解决大规模且稀疏的词典问题
- 将用户的Query行为和Document映射到同一语义空间中,通过余弦相似度计算相关性。
缺点: - word hash可能造成词语冲突;
- 因为表示层用的是词袋模型BOW,不考虑词序信息,损失了上下文语序信息
- 仅用点击来判断正负样本,没有考虑到position偏差,产生的噪声较大
因为cos的表达是有限的,很难提取交叉特征,所以双塔还是比较适用于召回场景。
DSSM双塔由很多种变形,例如CNN-DSSM、LSTM-DSSM,sentence BERT,其本质只在于所使用的特征抽取器的不同。