我有一个包含两种不同类型用户(导师和受训者)的数据库,我希望第二组(受训者)能够“搜索”第一组(导师)中与其个人资料相匹配的人。导师和学员都可以随时进入并更改其个人资料中的项目。
目前,我正在使用 Apache Mahout 进行用户匹配 (recommender.mostSimilarIDs())。我遇到的问题是每次有人搜索时我都必须重新加载用户数据。就其本身而言,这不会花费那么长时间,但当 Mahout 处理数据时,它似乎需要很长时间(3000 名导师和 3000 名学员需要 14 分钟)。处理后,匹配只需几秒钟。在处理过程中,我也一遍又一遍地收到相同的 INFO 消息(“已处理 2248 个用户”),而查看代码显示该消息只应每 10000 个用户输出一次。
我正在使用 GenericUserBasedRecommender 和 GenericDataModel,以及 NearestNUserNeighborhood、AveragingPreferenceInferrer 和 PearsonCorrelationSimilarity。我从数据库加载导师,将学员添加到 POJO 列表并将它们转换为 FastByIDMap 以提供给 DataModel。
有没有更好的方法来做到这一点?产品所有者需要每次搜索的数据都是最新的。
最佳答案
(我是作者。)
你不应该每次都要求它重新加载数据,这是为什么呢?
14 分钟听起来很不错,加载如此少量的数据也太长了,出了点问题。您可以通过 user@mahout.apache.org 了解更多信息。
您正在查看来自 DataModel
的日志消息,您可以在您选择的日志系统中禁用它。它打印一个最终计数。这没什么好担心的。
我建议您不要使用 PreferenceInferrer
除非您绝对知道自己需要它。你真的有收视率吗?如果不是,我可能会建议 LogLikelihoodSimilarity
。
关于java - 用户与当前数据匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574929/