Mahout 推荐器 - 将基于内容的相似性添加到基于项目的推荐器中

标签 mahout recommendation-engine mahout-recommender

我有一个非常标准的基于 Mahout 项目的新闻文章推荐器(使用点击数据,所以首选项是 bool 值):

DataModel dataModel = new ReloadFromJDBCDataModel(
        new PostgreSQLBooleanPrefJDBCDataModel(localDB, ...)
);
ItemSimilarity itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);
ItemBasedRecommender recommender = new GenericBooleanPrefItemBasedRecommender(dataModel, itemSimilarity);

我正在尝试将基于内容的知识注入(inject)推荐器,这样我就可以最强烈地推荐不仅在正常协同过滤意义上相似的文章,而且在它们共享许多共同术语的意义上也相似。

文章内容相似度(TF-IDF 向量的余弦相似度)使用 Mahout 批处理进行预计算并从数据库中读取。但是,会有很多文章对没有相似度数据。这有两个原因:
  • 文章内容相似度数据的更新频率将低于用户项目偏好数据模型,因此在计算新文章的内容相似度之前会有延迟。
  • 理想情况下,我想将所有内容相似度数据加载到内存中,因此我只会存储每篇文章的前 20 个相似度。

  • 因此,对于给定的一对文章,我有:
  • 项目相似度 (Tanimoto) 0 <= s1 <= 1
  • 内容相似度(余弦)0 <= s2 <=1(可能为空)

  • 在内容相似度不为空的情况下,我想用它的值来加权项目相似度,以便对内容相似的文章进行提升。

    我的问题是:
  • 尝试结合这些措施是否合理,还是我在尝试一些疯狂的事情?
  • 将这两个值组合成一个相似度分数的合理公式是什么?
  • 这最好作为自定义实现吗ItemSimilarity或作为 Rescorer ?
  • 最佳答案

    是的,将它们结合起来是完全合理的。如果两个相似性都在 [0,1] 中,那么最明智的组合就是它们的乘积。这是您使用 ItemSimilarity 注入(inject)的东西,而不是 IDRescorer .

    关于Mahout 推荐器 - 将基于内容的相似性添加到基于项目的推荐器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206930/

    相关文章:

    hadoop - 如何在Apache Spark中使用Mahout seq2sparse输出的矢量化文档

    java - Hadoop:所有数据节点 127.0.0.1:50010 都是坏的。中止

    java - Mahout 中 DataModel 与 FileItemSimilarity 的使用

    hadoop - 我可以在hadoop上使用基于用户的推荐吗?

    hadoop - 为什么 Mahout 还没有线性回归

    binary-data - 二元推荐算法

    tree - 计算加权树的相似度

    machine-learning - 使用已知项目相似性和丰度设置相似性度量

    java - 使用 Mahout 时出现大文件问题

    mahout - 基于项目和基于内容的协同过滤有什么区别?