推荐引擎根据用户的特定需求帮助用户缩小选择范围。在这篇文 章中,我们一起来探秘推荐引擎各部分是如何协同工作的。我们将根据电影评分数据,用协同过滤的方法来推荐电影。其关键部分是基于Apache Mahout的协同过滤算法来建立和训练机器学习模型,以及基于Elasticsearch的搜索技术来简化推荐系统的开发。
什么是推荐?
推荐(Recommendation)是机器学习的一个分支,通过分析数据来预测用户的喜好或者给物品评分。推荐系统在业界被广泛运用:
- 书籍及其它产品(如Amazon)
- 音乐(如Pandora)
- 电影(如Netflix)
- 餐厅(如Yelp)
- 职业(如LinkedIn)
Netflix的推荐引擎
电影推荐依赖于以下的观点:
- 用户的行为是他们诉求的最真实反应。
- 共同出现(Co-Occurrence)是Apache Mahout可以计算被推荐物品显著性标识的基础。
- 模型输出指标分数的权重赋值和全文检索引擎背后的数学计算有着相似性。
- 这种数学上的相似让利用文本搜索开发Mahout推荐器的想法得以实现,借助如Elasticsearch这样的搜索引擎。
推荐引擎架构
推荐引擎的架构
推荐引擎的架构如下所示:
推荐引擎的架构
- 电影信息数据被重新格式化,然后将其存储在Elasticsearch中用于搜索。
- 来自Apache Mahout的物品相似度算法根据用户对电影的已有评分来创建电影推荐的标识符。这些标识符被添加到存储在Elasticsearch的对应电影文件里。
- 通过用户喜欢电影的标识符去搜索其它电影,将返回一份新的按照用户喜好相关性排序的电影列表。
基于Mahout的协同过滤
基 于Mahout的协同过滤引擎着眼于用户的历史行为,并试图猜测在今后某个场景下用户可能喜欢什么。这是通过分析用户过去交互过的产品和内容来完成的。 Mahout尤其关注物品是如何在用户历史记录中共同出现的。共同出现是Apache Mahout计算被推荐物品显著性标识的基础。假设Ted喜欢电影A、B和C,Carol喜欢电影A和B。在给Bob推荐电影时,我们注意到Bob喜欢电 影B,由于Ted 和Carol也很喜欢电影B,因而电影A是一个备选推荐项。当然,这是一个很小的例子。在实际生活中,我们将通过海量数据来挖掘信息。
推荐网格
为了获得推荐有用的标识符,Mahout的物品相似度(ItemSimilarity)项目根据用户历史行为建立了三个矩阵:
1. 历史矩阵:包含用户和物品的交互信息,用户X物品的二维矩阵结构。
历史矩阵
2. 共生矩阵:把历史矩阵转化为物品和物品间关系的矩阵,记录哪些物品在用户历史记录中共同出现过。
共生矩阵
在这个例子中,电影A和电影B共同出现一次,而电影A和电影C 共同出现两次。共生矩阵不能直接用作推荐的标识符,因为极其常见的物品总是会伴随着大量的其它物品出现。
3. 标识符矩阵: 标识符矩阵只记录能作为推荐线索的异常(令人关注的)同现。有些物品(这里指电影)由于广受欢迎,几乎每个人都喜欢它们,意味着它们将伴随所有物品出现。 它们对于推荐系统而言就不值得关注(非异常)。而过于稀疏的共同出现也不可靠,因此也不记录在标识符矩阵中。在这个例子中,电影A是电影B的标识符之一。
标识符矩阵
Mahout 同时并行地运行多个MapReduce作业来计算物品的共同出现(Mahout 1.0运行在 Apache Spark之上)。Mahout的 ItemSimilarity作业用对数似然比检验(LLR)来确定哪些共同出现足够反常可以作为推荐标识符。系统输出相似度大于设定阈值的那些物品间。
Mahout ItemSimilarity作业的输出,给出了物品两两之间哪些总是共同出现、哪些能作为推荐依据。例如,电影B这一行的电影A这一列被标记,这意味着喜欢电影A可以作为你也喜欢电影B的一个标识符。
标识符矩阵
Elasticsearch搜索引擎
Elasticsearch搜索引擎
Elasticsearch是建立在全文搜索引擎库Apache Lucene之上的开源搜索引擎。全文搜索使用准确度(Precision)和召回率(Recall)评估搜索结果:
- 准确度 = 检索出的相关文档数与检索出的文档总数的比率
- 召回率 = 检索出的相关文档数和文档库中所有的相关文档数的比率
Elasticsearch存储的文档由多个不同的字段组成。每个字段都有对应的名字和内容。
对于我们的推荐引擎,我们存储电影的元数据(如id、标题、流派和电影推荐标识符)到一个JSON文档中:
{ “id”: "65006", "title": "Electric Horseman", "year": "2008", "genre": ["Mystery","Thriller"] }
标识符矩阵的数据,那些标识显著性或是共同出现兴趣度的信息,被存放在Elasticsearch电影文件标识符字 段。例如,由于电影A是电影B的一个标识符,电影A就会被存储在电影B文件的标识符字段中。这意味着,当我们搜索电影A为标识符的电影,电影B就会被推荐 给我们。
推荐矩阵
搜索引擎已经对搜索和查询词相关的字段做过优化。我们就根据和查询词最匹配的标识符字段,用搜索引擎来寻找电影。
了解更多搭建推荐引擎的信息,我们建议您查看以下资源:
- Practical Machine Learning: Innovations in Recommendations
- Building a Simple Recommender
- Jump-Start Your Recommendation Engine on Hadoop
- MapR Quick Start Solution - Recommendation Engine Demo
原文链接:https://www.mapr.com/blog/inside-look-at-components-of-recommendation-engine (翻译/zhyhooo 责编/周建丁)
http://www.csdn.net/article/2015-05-14/2824676
相关推荐
具体步骤,参见博客:http://blog.csdn.net/fufengrui/article/details/17022535
基于Apache Mahout框架实现的具有协同过滤功能的推荐系统源码+数据+项目操作说明.zip 该项目是使用Apache Mahout框架创建的具有协同过滤功能的推荐系统。该系统使用一个音乐推荐数据集作为研究目的的输入,但可以...
This book is a practical guide that explains the classification algorithms provided in Apache Mahout with the help of actual examples. Starting with the introduction of classification and model ...
Apache Mahout 简介
Apache Mahout: Beyond MapReduce. Distributed algorithm design This book is about designing mathematical and Machine Learning algorithms using the Apache Mahout "Samsara" platform. The material takes...
Apache Mahout Cookbook
Thank you for requesting the download for Apache Mahout Cookbook. Please click the following link to download the code:
深入解析Apache Mahout的书籍
Apache Mahout is a scalable machine learning library with algorithms for clustering, classification, and recommendations. It empowers users to analyze patterns in large, diverse, and complex datasets ...
If you are a Java developer and want to use Mahout and Machine Learning to solve Big Data analytics use-cases then this book is for you. Familiarity with shell-scripts is assumed but no prior ...
MovieRecommender基于Mahout实现协同过滤推荐算法的电影推荐系统^
推荐引擎服务API Apache Mahout建议( )作为与dropwizard( )一起提供的RESTful Web服务。 要求 Java 1.7 Postgres数据库服务器(必需) 评分表或视图,例如“ user_id,item_id,评分...” 设置 使用您的设置...
基于 Apache Mahout 构建社会化推荐引擎
基于Mahout实现协同过滤推荐算法的电影推荐系统
教你成功运行mahout的taste webapp例子,网上的很多资料说的不清楚,或者版本冲突。正确的版本是jdk1.6 maven3.0.5 mahout0.5 。 摸索良久,亲测有效!
选择不同的用户相似度度量方法,这里选择了基于谷本系数、基于对数似然和基于曼哈顿距离 基于内容的推荐 对新闻文本进行分词 调用Deeplearning4j中构建paragraphvector的方法,通过doc2vec构建VSM 用Gensim会更方便...
recommenderApache Mahout 推荐引擎 基于用户评分数据推荐相关电影
mahout是用来做大数据推荐系统和机器学习使用的框架,这个工具包官网下载非常慢,下载了一夜终于下载到了,刚好够上传的
Apache mahout说明性文档,全面介绍mahout安装及其使用
欢迎使用Apache Mahout! Apache Mahout:trade_mark:项目的目标是构建一个环境,以快速创建可扩展的高性能机器学习应用程序。 有关Mahout的其他信息,请访问设置环境无论您是使用Mahoutshell,运行命令行作业还是将...