本文始发于个人公众号:TechFlow,原创不易,求个关注

今天是机器学习专题的第29篇文章,我们来聊聊SVD在上古时期的推荐场景当中的应用。

推荐的背后逻辑

有没有思考过一个问题,当我们在淘宝或者是某东这类电商网站购物的时候。我们一进首页,就会看到首页展出了很多商品。这些商品往往质量很高,很吸引人,一旦逛起来可能就没个结束。那么问题来了,电商平台拥有那么多商品,它是怎么知道我们可能会喜欢什么样的商品的呢?这背后的逻辑是什么?

简单来说在这背后,平台端的算法做了两件事情,第一件事情是召回,第二件事情是排序。本质上来说和搜索引擎做的事情是类似的,只是不同的是搜索的时候我们有搜索词作为输入,而首页的推荐是没有任何显性的输入信息的。所以召回的时候只能根据用户画像的一些特征和用户之前在平台上的行为来作为特征召回商品,召回了商品之后再用一个模型预估用户点击的概率,根据这个概率进行排序。

虽然召回-排序的框架没有变,但是召回的算法、逻辑以及排序的算法和逻辑一直在迭代。尤其是召回模型,从一开始的协同过滤再到后来的向量召回、双塔模型以及树模型等等,有了巨大的进步,模型的效果自然也有了一个质的飞跃。

今天我们来着重聊聊协同过滤,虽然这个模型非常简单,目前也几乎已经退出历史舞台了,但是这不妨碍它仍然是一个经典的算法,值得我们学习。

协同过滤的原理

协同过滤的原理非常简单,一句话概括,就是寻找相似的商品以及相似的人

因为在平台当中的商品和人可能数量都非常大,当我们要进行推荐的时候,我们不可能穷举所有的商品来进行预测点击率,这显然是机器无法抗住的。所以我们希望把用户在平台上的行为使用起来,让用户的行为给平台作为指引。根据用户的行为寻找出行为相似的用户以及相似的商品

所以协同过滤有两套逻辑,也可以认为是两种做法。第一种做法是user-based也就是寻找偏好相似的用户,这个不难理解,比如说经常买文具、买书的大概率是学生。假设我们知道了A和B行为相似,也就是说他们可能有相似的喜好。那么假设A购买过商品1并且给出了好评,而B没有购买过,那么很有可能B也会喜欢这个商品,所以我们就可以推荐给B。

第二种做法自然就是item-based,比如你搜索点击了一个商品A,平台会将和这个商品类似的商品BCD推荐给你,会放在商品详情页的下方的猜你喜欢当中。比如你看的是衬衫,它可能会给你推荐别家的衬衫,也可能给你推荐西裤或者是领带。本质上逻辑是一样的,因为这些商品和这件衬衫的相关度比较高

下一个问题是用户和用户,商品和商品之间的相关度是怎么来的呢?

答案很简单,是通过这个矩阵来的:

我们观察一下这个矩阵,这是一个用户和商品的相关行为矩阵,每一行表示一个用户的行为,每一列表示每一个商品的销售情况。也就是说我们可以用这个矩阵当中的行向量表示用户,列向量表示商品。既然我们把用户和商品用向量表示出来了,接下来的事情就很简单了,我们只需要计算向量之间的相似度就可以找到相似的用户以及商品了。

我们要计算向量的相似度有很多种办法,我们可以计算两个向量的余弦值,可以计算欧式距离、皮尔逊值等等。

SVD的作用

其实到这里关于协同过滤就介绍完了,但问题是这和SVD看起来好像没什么关系呀?

我们仔细琢磨一下就能发现它们之间的关系,对于规模比较小的公司或者场景来说,这当然是没问题的。比如说电影评分网站,因为电影的数量往往不会很大,充其量也在万这个量级,所以这个矩阵可能还是存的下的。如果是电商公司,商品和用户都是亿这个维度的,这个矩阵显然是非常巨大的,根本不可能在内存当中存储得下,更别提相似度计算了。并且这样的矩阵必然存在大量稀疏和空缺,我们将它使用SVD压缩也是非常合理的做法。

首先我们开发出一个辅助函数,根据我们设置的百分比计算出最少需要的奇异值的数量:

def 

其次我们对原矩阵进行svd分解,并且设置阈值对原矩阵进行压缩:

data 

最后压缩之后得到的是item的矩阵,其中的每一个行向量对应一个item。

这只是一个模拟,如果是在实际上的应用,我们可以将几亿甚至是更多的维度压缩到几百甚至更少,极大的缩减了存储所需要的开销。而且svd的计算是可以分布式并发进行的,所以即使原始数据非常庞大,也是可以支撑的。

总结

到这里关于协同过滤算法以及SVD的应用就结束了,虽然算法非常简单,实现起来也容易,但是这其中还有很多问题没有解决。比如说这个用户和商品的矩阵并不是一成不变的,因为我们随时都会有新商品上架以及新用户注册,对于这些没有行为的新商品和新用户应该怎么办?

