当前位置: 首页 > news >正文

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

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

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

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

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

数据挖掘相关:主要包括Weka、R-Project、Knime、RapidMiner、Orange 等

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

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

搜索引擎相关:Lucene、Solr、Sphinx、Hibernate Search等

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

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

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

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

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

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

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

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

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

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

Lucene擅长Text Mining较为擅长,Lucene在contrib包中提供了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的算法实现来优化。

来源:http://www.yeeach.com/2010/10/01/%E5%9F%BA%E4%BA%8Elucene%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%B7%B1%E7%9A%84%E6%8E%A8%E8%8D%90%E5%BC%95%E6%93%8E/

转载于:https://www.cnblogs.com/ibook360/archive/2011/12/05/2277073.html

相关文章:

  • ubuntu网络配置文件
  • linux 文件名中间有空格 如何复制
  • PPP协议认证
  • [转] C#代码检查工具:stylecop
  • Android的一些开源项目集锦 以备以后研究
  • session.createSQLQuery()方法去执行删除无效
  • Apache 限速模块安装笔记
  • WinCE平台下BMP转JPG代码备份1
  • 白色的风信子
  • 2011经典语句
  • WebSphere应用服务器证书过期问题解决
  • yum安装MySQL并设置密码
  • 电线电缆规格型号
  • SQL Server大负载的生产环境下的性能优化:初识元数据优化
  • iphone-common-codes-ccteam源代码 CCMail.h
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • CODING 缺陷管理功能正式开始公测
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java8-模拟hadoop
  • java取消线程实例
  • npx命令介绍
  • spring boot 整合mybatis 无法输出sql的问题
  • tensorflow学习笔记3——MNIST应用篇
  • 阿里云应用高可用服务公测发布
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何选择开源的机器学习框架?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数据结构java版之冒泡排序及优化
  • 微信小程序填坑清单
  • 小程序01:wepy框架整合iview webapp UI
  • 2017年360最后一道编程题
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​业务双活的数据切换思路设计(下)
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (+4)2.2UML建模图
  • (Python) SOAP Web Service (HTTP POST)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三) diretfbrc详解
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .Family_物联网
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET DataGridView数据绑定说明
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net 路由处理厉害了
  • .net反混淆脱壳工具de4dot的使用