推荐引擎根据用户的特定需求帮助用户缩小选择范围。在这篇文 章中,我们一起来探秘推荐引擎各部分是如何协同工作的。我们将根据电影评分数据,用协同过滤的方法来推荐电影。其关键部分是基于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
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框架实现的具有协同过滤功能的推荐系统源码+数据+项目操作说明.zip 该项目是使用Apache Mahout框架创建的具有协同过滤功能的推荐系统。该系统使用一个音乐推荐数据集作为研究目的的输入,但可以...
在Mahout Taste Webapp工程中,需要添加对mahout-examples的依赖,这一步骤是必须的,因为示例代码提供了实际运行推荐系统所必需的组件。 6. 配置推荐引擎的属性 在Mahout Taste Webapp的recommender.properties...
Apache Mahout 简介
综上所述,《Apache Mahout Cookbook》不仅是一本详尽的技术指南,也是一本实践手册,适合那些希望深入了解Mahout并将其应用于实际数据分析项目的开发者和数据科学家。通过本书的学习,读者可以掌握一系列关键技能,...
Thank you for requesting the download for Apache Mahout Cookbook. Please click the following link to download the code:
通过以上分析,我们可以了解到分布式系统在处理大规模、复杂任务方面的重要性和优势,这对于设计一个基于Hadoop和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 ...
在本项目中,我们主要探讨如何使用SpringBoot框架与Apache Mahout构建一个推荐系统,该系统专注于基于用户评分数据来推荐相关的电影。首先,让我们深入理解这个系统的各个组成部分。 **SpringBoot** SpringBoot是由...
总结来说,"apache-mahout-distribution-0.11.0-src.zip"是一个宝贵的资源,它不仅包含了一个强大机器学习库的源代码,还为开发者提供了一个深入了解和定制机器学习算法的机会。无论你是想研究算法细节,还是希望在...
Apache Mahout是一个基于Hadoop的大规模数据集上实现的机器学习库,它的主要目标是提供简单易用的算法,用于构建智能应用。在标题中提到的"apache-mahout-distribution-0.12.2.tar.gz"是Mahout的一个发行版本,版本...
通过以上章节的学习,我们不仅了解了如何安装配置Apache Mahout及其开发环境,还深入了解了如何使用Mahout的各种功能,包括创建Sequence Files、与外部数据源集成、实施朴素贝叶斯分类器以及使用逻辑回归进行股市...
推荐引擎服务API Apache Mahout建议( )作为与dropwizard( )一起提供的RESTful Web服务。 要求 Java 1.7 Postgres数据库服务器(必需) 评分表或视图,例如“ user_id,item_id,评分...” 设置 使用您的设置...
此外,由于Mahout是基于Hadoop构建的,了解Hadoop的基本概念和操作对于深入理解和使用Mahout同样重要。 综上所述,对于想要深入大数据分析领域,尤其是希望掌握机器学习技术的数据工作者来说,《Learning Apache ...
选择不同的用户相似度度量方法,这里选择了基于谷本系数、基于对数似然和基于曼哈顿距离 基于内容的推荐 对新闻文本进行分词 调用Deeplearning4j中构建paragraphvector的方法,通过doc2vec构建VSM 用Gensim会更方便...