2010-04-27 81 views
3

我学习的推荐引擎,我通过定义谷歌新闻如何为这可能是他们感兴趣的新闻,基于协同过滤生成用户建议paper去了。他们提到用于在Google新闻中生成推荐的算法?

一个有趣的技术是Minhashing。我经历了它的所作所为,但我很确定我所拥有的是一个模糊的想法,而且我很可能错了。下面是什么我可以做出来的: -

  1. 收集一套所有新闻项目。
  2. 定义用户的散列函数。该散列函数返回该用户查看的新闻项目中的第一项的索引,在列表中全部为新闻项目。
  3. 收集,说这样的值“n”的数量,并代表一个含此值列表的用户。
  4. 基于这些列表之间的相似计数,我们可以计算用户之间的相似性为普通物品的数量。这减少了大量的比较。
  5. 基于这些相似性度量,用户划分为不同的簇。

这正是我想可能是。在步骤2中,不是定义一个常量散列函数,而是以一种方式改变散列函数,使其返回不同元素的索引。因此,一个散列函数可以返回用户列表中第一个元素的索引,另一个散列函数可以返回用户列表中第二个元素的索引,依此类推。所以哈希函数的性质满足minwise independent permutations条件,这听起来像是一种可能的方法。

谁能请确认是否是什么,我认为是正确的?或者Google新闻推荐的最小化部分以其他方式发挥作用?我不熟悉推荐的内部实现。任何帮助非常感谢。

谢谢!

回答

2

我觉得你很接近。

首先,散列函数首先随机的置换所有的新闻项目,然后对于任何给定的人看的第一个项目。由于每个人都有相同的排列,所以两个人有相同的第一个项目的机会。

之后,得到一个新的哈希函数,而不是选择第二个元素(这将有第一个元素上一些容易混淆的依赖关系),他们选择了一个全新的置换,并再次采取的第一个元素。

人谁碰巧具有相同的哈希值的2-4倍(即在2-4排列相同的第一个元素)在群集放在一起。这个算法重复10-20次,这样每个人都被放入10-20个簇中。最后,根据10-20个集群中的其他人(少数)给出建议。由于所有这些工作都是通过哈希完成的,所以人们直接放入桶中进行簇处理,并且不需要大量的比较。

+0

非常感谢应答。这说得通。考虑到我们多次重复该算法,我们可以通过比较两个用户的哈希值列表来计算两个用户的相似度,这将使我们能够衡量两个用户在某个位置上达成一致的次数。 我还有一个问题是,如何定义桶?为了把一个特定的人放入桶中,我们需要将这个人与其他人关联起来?他们只是将用户与桶中的* 1 *用户进行比较,因为该桶中的所有其他用户大多都是相似的? 再次感谢。 – Siddhant 2010-04-29 14:25:14

+1

一个桶被定义为“在随机排列下的前2-4个项目具有相同散列值的人群”。 因此,不需要将人员间的比较放入桶中。喜欢和散列表,每个人被直接送到一个桶。 我还没有阅读整篇论文,但我假设他们然后使用共享存储区中的每个用户来帮助确定建议。桶的整个目标是使“每个用户”足够小。 – mathmike 2010-04-29 15:51:40