Foursquare: 如何构建我们的模型训练引擎(Model Training Engine)

英文原文地址:How we built our Model Training Engine

翻译:大魁,时间短暂,翻译的比较粗糙

在Foursquare,我们面临大规模的机器学习任务。例如,要从低质量的GPS信号中确认用户签到的场所;个性化推荐;根据用户或者他们的好友去过的地方来推送打折和促销信息。几乎app的每一个功能都或多或少用到了机器学习。所有这些服务都具有海量的规模:每天一百万发现请求、和六百万次签到。我们必须以比眨一次眼更少的时间来处理每次请求,并且几百万的用户交互也给我们的模型提供了几百万的训练数据。我们必须构建一个模型训练引擎(MTE)来自动化我们的训练过程。

让模型适应数据,而不是让数据适应模型

许多模型是基于线性回归或者类型的方法构建的,虽然这些模型能帮助我们快速使用和理解数据,但便捷性仍不足以抵消模型本身不合理的假设,和有限的学习能力。我们的MTE选择了Boosted Decision Trees 和 Random Forests模型,因为模型更加强大,可以更好的适应数据。并且用scikit-learn和MapReduce实现了2个版本。

确保模型是最新的

由于每天有六百万新的签到数据,模型很快就过时了。MTE自动地利用新数据对模型重新训练。新的数据和旧数据中的变化,都立即被合并到新的模型中。我们会对模型的效果进行监控,一旦新模型胜过旧模型,旧模型就会被替换。

使模型训练适应数据规模和整个系统

由于是一个多模块相互关联的系统,别的模块的一个看似无关的改动,可能会引起模型的需求变化。怎样才能构建一个适应数十亿次签到的系统,并且各个模块之间可以良好的协作?

我们用了online learning算法和巧妙地抽样方法来解决内存中装不下所有数据的问题。我们用了bagging和交叉验证的技术,将不同的样本合并到一个预测器,最大化有效样本的同时,避免过拟合。这意味着添加一个样本,或者搞错一个样本,并不会使弄坏整个模型。例如,如果某个工程师不小心添加了很多随机的噪声样本进来,MTE可以快速的检测出来,这些样本无法进行预测,然后会将这些样本丢弃。这允许我们接纳来自公司同事的任何新的idea和样本集,而不仅限于数据科学家。

除此之外,MET能够适应前端和产品的快速迭代,而不需要人工调整。例如,如果我们的移动开发团队改变了UI,使用户好友过去的签到记录更加重要,MTE可以自动检测出来用户更倾向于社交记录,因此对模型自动地进行调整。我们自动的MTE意味着工程师可以专心构建样本集,放心地将选取最优样本交给模型训练过程。

所有的这些进步都是为了更好地用户体验。

你可能感兴趣的:(Foursquare: 如何构建我们的模型训练引擎(Model Training Engine))