TensorRec:基于TensorFlow的推荐引擎框架
我开发TensorRec的原因,在于简化基于TensorFlow开发推荐引擎的工作,并让你专注于真正有价值的部分:嵌入函数、损失函数和更可靠的学习算法。
类似于Python中常见的其他机器学习工具,TensorRec也提供了简单易用的API用于训练和预测。 它支持灵活地定制嵌入函数和损失函数,可以帮助建立一个适合你的特定用户和商品的推荐系统。
TensorRec还很年轻,但我欢迎你的任何反馈:使用和参与情况,或者你的批评。如果你希望马上学习TensorFlow等机器学习技能,我推荐你使用汇智网的在线TensorFlow运行环境:http://www.hubwiz.com/python-ml.html
在构建TensorRec时,我设立了四个目标:
- 建立一个能够从正向和负向反馈中学习的推荐引擎。
- 允许使用任意的TensorFlow图用作嵌入函数和损失函数。
- 为嵌入函数和损失函数提供合理的默认值。
- 在本文中塞入尽可能多的机器学习专业术语。
虽然前三个目标还未完全达成,我已然对第四个目标非常满意了:-)
工作原理
TensorRec基于两个低维向量:用户表示向量和商品表示向量,来给一个推荐打分。这两个向量的点积(dot product
)作为用户与商品之间关系的得分 - 我们假设具有最高得分的推荐就是最好的推荐。
# Predict scores for all users and all items
predictions = model.predict(user_features=user_features,item_features=item_features)
用于生成用户和商品表示向量的算法被称为嵌入函数(embedding function
),你可以使用从线性变换到深度神经网络的任何张量操作来自定义你的嵌入函数,这具体取决于要解决的具体问题以及你所掌握的特征数据。 而且,你可以分别定制用户和商品的嵌入函数。 这里有一个嵌入函数自定义的例子供你参考。
TensorRec通过比较它所生成的分值与用户对商品的实际评价(喜欢/不喜欢)之间的差异来进行学习。 比较器被称为损失函数(loss function
),TensorRec允许你自定义损失函数。 这里有一个自定义丢失函数的例子供你参考。
TensorRec模型的拟合函数,类似于其他常用的机器学习工具:
# Fit the model for 5 epochs
model.fit(interactions, user_features, item_features,epochs=5, verbose=True)
灵感
我使用了由Maciej Kula和Lyst开发的LightFM ,它的性能和可用性让我印象深刻。 我曾经专门写过一篇如何使用LightFM的博客文章。
LightFM作为分解机(factorization machine
)来生成用户和商品表示,它学习每个特征的线性嵌入。 通过计算这两个表示向量的点积,可以得到一个无单位的分数,通过对分数进行排名,我们就知道一个给定的用户/商品对是否好(或坏)的匹配。
这种线性分解方法有效而且计算效率高,但是我使用LightFM处理那些不平衡、冗余、不一致或高度相关的特征时碰到了一些问题 :学习这些复杂特征的嵌入表示,需要更复杂的嵌入函数,例如深度神经网络。 复杂的嵌入函数可以学习到用户和商品特征之间的微妙关系,并增加系统的总体信息容量。 这让我好奇并期望可以探索非线性嵌入函数的表现,因此我开发了TensorRec作为框架来简化这一探索工作。
基于TensorFlow的推荐系统
最初由Google开发的TensorFlow是一个开源的工具,可以用来构建、优化和分发任意结构的大型机器学习系统。
在TensorFlow中,机器学习过程被表示为一个图(graph
),它表达了数据如何流经整个系统。 这些图形可以使用TensorBoard进行可视化,从而帮助我们更清楚地了解机器学习的过程。
为了建立一个推荐系统,我们需要在TensorFlow图中完成四项任务:
- 将输入数据转换为特征张量以便于嵌入。
- 将用户/商品特征张量转换为用户/商品表示(嵌入函数)。
- 将用户/商品表示对转换为一个预测。
- 将预测和实际值转换为损失值(损失函数)。
TensorRec解决了任务1和3,同时为任务2和4提供了模块化和合理的默认设置,让您可以自由地尝试嵌入函数和损失。 你需要做的就是插构建自定义的嵌入函数图或者损失函数图,就像这个例子一样 。
还缺什么
信息检索方面的许多最新进展来自复杂的损失函数。 我特别感兴趣的是结对损失函数,比如WARP ,但是用TensorFlow图来实现它还是挺有挑战性的。 如果TensorRec预置这些损失函数的实现,那么对用户的价值就更大了。
这些新功能也是对TensorRec而言有价值的补充:处理大量交互数据、管理模型状态和处理隐式交互。
如果你想为TensorRect做一点贡献,或者只是想尝试一下TensorRec,我都很乐意听到你的反馈,源代码在GitHub。
如果你喜欢这篇文章,记得关注我的头条号:新缸中之脑。
原文:TensorRec: A Recommendation Engine Framework in TensorFlow
TensorRec:基于TensorFlow的推荐引擎框架相关推荐
- 基于PredictionIO的推荐引擎打造,及大规模多标签分类探索
基于PredictionIO的推荐引擎打造,及大规模多标签分类探索 摘要:在2015年3月21日的北京Spark Meetup第六次活动上,尹绪森就如何使用PredictionIO打造一个定制化 ...
- 基于内容推荐python_用 Python 实现一个简单的基于内容的推荐引擎
原标题:用 Python 实现一个简单的基于内容的推荐引擎 (点击上方公众号,可快速关注) 英文:Chris Clark 译文:伯乐在线专栏作者 - yaoyujia 链接:http://python ...
- 基于Spark构建推荐引擎
基于Spark构建推荐引擎之一:基于物品的协同过滤推荐 http://blog.csdn.net/sunbow0/article/details/42737541 Spark构建推荐引擎之二:基于Sp ...
- python推荐引擎_python-doc/Python中一个简单的基于内容的推荐引擎.md at master · ictar/python-doc · GitHub...
假设,我们需要为一个电子商务网站建立一个推荐引擎. 基本上,你有两种方法:基于内容和协同过滤.我们将看看每种方法的优缺点,然后深入一个基于内容的引擎的一个简单的实现(准备在Heroku之上部署!). ...
- python推荐_Python中一个简单的基于内容的推荐引擎
假设,我们需要为一个电子商务网站建立一个推荐引擎. 基本上,你有两种方法:基于内容和协同过滤.我们将看看每种方法的优缺点,然后深入一个基于内容的引擎的一个简单的实现(准备在Heroku之上部署!). ...
- 基于 Apache Mahout 构建社会化推荐引擎
http://www.ibm.com/developerworks/cn/java/j-lo-mahout/ Web 2.0 的一个核心思想就是"群体智慧",即基于大众行为,为每个 ...
- php推荐引擎算法,推荐系统,第 2 部分: 开源引擎简介
问题导读: 1.简单的推荐生态系统是怎么样的? 2.常见的推荐算法有哪些? 3.怎么用restful服务构建推荐系统? 上一篇: 推荐系统,第 1 部分: 方法和算法简介 http://www.abo ...
- 探索推荐引擎内部的秘密系列
最近要用到协同过滤的算法来解决工作中的问题,先学习,以后再把自己的收获总结下来. 转自:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_rec ...
- 百度推荐引擎及其背后的大数据架构揭秘
在互联网世界中,什么技术代表着人工智能被广泛应用的未来?2012年12月22日,在以"推荐系统实战"为主题的百度技术沙龙上,百度推荐与个性化部高级工程师们与来自亚马逊.豆瓣网.清华 ...
最新文章
- CCRD_TOC_2008年第6期
- 【Unity】11.5 物理材质 (Physics Material)
- 服务器的攻与防(firewall 禁止指定Ip)
- 以贴吧和头条为例,为什么产品都有极速版和标准版
- C#中typeof 与GetType()的区别和methodinfo、memberinfo反射
- 【java】二维数组的应用
- php 字节码查看,PHP字节码缓存和内置服务器
- pytorch 中 torch.optim.Adam 方法的使用和参数的解释
- 在pycharm运行正常,在命令行窗口出现引包错误
- 交换机设备登录账号权限1_Stelnet(ssh)登陆华为交换机配置教程
- ARM芯片介绍(转贴)
- epcs1s是epcs1系列的么_fpga的EPCS 配置的2种方法 FPGA下载程序的方法(EPCS)
- 必应(Bing)的站内搜索 site:<域名> <搜索内容>
- 业务流程优化设计之思想和原则
- 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
- C语言数据结构,排序的基本操作。
- 用c语言编写爱心的代码是什么
- Unreal 入门-AO贴图
- SG-UAP平台 : MX框架总结
- 今日头条组图下载本地,并存入MongoDB