深度学习技术在推荐领域的影响极大。本文将推荐算法分为前深度学习时代的传统推荐算法和深度学习算法。
传统的推荐算法最主要包括:协同过滤算法,逻辑回归类算法,因子分解机算法,组合的方法。
协同过滤算法
核心思想:基于用户或物品的相似度,对物品进行推荐。算法工作包括基于User和Item的行为构建共现矩阵,相似度计算,结果进行排序。
1、相似度计算方法:
余弦相似度:
存在的问题:
- 相似度依赖于共同评价的用户数,不是关注评分的多少。
- 举例来说:A用户对电影a,b评分为[1,2];B用户对电影a,b评分为[4,5]。通过计算可以发现他们的余弦相似度0.98。实际上A和B的观影差异较大。
改进的余弦相似度计算:
- 减去纵向的均值(和皮尔逊相似度不一样)。
- 举例来说:A[1,2],B[4,5];减去纵向均值得到A’[1-2.5,2-3.5]和B‘[4-2.5,5-3.5]。再通过计算A’和B‘的余弦相似度能够避免上面提到的问题。
皮尔逊相关系数
向量中心化,减去向量的均值。排除掉用户的评分偏差。
2、UserCF和ItemCF比较:
- UserCF更强的社交属性。相似的用户喜欢什么就推荐什么。发现热点,追踪热点趋势。
- 新闻推荐。
- ItemCF兴趣变化相对稳定的应用。
- 电商推荐
实际应用当中,感觉在召回阶段都可以试一下。
3、协同过滤算法存在的问题
- 热门商品容易与很多商品有相似度
- 长尾item与稀疏向量的item产生相似性就很少推荐(冷启动)。
- 相似度计算复杂度过高。User和Item量级比较大的场景下。
- 利用特征比较有限
- 仅仅利用了用户和物品的交互信息,无法利用用户,物品和上下文的特征。
矩阵分解算法:
解决的关键问题:弥补协同过滤无法处理稀疏矩阵的问题。-->用稠密隐向量表示user和item,挖掘用户和物品的隐含特征和关系。
主要的方法:
矩阵分解协同过滤的共现矩阵得到的。R(nXm) = U(xXk).V(kXm);k隐向量的维度代表向量的表达能力。维度越高的话,表达能力越强,泛化能力越弱。
1、SVD分解:细节见线性代数教材。
- 存在的问题:时间复杂度高。O(mXn^2)时间复杂度。
2、梯度下降法(原始评分矩阵与用户向量和物品向量点积最小)
计算步骤:
- 求特征值和特征向量。得到初始化分解后的U矩阵和V矩阵。
- U和V矩阵预测分数,计算分数与实际分数之间的误差。(损失函数)
3. 梯度方向更新U和V的元素值。重复直到达到停止条件(迭代轮次或loss小于某个值)。
优化改进方案:
- 增加偏置项:消除用户偏差和物品偏差。r = u + bi+ bu + qiTpu
- 有些用户会给比较高或者低的分数,物品会给比较低的分数。(引入用户和物品偏置项)
- 添加历史行为或者时间维度的信息。
3、矩阵分解方法的优缺点
优点:
- 泛化能力较好:通过计算隐藏向量。实际上隐向量是对共现矩阵全局拟合,利用全局信息生成,有更强的泛化能力。
- 扩展和灵活性:Embedding的思想。
- 空间复杂度低。
缺点:
- 很多时候是基于共现矩阵去做。没有办法引入用户,物品,上下文信息。
- 缺少历史行为数据。