Indeed.com 每个月有两亿不同的访客,有每天处理数亿次请求的推荐引擎。在这篇文章里,我们将描述我们的推荐引擎是如何演化的,如何从最初的基于Apache Mahout建立的最简化可用行产品,到一个在线离线混合的成熟产品管道。我们将探索这些变化对产品性能指标的影响,以及我们是如何通过使用算法、架构和模型格式的增量修改来解决这些挑战的。进一步,我们将回顾在系统设计中的一些相关经验,相信可以适用于任何高流量的机器学习应用中。
从搜索引擎到推荐
Indeed的产品运行在世界各地的许多数据中心上。来自每个数据中心的点击流数据以及其他应用事件被复制到我们在奥斯丁数据中心的一个中心化的HDFS数据仓库中。我们在这个数据仓库上进行计算分析并且构建我们的机器学习模型。
我们的职位搜索引擎是简单而直观的,只有两个输入:关键字和地点。搜索结果页面展示了一个匹配的职位列表,并基于相关性进行了排序。搜索引擎是我们的用户发现职位的主要方式。
我们决定在搜索引擎之上加入职位推荐作为一个新的交互模式是基于以下几个关键原因:
Indeed上所有搜索的25%只指定了一个区域,并没有搜索关键字。有许多的求职者并不确定在他们的搜索中应该用什么关键字
当我们发送有针对性的推荐时,求职者的体验是个性化的
推荐可以帮助甚至最复杂的用户来发现额外的未被搜索所涵盖的职位
推荐为亚马逊带来了额外35%的销量为Netflix75%的内容阅览。很显然,推荐能提供额外的价值
推荐职位与推荐产品或者是电影有很显著的区别。这里列举了一些我们在构建推荐引擎时仔细考虑过的因素:
(职位)库存快速增长:我们每天要聚合计算几百万新的职位。可以推荐的职位的集合在不断变化
新用户:每天有几百万新的求职者访问我们的网站并开始他们的职位搜索。我们想要能够根据有限的用户数据生成推荐