我正在为网页构建推荐器。对于我们数据集中的每个网页,我们希望生成其他用户也访问过的网页列表。
我们的数据仅显示用户访问过一个页面,或者他们没有访问过。用户不提供我们网页的任何评级。对于基于项目的推荐来说,这是一项很好的任务。但是,大多数算法(例如 Mahout 中的算法)都需要评级数据。
我想出的第一个解决方案是使用图形数据库并编写一个执行以下操作的查询:
对于我们想要推荐的每个页面,我们搜索查看过该页面的所有用户。然后,对于每个用户,我们查找他们查看过的所有其他页面。然后,我们计算查看过该数据集中每个页面的用户数量,并使用数量最多的用户作为我们的推荐。
虽然这工作得很好,但我们的数据集已经大幅增长,并且很难扩展图形数据库。随着我们数据集中页面浏览量的增加,查询变得更慢。在我们承诺迁移到分布式图数据库之前,我们想考虑一个不同的实现。
在更传统的基于项目的推荐器(如 Mahout 的)中,是否有“伪造”排名数据的好方法,或者是否有不需要排名数据的流行开源实现?