另外一个问题是,这个算法没有改进的空间,一旦实现完成了上线之后,我们做不了太多的改进。如果是其他的模型或者是算法,我们可以通过迭代算法以及模型的方法来获取更好的效果,但是协同过滤不行。这也是为什么逐渐被淘汰的原因。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

协同过滤算法_机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用相关推荐

  1. 刚性仿射变换算法_一种视觉定位中的点集仿射变换算法的制作方法

    本发明涉及相机标定 技术领域: ,具体涉及一种视觉定位中的点集仿射变换算法. 背景技术: :随着工业自动化技术的推进,越来越多的产线工件组装.检测.测量等工作正在由机器人或自动化设备逐步替代,而这些技 ...

  2. 机器学习模型在携程海外酒店推荐场景中的应用

    导读 互联网企业的核心需求是"增长",移动互联时代下的在线旅游业也不例外.随着大数据.云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心. 近年来推荐系统迅速崛起 ...

  3. 干货 | 机器学习模型在携程海外酒店推荐场景中的应用

    "关于作者:Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地. 大数据产业创新服务媒体 --聚焦数据 · 改变商业 导读 互联网企业的核心需求是& ...

  4. 【技术干货】聊聊在大厂推荐场景中embedding都是怎么做的

    " 解读YouTube.Airbnb.Alibaba的三篇经典论文,总结Embedding在工业界的一些用法和技巧,这三篇论文亮点众多,提供的经验非常值得我们去细细品味和借鉴.这篇文章篇幅较 ...

  5. 【推荐系统】EMBEDDING 在大厂推荐场景中的工程化实践

    " 解读YouTube.Airbnb.Alibaba的三篇经典论文,总结Embedding在工业界的一些用法和技巧,这三篇论文亮点众多,提供的经验非常值得我们去细细品味和借鉴.这篇文章篇幅较 ...

  6. 推荐场景中召回模型的演化过程

    导读:一般的推荐系统主要包括召回.排序和后续的业务机制 ( 重排序.多样性保证.用户体验保证等等 ) 这三大模块,而其中召回模块主要负责根据用户和 item 的特征,从众多待推荐的候选 item 中初 ...

  7. 他山之石 | 知识图谱在美团推荐场景中的应用实践

    美团是一个生活服务领域的平台,需要大量知识来理解用户的搜索意图,同时对于商家侧我们也需要利用现有的知识对海量信息进行挖掘与提取,进而优化用户体验.今天分享的主题是知识图谱在美团推荐场景中的应用.主要包 ...

  8. 让知识来指引你:序列推荐场景中以知识为导向的强化学习模型

    ‍ ‍时序推荐是基于用户的顺序行为,对未来的行为进行预测的任务.目前的工作利用深度学习技术的优势,取得了很好的效果.但是这些工作仅专注于所推荐商品的局部收益,并未考虑该商品对于序列长期的影响. 强化学 ...

  9. 【推荐实践】Flink 状态(State)管理在推荐场景中的应用

    导语 Flink 提供了灵活丰富的状态管理,可轻松解决数据之间的关联性.本文介绍了Flink 状态(State)管理在推荐场景中的应用,大家结合自己的应用场景与业务逻辑,选择合适的状态管理. 背景 F ...

最新文章

  1. python 常用内置函数_python常用内置函数使用|python基础教程|python入门|python教程...
  2. Linux shutdown关机命令
  3. monaco-editor 监听保存按钮
  4. Exchange邮箱的创建与配置
  5. 【华为云技术分享】【DevCloud•敏捷智库】读懂敏捷需求管理的4个关键词
  6. 使用VS Code开发asp.net core (上)
  7. java 输出中文_没见过的 Java 编程入门教程!例程使用中文标识符代码:问个好吧...
  8. 一个 8 岁的“前端老人”
  9. python安装whl_1 Matplotlib在win10下安装
  10. 绩效考核及评估活动的实施步骤及疑难问题汇编
  11. mysql记录的增删改查、单表查询
  12. idea的pom文件变灰色
  13. AMS1117S三端稳压低压降稳压器ic
  14. 如何保证库存在高并发的场景下是安全的
  15. 移动端h5页面监听手机横屏
  16. 朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件
  17. 流放者柯南服务器文件,《流放者柯南》个人服务器架设教程文本及视频详解
  18. ORAN架构和功能划分
  19. carte执行job任务时出现中文乱码
  20. js身份证号正则判断

热门文章

  1. 1.关于python
  2. 在VC中使用MATLAB C++函数库
  3. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异
  4. AUTOSAR从入门到精通100讲(四十)-嵌入式中的CAN总线
  5. abd.exe 需要下java吗_Abd.exe文件下载|
  6. centos6配置mysql5.7_CentOS 6/7 下 MySQL 5.7 安装部署与配置
  7. php遍历数组的四种方法,PHP遍历数组的常见几种方法
  8. java线程代码实现_Java 实现线程的2种方法的具体代码实例
  9. 导出oracle awr分析报告,配置oracle内存参数,察看表空间使用率
  10. mysql注入提取邮件_【sql注入教程】mysql注入直接getshell