我有一个非常标准的Mahout基于项目的新闻文章推荐器(使用点击数据,因此首选项是布尔值):
DataModel dataModel = new ReloadFromJDBCDataModel(
new PostgreSQLBooleanPrefJDBCDataModel(localDB, ...)
);
ItemSimilarity itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);
ItemBasedRecommender recommender = new GenericBooleanPrefItemBasedRecommender(dataModel, itemSimilarity);
我正在尝试将基于内容的知识注入到推荐器中,因此我最强烈推荐的文章不仅在正常的协同过滤意义上是相似的,而且在他们共享许多常用术语的意义上也是相似的。< / p>
文章内容相似性(TF-IDF向量的余弦相似性)使用Mahout批次预先计算并从DB读取。但是,会有很多对没有相似性数据的文章。这有两个原因:
文章内容相似度数据的更新频率低于用户项目偏好设置的数据模型,因此在新文章计算内容相似度之前会有一段时间滞后。
理想情况下,我想将所有内容相似度数据加载到内存中,因此我只会为每篇文章存储前20个相似度。
所以,对于一对特定的文章,我有:
在内容相似度不为空的情况下,我想使用其值来加权项目相似度,以便提升具有相似内容的文章。
我的问题是:
ItemSimilarity
还是Rescorer
?答案 0 :(得分:6)
是的,将它们组合起来是完全合理的。如果两者的相似性都在[0,1]中,那么最明智的组合就是它们的产品。这是您使用ItemSimilarity
注入的内容,而不是IDRescorer
。