技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> 【转】基于lucene实现自己的推荐引擎

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

浏览:3511次  出处信息

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

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

        4、推荐引擎的数据源

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

        1. 购买本商品的顾客还买过
        2. 浏览本商品的顾客还看过
        3. 浏览更多类似商品
        4. 喜欢此商品的人还喜欢
        5. 用户对此商品的平均打分

          因此基于Lucene实现推荐引擎主要要处理如下两大类的数据
          1)、内容相似度
          例如:商品名称、作者/译者/制造商、商品类别、简介、评论、用户标签、系统标签
          2)、用户协同行为相似度
          例如:打标签、购买商品、点击流、搜索、推荐、收藏、打分、写评论、问答、页面停留时间、所在群组等等

          5、实现方案

            5.1、内容相似度 基于Lucene MoreLikeThis实现即可。
            5.2、对用户协同行为的处理
            1)、用户每一次协同行为都使用lucene来进行索引,每次行为一条记录
            2)、索引记录中包含如下重要信息:
            商品名、商品id、商品类别、商品简介、标签等重要特征值、用户关联行为的其他商品的特征元素、商品缩略图地址、协同行为类型(购买、点击、收藏、评分等)、Boost值(各协同行为在setBoost时候的权重值)
            3)、对评分、收藏、点击等协同行为以商品特征值(标签、标题、概要信息)来表征
            4)、不同的协同行为类型(例如购买、评分、点击)设置不同的值setBoost
            5)、搜索时候采用Lucene MoreLikeThis算法,将用户协同转化为内容相似度
            以上方案只是基于Lucene来实现推荐引擎最为简单的实现方案,方案的准确度及细化方案以后再细说。
            更为精细的实现,可以参考Mahout的算法实现来优化。

          1. 建议继续学习:

            1. 几种常见的基于Lucene的开源搜索解决方案对比    (阅读:4653)
            2. 大型网站的Lucene应用    (阅读:3931)
            3. 阿里巴巴国际站P4P引擎系统简介    (阅读:3713)
            4. 列式数据仓库引擎之Infobright    (阅读:3552)
            5. 国内外旅游电子商务个性化推荐系统研究    (阅读:2872)
            6. MySQL数据库存储引擎和分支现状    (阅读:2856)
            7. 协同过滤推荐系统的那些不足点    (阅读:2648)
            8. Solr\Lucene优劣势分析    (阅读:2604)
            9. JS游戏引擎列表    (阅读:2555)
            10. 基于用户的协同过滤和皮尔逊相关系数    (阅读:2541)
            QQ技术交流群:445447336,欢迎加入!
            扫一扫订阅我的微信号:IT技术博客大学习
            © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

            京ICP备15002552号-1