我有以下设置:
布尔数据:(用户 ID,项目 ID)
基于 hadoop 的 mahout itemSimilarityJob 具有以下论点:--similarityClassname Similarity_Loglikelihood --maxSimilaritiesPerItem 50 & others (input, output..)
基于项目的布尔推荐器:-model MySqlBooleanPrefJDBCDataModel -similarity MySQLJDBCInMemoryItemSimilarity -candidatestrategy AllSimilarItemsCandidateItemsStrategy -mostSimilarItemsCandidateStrategy AllSimilarItemsCandidateItemsStrategy
有没有办法在我的设置中使用相似性共现来获得最终推荐?如果我在作业中插入 SIMILARITY_COOCCURENCE,MySqlJDBCInMemorySimilarity 前置条件检查将失败,因为计数变得大于 1。我知道我可以通过在预先计算的相似性上运行推荐器作业来获得最终推荐。在使用 MysqlInMemorySimilarity 的相似性对数似然(以及其他相似性值在 -1 和 1 之间的相似性度量)的情况下,有没有办法使用 api 实时执行此操作?
我们如何限制最大数量。项目相似性作业中每个项目的相似项目数。我的意思是 allsimilaritemscandidatestrategy 调用 .allsimilaritems(item) 来获取所有可能的候选人。有没有一种方法可以让我使用 API 获得前 10/20/50 个类似项目。我知道我们可以将 --maxSimilaritiesPerItem 传递给项目相似性工作,但我不完全确定它代表什么以及它是如何工作的。如果我将其设置为 10/20/50,我是否能够实现上述目标。还有没有办法通过api来完成这个?
我正在使用 rescorer 来过滤和重新评分最终建议。使用 rescorer,与 (30-70ms) 相比,对 /recommend/userid?howMany=10&rescore={..} 和 /similar/itemid?howMany=10&rescore{..} 的调用时间更长 (300ms-400ms)没有记分员。我正在使用 redis 作为内存存储来获取重新评分数据。rescorer 还接收一些运行时数据,如上所示。rescorer 中只进行了一些检查。问题是,没有。特定用户的项目偏好增加(> 100),没有。对 isFiltered() 和 rescore() 的调用大大增加。这主要是因为对于每个用户偏好,对 CandidateStrategy.getCandidatItems(item) 的调用会为每个返回大约 (100+) 个相似的项目,并且为每个这些项目调用 rescorer。因此,需要限制工作中每个项目的最大相似项目数。这是正确的还是我在这里遗漏了什么?在这种情况下,优化 rescorer 的最佳方法是什么?
MysqlJdbcInMemorySimilarity 使用 GenericItemSimilarity 加载 memeory 中的项目相似性,其 .allsimilaritems(item) 从 mysql 中预先计算的项目相似性中返回给定项目的所有可能相似项目。我是否需要实现我自己的项目相似性类来返回前 10/20/50 个相似项目。如果用户的号码呢?的喜好继续增长?
如果有人能告诉我如何实现上述目标,那就太好了?多谢!