【转】基于lucene实现自己的推荐引擎

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里

基于lucene实现自己的推荐引擎

原文链接http://www.yeeach.com/?p=1086

chuanliang 2010-10-1,01:27 Comments (6)
归类于:技术相关, 电子商务  Tags: Collaborative Filtering, lucene, mahout, recommendation system, 协同过滤, 推荐引擎, 推荐系统, 搜索引擎.

采用基于数据挖掘的算法来实现推荐引擎是各大电子商务网站、SNS社区最为常用的方法,推荐引擎常用的Content-Based推荐算法及协同过滤算法(Item-BasedUser-based)在电子商务推荐系统入门v2.0 电子商务推荐系统入门基础 中已经有所阐述。但从实际应用来看,对于大部分中小型企业来说,要在电子商务系统完整采用以上算法有很大的难度。

1、常用推荐引擎算法问题

1)、相对成熟、完整、现成的开源解决方案较少

粗略分来,目前与数据挖掘及推荐引擎相关的开源项目主要有如下几类:

数据挖掘相关:主要包括WekaR-ProjectKnimeRapidMinerOrange 

文本挖掘相关:主要包括OpenNLPLingPipeFreeLingGATE Carrot2 等,具体可以参考LingPipe’s Competition

推荐引擎相关:主要包括Apache MahoutDuine frameworkSingular Value Decomposition (SVD) ,其他包可以参考Open Source Collaborative Filtering Written in Java

搜索引擎相关:LuceneSolrSphinxHibernate Search

2)、常用推荐引擎算法相对复杂,入门门槛较低

3)、常用推荐引擎算法性能较低,并不适合海量数据挖掘

以上这些包或算法,除了Lucene/Sor相对成熟外,大部分都还处于学术研究使用,并不能直接应用于互联网大规模的数据挖掘及推荐引擎引擎使用。

2、采用Lucene实现推荐引擎的优势

对很多众多的中小型网站而言,由于开发能力有限,如果有能够集成了搜索、推荐一体化的解决方案,这样的方案肯定大受欢迎。采用Lucene来实现推荐引擎具有如下优势:

1)、Lucene 入门门槛较低,大部分网站的站内搜索都采用了Lucene

2)、相对于协同过滤算法,Lucene性能较高

3)、LuceneText Mining、相似度计算等相关算法有很多现成方案

在开源的项目中,Mahout或者Duine Framework用于推荐引擎是相对完整的方案,尤其是Mahout 核心利用了Lucene,因此其架构很值得借鉴。只不过Mahout目前功能还不是很完整,直接用其实现电子商务网站的推荐引擎尚不是很成熟。只不过从 Mahout实现可以看出采用Lucene实现推荐引擎是一种可行方案。

3、采用Lucene实现推荐引擎需要解决的核心问题

Lucene擅长Text Mining较为擅长,Lucenecontrib包中提供了MoreLikeThis功能,可以较为容易实现Content-Based的推荐,但对于涉及用户协同过滤行为的结果(所谓的Relevance Feedback),Lucene目前并没有好的解决方案。需要在Lucene中内容相似算法中加入用户协同过滤行为对因素,将用户协同过滤行为结果转化为Lucene所支持的模型。

4、推荐引擎的数据源

电子商务网站与推荐引擎相关典型的行为:

·      购买本商品的顾客还买过

·      浏览本商品的顾客还看过

·      浏览更多类似商品

·      喜欢此商品的人还喜欢

·      用户对此商品的平均打分

因此基于Lucene实现推荐引擎主要要处理如下两大类的数据

1)、内容相似度

例如:商品名称、作者/译者/制造商、商品类别、简介、评论、用户标签、系统标签

2)、用户协同行为相似度

例如:打标签、购买商品、点击流、搜索、推荐、收藏、打分、写评论、问答、页面停留时间、所在群组等等

5、实现方案

5.1、内容相似度

基于Lucene MoreLikeThis实现即可。

5.1、对用户协同行为的处理

1)、用户每一次协同行为都使用lucene来进行索引,每次行为一条记录

2)、索引记录中包含如下重要信息:

商品名、商品id、商品类别、商品简介、标签等重要特征值、用户关联行为的其他商品的特征元素、商品缩略图地址、协同行为类型(购买、点击、收藏、评分等)、Boost值(各协同行为在setBoost时候的权重值)

3)、对评分、收藏、点击等协同行为以商品特征值(标签、标题、概要信息)来表征

4)、不同的协同行为类型(例如购买、评分、点击)设置不同的值setBoost

5)、搜索时候采用Lucene MoreLikeThis算法,将用户协同转化为内容相似度

以上方案只是基于Lucene来实现推荐引擎最为简单的实现方案,方案的准确度及细化方案以后再细说。

更为精细的实现,可以参考Mahout的算法实现来优化。

Technorati 标签: 推荐系统,推荐引擎,recommendation system,collaborative filtering,协同过滤,搜索引擎,lucene,mahout

目录
相关文章
|
4月前
|
机器学习/深度学习 数据采集 算法
推荐引擎离线算法与在线算法的探索与实践
推荐引擎是现代互联网产品中至关重要的组成部分。离线算法和在线算法分别负责处理大量数据的预处理和模型训练,以及快速响应用户的实时请求。通过合理的架构设计和算法选择,可以构建出高效且个性化的推荐系统,从而提升用户体验,增加用户满意度和留存率。未来,随着技术的发展,推荐引擎将更加智能化和个性化,为用户提供更加精准的服务。
|
4月前
|
数据采集 资源调度 搜索推荐
Flink在实时搜索引擎索引构建中的深度应用与实践
随着数据源规模的扩大和查询请求的增加,如何优化Flink的性能和资源调度成为了一个重要的问题。Flink提供了多种性能优化手段,如并行度调整、状态后端选择、任务链优化等。同时,Flink还支持与YARN、Kubernetes等集群管理系统集成,实现资源的动态调度和弹性伸缩,以适应不同规模的业务需求。
|
机器学习/深度学习 搜索推荐 数据挖掘
138 推荐引擎的分类
138 推荐引擎的分类
53 0
|
存储 NoSQL 数据库
如何使用图形数据库构建实时推荐引擎
“您可能还喜欢”是一个简单的短语,暗示了企业与客户互动和联系方式的新时代,图形数据库可以轻松帮助构建推荐引擎。
77 0
|
分布式计算 自然语言处理 Java
白话Elasticsearch06- 深度探秘搜索技术之手动控制全文检索结果的精准度
白话Elasticsearch06- 深度探秘搜索技术之手动控制全文检索结果的精准度
93 0
|
存储 缓存 人工智能
推荐引擎产品RecEng介绍|学习笔记
快速学习推荐引擎产品RecEng介绍
590 0
推荐引擎产品RecEng介绍|学习笔记
|
运维
Lucene solr 大规模应用实践一手经验
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。 本文sole lucene的一些实践小经验。 之前是截图保存的,这里保留图片模式。
86 0
Lucene solr 大规模应用实践一手经验
|
存储 自然语言处理 分布式计算
Solr\Lucene优劣势分析
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。
301 0
|
存储 XML 文字识别
干货 | 知识库全文检索的最佳实践
1、题记 这是stackoverflow上一篇精彩的问答。 原文不大好理解,我做了梳理+图解; 原文是ES早期版本,部分写法已不适用,所有DSL我在6.X上进行了重写和验证; 针对原文内容做了扩展。
877 0
干货 | 知识库全文检索的最佳实践