Pinterest凭什么拥有那么多用户:机器学习是答案
目前,Pinterest月平均活跃用户量达到1亿,这家以图片为主的公司是如何留住用户并盈利的呢?Pinterest的主要目标是向用户推荐相关的图片或内容,推荐的内容足够精确才能提高用户黏性。近期,《快公司》发文表示,Pinterest 正从机器学习切入,向用户推荐更精准的内容,并拓展新的在线业务。
在Pinterest 平台上,人们可以搜索、下载全网范围内的图片和文章,找到与自己喜好契合的内容自然能够增加他们的用户忠诚度。Pinterest 推荐的相关内容提高了30% 的参与度和 25% 的购买度。这些精准推荐都是依托尖端的数据驱动技术和大量实验的结果。
用户可以通过Pinterest 台的虚拟钉板收藏全网范围的在线商品、帖子、图片,就是说这个平台完全是基于用户兴趣偏好建立的。Pinterest 无需像其他社交网络一样,根据用户的点击模式或者特定页面停留时间来猜测其兴趣。这也意味着它的算法能推测到 750亿个收藏的内容数据库中相互关联的信息,因为相似的内容更容易被固定在同一个钉板上,从而轻易识别用户偏好。
Pinterest 可以说是一个社交图,由数十亿相互联系的用户、被不同用户收藏的同一个项目、收藏类似项目的虚拟钉板三部分构成,这样的组成结构同时决定了其用户量将会不断增长。
Pinterest 的高级发现科学工程师 Mohammad Shahangian 说,“我们通过数百次的实验对我们的算法做出微小修正,确定发现问题的方向“。简单地根据用户关注人群决定为其推荐内容的模型是不理想的,假设一个用户正在策划自己的婚礼,她的虚拟钉板添加了很多礼服款式的图片,而她的关注者并不一定需要这类服饰,为他们推荐礼服可能造成无意义的重复。而 Pinterest 所有的数据可以让 Pinterest 的用户获得 。
Shahangian 表示,“ 如果你的虚拟钉板收藏了一个厨房水槽的链接,我们是否需要向你推送一万多款厨房水槽,或启发你怎么能整体设计你的厨房呢?” 为了在这样的情况下做出正确判断,该公司的工程师们测试了多种机器学习算法,来研究不同公式如何执行对相似或不同的测试集的收藏,以及他们最终如何影响现实世界的用户的参与度。
然而,事实上,Pinterest 的技术研发缺乏实例测试,研究员无法通过给某个特定的用户付钱来测试他是否会接受一组新的推荐。虽然后面的测试过程无法进行,目前的算法已经基本可以实现通过用户的收藏内容来判定此人是否愿意担任人工测试者。Pintesrest 从自身的一路发展中收获了不少启发,个性化一直是提高用户参与度最大的影响因素之一。与此同时,该公司也一直致力于提高视觉搜索功能,帮助用户获取与目标图片相似的内容。 今年早些时候,Pinterest 的工程师们与来自伯克利加利福尼亚大学视觉与学习中心的研究人员一起开发了可自动检测图像内容的深度学习技术。
Pinterest 的高级视觉搜索工程师 Dmitry Kislyuk 说,当我们试图去分辩图片内容是一只猫还是一条狗时,这并不算一个分类任务,关键在于保证实时性的前提下寻找图像之间的视觉相似性。可视化搜索工具尤其适合收集家居装饰和时尚类商品的信息。未来,公司希望提高将目标内容映射到其类别的能力,举例来讲,当用户想找同一种食材的新食谱时,就不要只提供这种食材的类似照片。
高级视觉搜索工程师 Andrew Zhai 指出, “我认为我们的模型可以更语义化,有效地将深度学习应用于映射更加概念化的图像。与此同时,Pinterest 的的工程师们正在专注于完善目标的检测和搜索开发一款应用程序,让智能手机用户通过给现实世界中需求物品拍照,上传到平台后,得到相关的推荐。
Pinterest凭什么拥有那么多用户:机器学习是答案的更多相关文章
- 【机器学习】Google机器学习工程的43条最佳实践
https://blog.csdn.net/ChenVast/article/details/81449509 本文档旨在帮助那些掌握机器学习基础知识的人从Google机器学习的最佳实践中获益.它提供 ...
- 7个最好的Java机器学习开发库
摘要:现如今,拥有深度学习和机器学习领域的技术是科技界的趋势之一,并且企业则希望雇佣一些拥有良好的机器学习知识背景的程序开发工程师.本文将介绍一些目前流行的.强大的基于Java的机器学习库,希望给大家 ...
- 机器学习基石(台湾大学 林轩田),Lecture 1: The Learning Problem
课程的讲授从logo出发,logo由四个图案拼接而成,两个大的和两个小的.比较小的两个下一次课程就可能会解释到它们的意思,两个大的可能到课程后期才会解释到它们的意思(提示:红色代表使用机器学习危险,蓝 ...
- WindowsError的错误代码详解
0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. 4系统无法打开文件. 5拒绝访问. 6句柄无效. 7存储控制块被损坏. 8存储空间不足,无法处理此命令. 9存储控制 ...
- GetLastError()函数返回值及含义
GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值, ...
- GetLastError返回值的含义
[0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句柄无效. [7]-存储控制块被损坏 ...
- 现代工程仿真CAE技术介绍
随着现代科学技术的发展,人们正在不断建造更为快速的交通工具.更大规模的建筑物.更大跨度的桥梁.更大功率的发电机组和更为精密的机械设备.这一切都要求工程师在设计阶段就能精确地预测出产品和工程的技术性能, ...
- [python]WindowsError的错误代码详解
转自:http://www.aichengxu.com/view/46906 WindowsError的错误代码详解 0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. ...
- Windows Error Code(windows错误代码详解)
0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块被损坏. 8 存储空间不足,无法处理此 ...
随机推荐
- Best Cow Fences POJ - 2018 (二分)
Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains ...
- HDU 1435 Stable Match 【稳定婚姻问题】
<题目链接> 题目大意:给你n个发射站和n个接受站的位置,并且给出他们的容量,现在需要你对这n对站台进行匹配,距离越近的站台越稳定,如果两个站台距离相等,容量越大的越稳定.问你稳定匹配是什 ...
- POJ 1470 Closest Common Ancestors (模板题)(Tarjan离线)【LCA】
<题目链接> 题目大意:给你一棵树,然后进行q次询问,然后要你统计这q次询问中指定的两个节点最近公共祖先出现的次数. 解题分析:LCA模板题,下面用的是离线Tarjan来解决.并且为了代码 ...
- POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
<题目链接> 题目大意: 给你一个H*W的矩阵,再告诉你有n个坐标有点,问你一个w*h的小矩阵最多能够包括多少个点. 解题分析:二维树状数组模板题. #include <cstdio ...
- Android自定义View前传-View的三大流程-Measure
Android自定义View前传-View的三大流程-Measure 参考 <Android开发艺术探索> https://developer.android.google.cn/refe ...
- jmeter正则表达式提取器提取特定字符串后的全部内容
jmeter进行JDBC请求时,请求后的响应结果在传递给下一个请求使用时,需要用到关联,也在jmeter中,关联通过正则表达式提取器实现. 但是,在JDBC请求后的响应结果中,往往需要关联的内容是只有 ...
- Centos6.5部署Rsyslog+cron+rsync备份服务器
1.前言 rsync是一种快速且功能非常广泛的文件复制工具.它可以在本地复制,通过任何远程shell复制到/从另一个主机复制,也可以复制到/从远程rsync守护进程.它提供了大量的选项,可以控制其行为 ...
- 2190 ACM 数学概率论的乘法和加法原则
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2190 思路:明显我们要寻找 边长为n和边长为n-1,n-2,n-3·····的规律,这样得出一个递推公式就 ...
- [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> ...
- C++程序设计方法5:接口设计实例
//例子:旋转方阵填充,要求矩阵大小任意,尺寸在运行时输入 设计思路:从上到下 int main() { cout << "Please input N:"; int ...