目前在做电商推荐业务, 对一般公司的推荐流程有了一个初步的了解,现在过来总结一些。
以前在学校接触到的电商推荐例如天猫的推荐比赛等,都是很小的数据集,然后那时候采用的方式都是把大部分精力放在模型的选择、组合以及参数的调整上,但是这种思想模式到了有一定数据积累的公司,侧重点就要发生变化了:因为数据量大了。这里会涉及到分布式存储和分布式计算。部门做推荐首先是对每个用户选择出一部分用于CTR预估的候选集, 因为如果把整个直接用模型跑,会很慢,达不到实时响应推荐的目的。因此,推荐基本上分为了两个步骤:1)为每个用户确定一个精简的候选集, 这个集合的特点是,用户感兴趣的商品绝大多数都在这里面,即准确性较高,同时物品多样性也应该比较高。2)打分模型。在该精简的候选集的基础上,再在分布式集群上跑, 对候选集中的商品进行排序打分,因为数据量少了,可以在达到400ms的实时推荐效果。
在第一步确定候选集的过程中,通常不需要特别复杂的模型. 因为一是考虑到这个候选集是应该包括该用户所有可能感兴趣的商品,这个粒度比较粗糙;二是生成候选集的这个模型最后可能会上线,所以不能要求时间复杂度太高。目前公司第一步生成候选集的方式主要用到了两种:1)Item-based CF, 2)根据商品点击率等确定的热门商品。也查过了一些资料,看到美团的召回策略也是几个基础的模型:
(1).User-Based 协同过滤:找出与当前User X最相似的N个User,并根据N个User对某Item的打分估计X对该Item的打分。在相似度算法方面,采用了Jaccard Similarity:
(2).Model-Based 协同过滤:用一组隐含因子来联系用户和商品。其中每个用户、每个商品都用一个向量来表示,用户u对商品i的评价通过计算这两个向量的内积得到。算法的关键在于根据已知的用户对商品的行为数据来估计用户和商品的隐因子向量。感觉类似于矩阵分解策略。
(3).Item-Based 协同过滤:先用word2vec对每个Item取其隐含空间的向量,然后用Cosine Similarity计算用户u用过的每一个Item与未用过Item i之间的相似性。最后对Top N的结果进行召回。
(4).Query-Based:是根据Query中包含的实时信息(如地理位置信息、WiFi到店、关键词搜索、导航搜索等)对用户的意图进行抽象,从而触发的策略。
(5). Location-Based:移动设备的位置是经常发生变化的,不同的地理位置反映了不同的用户场景,可以在具体的业务中充分利用。在推荐的候选集召回中,根据用户的实时地理位置、工作地、居住地等地理位置触发相应的策略。
在利用上述模型产生出候选集之后对候选集进行融合,然后在该精简的候选集的基础上对候选集中的items进行打分排序,这里排序算法一般会使用到机器学习模型以及深度学习模型,此外,这里特征的提取和选择也是一个大工程, 公司的打分模型的特征维度在40万左右。美团也披露了其在探索深度学习模型时用到的特征提取和特征选择方法。
特征提取:从原始数据出发构造新的特征的过程。方法包括计算各种简单统计量、主成分分析、无监督聚类,在构造方法确定后,可以将其变成一个自动化的数据处理流程,但是特征构造过程的核心还是手动的。
特征选择
后面就是模型的选择,融合以及调参工程了。