专栏名称: 大数据文摘
普及数据思维,传播数据文化
目录
相关文章推荐
51好读  ›  专栏  ›  大数据文摘

工作职位推荐系统的算法与架构

大数据文摘  · 公众号  · 大数据  · 2016-12-21 06:37

正文

请到「今天看啥」查看全文


何理解推荐算法

推荐是一个匹配问题 。给定一个用户集合和一个物品集合,我们想要将用户匹配到他们喜欢的物品上。有两种高层次的方法可以达成这类匹配:基于内容的和基于行为的。它们各有优缺点,此外也有将两者结合起来从而发挥各自优势的方法。

基于内容的方法使用比如用户偏好设置、被推荐物品的特性之类的数据来决定最佳匹配。对于职位推荐来说,通过职位的描述中的关键字来匹配用户上传的简历中的关键字是一种基于内容的推荐方法。通过一个职位的关键字来找到其他看上去相似的职位是另外一种基于内容的推荐的实现方法。

基于行为的方法利用了用户的行为来生成推荐。这类方法是领域无关的,这意味着同样的算法如果对于音乐或者电影有效的话,也可以被应用在求职领域。基于行为的方法会遇到所谓的冷启动问题。如果你只有很少的用户活动数据,就很难去生成高质量的推荐。


Mahout协同过滤

我们从建立一个基于行为的推荐引擎开始,因为我们想要利用我们已有的求职用户和他们的点击数据,我们的首次个性化推荐尝试是基于Apache Mahout提供的基于用户间的协同过滤算法的实现。我们将点击流数据喂给一个运行在Hadoop集群上的Mahout构建器并产生一个用户到推荐职位的映射。我们建立一个新的服务使得可以运行时访问这个模型,且多个客户端应用可以同时访问这个服务来获取推荐的职位。


产品原型的结果和障碍

作为一个产品原型,基于行为的推荐引擎向我们展示了一步步迭代前进的重要性。通过快速建立起这个系统并将其展示给用户,我们发现这种推荐对于求职者来说是有用的。然而, 我们很快就遇到了一些在我们的数据流上使用Mahout的问题

  • 模型构建器需要花大约18个小时的时间来处理Indeed网站2013年的点击流数据,这个数据量要比今日的数据小了三倍。

  • 我们只能一天执行一个模型构造器,这意味着每天新加入的用户直到第二天为止看不到任何推荐。

  • 几百万新汇总的职位在模型构造器再次运行之前是不能作为可见的推荐的。

  • 我们产生的模型是一个很大的映射,大约占了50吉字节的空间,需要花费数个小时将其通过广域网从其生成的数据中心拷贝到全球各地的数据中心。

  • Mahout的实现的提供露了一些可配置参数,比如相似度阈值。我们可以调节算法的参数,但是我们想要测试整个不同的算法这样的灵活性。


为推荐实现最小哈希

我们先解决最重要的问题:构建器太慢了。我们发现在Mahout中的用户间相似度是通过在n^2复杂度下的用户间两两比较的来实现的。仅对于美国的网站用户来说(五千万的访问量),这个比较的数量将达到15 * 10^15次,这是难以接受的。而且这一计算本身也是批量处理的,新加一个用户或者一个新的点击事件就要求重新计算所有的相似度。

我们意识到推荐是一个非精确匹配问题 。我们是在寻求方法来发现给定用户最相近的用户们,但是我们并不需要100%准确。我们找了一些估算相似度的方法,不需要准确的计算。

主要贡献者戴夫格里菲思从一篇谷歌新闻学术论文上看到了最小哈希方法。最小哈希(或者最小独立序列)允许近似计算杰卡德相似度。将这一方法应用到两个用户都点击过的职位上,我们发现两个用户有更多共同的职位点击,那么他们的杰卡徳相似度就越高。为所有的用户对计算杰卡徳相似度的复杂度是O(n^2),而有了最小哈希后,我们可以将复杂度降到O(n)。







请到「今天看啥」查看全文