中国人工智能学会通讯——深度学习与推荐系统 1.1 协同过滤 (Collaborative Filtering)

简介:

1.1 协同过滤 (Collaborative Filtering)

简单来说,协同过滤是指在预测一个用户对物品的喜好程度时,不仅仅依赖于该用户的历史记录,同时也要考虑其他用户的历史记录。其基本假设是兴趣相投、拥有共同经验的群体未来会喜欢相似的物品。协同过滤建模主要使用用户对物品的历史交互数据,也称为反馈数据。根据交互行为是否反映用户对物品的喜好程度可以把反馈数据分为两类:①显式反馈(explicit feedback),通常是指评分,直接反映用户对物品的喜好程度,例如豆瓣网提供用户对电影1~5的评分;②隐式反馈(implicit feedback),例如点击、购买、看视频、听音乐等行为,其不能直接揭示用户是否喜欢一个物品,但能侧面反映出用户对物品的兴趣。

●显式反馈

image
image

Netflix大赛1将基于显式反馈的评分预测任务的研究和探索推向了高潮。解决评分预测的通常做法是针对Y矩阵中的观察数据进行建模,以达到最小化模型预测打分和实际打分的错误率:

image
image

对于隐式反馈,观测数据(observed data)仅携带正样本信息,而未观测数据(矩阵中的0元素,也称为缺失数据)中含有丰富的负样本信息。因此,考虑缺失数据对基于隐反馈的推荐算法异常重要,在机器学习框架下,根据优化目标函数的不同可以将隐反馈推荐算法分为两大类。(1) 单值学习排序(Point-wise Learning to Rank)拟合模型预测值和Y中的实际值相近。常用的目标函数有两种,基于回归的平方差损失(square loss)时间复杂度,并在预测未知评分任务上可以取得较低的错误率,但在以排序为主的Top-K物品推荐(item recommendation)任务上表现较差[7], 甚至弱于非个性化的基于物品流行度的排序[8]。其主要原因是观察数据中有较强的选择偏差(selection bias),而且缺失数据中含有丰富的负样本信息[9]。因此,在构造实际的Top-K物品推荐系统时,传统评分预测模型完全忽略缺失数据的做法并不可取,考虑对缺失数据的建模异常重要。缺失数据的建模在基于隐式反馈的推荐方法中得到了广泛的研究和使用。

image

●隐式反馈

相比于显式反馈,互联网内容提供商更容易获得隐式反馈,例如电商/视频网站可以从服务器日志中直接获得用户的点击/观看历史。由于不需要用户显式提供打分,隐式反馈中的选择偏差较小,而且其规模相对较大。因此近三年对推荐系统算法的研究更集中在隐式反馈[6,10-17]。

与显式反馈类似,可以将隐式反馈数据描述为一个二维矩阵Y;不同的是这里Y中的每一个元素不是一个具体的打分,而是代表用户是否选择了某一物品2:1代表选择,0代表没有选择。因此,建模隐式反馈更像是一个二分类问题——预测用户选择一个物品的概率。在推荐系统相关的文献中,隐式反馈推荐算法的评测方式通常以物品推荐为主,也就是对每个用户生成一个物品排序,根据用户未来对商品的选择行为来评测排序列表的质量。图2简述了显示反馈和隐式反馈数据上的区别。

image

对于隐式反馈,观测数据(observed data)仅携带正样本信息,而未观测数据(矩阵中的0元素,也称为缺失数据)中含有丰富的负样本信息。因此,考虑缺失数据对基于隐反馈的推荐算法异常重要,在机器学习框架下,根据优化目标函数的不同可以将隐反馈推荐算法分为两大类。

(1) 单值学习排序(Point-wise Learning to Rank)拟合模型预测值和Y中的实际值相近。常用的目标函数有两种,基于回归的平方差损失(square loss)

image

和基于分类的对数损失

image

image
image

还有少量工作探索了列表学习排序(list-wise Learning to Rank)优化推荐模型,例如文献[24]。由于其目标函数通常可以转化为比较对学习排序的形式,这里暂不展开讨论。对于单值学习排序,通常从缺失数据中采样越多的负样本会有较好的结果[6],与此同时需要更长的训练时间。对于基于回归的平方差损失,近期文献[13]提出了一个通用的基于坐标下降(Coordinate Descent)的算法,针对满足k-separable特性的线性模型(如矩阵分解和分解机[25]等),可以在不提高实际计算复杂度的情况下,训练所有缺失数据。该算法不仅适用于文章描述的所有缺失数据统一权重的情况,而且适用于基于物品的非统一权重的情况(见文献[16])。

值得一提的是,许多基于显式反馈的预测模型(如SVD++[1]、timeSVD[4]等)对于隐式反馈同样适用,前提是一定要调整其优化目标函数,以适当的方式将缺失数据考虑进来。

相关文章
|
6天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】讨论深度学习和机器学习之间的区别
【5月更文挑战第3天】【AI 初识】讨论深度学习和机器学习之间的区别
|
10天前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
|
21天前
|
存储 搜索推荐 算法
python推荐系统实现(矩阵分解来协同过滤)
python推荐系统实现(矩阵分解来协同过滤)
|
22天前
|
机器学习/深度学习 搜索推荐 算法
python机器学习:推荐系统实现(以矩阵分解来协同过滤)
python机器学习:推荐系统实现(以矩阵分解来协同过滤)
|
23天前
|
机器学习/深度学习 自然语言处理 PyTorch
fast.ai 深度学习笔记(三)(4)
fast.ai 深度学习笔记(三)(4)
25 0
|
23天前
|
机器学习/深度学习 算法 PyTorch
fast.ai 深度学习笔记(三)(3)
fast.ai 深度学习笔记(三)(3)
34 0
|
23天前
|
机器学习/深度学习 编解码 自然语言处理
fast.ai 深度学习笔记(三)(2)
fast.ai 深度学习笔记(三)(2)
37 0
|
23天前
|
机器学习/深度学习 PyTorch 算法框架/工具
fast.ai 深度学习笔记(三)(1)
fast.ai 深度学习笔记(三)(1)
41 0
|
索引 机器学习/深度学习 计算机视觉
fast.ai 深度学习笔记(四)(3)
fast.ai 深度学习笔记(四)
45 0
|
23天前
|
机器学习/深度学习 固态存储 Python
fast.ai 深度学习笔记(四)(2)
fast.ai 深度学习笔记(四)
55 3
fast.ai 深度学习笔记(四)(2)