Rocket Money x Hugging Face: 在生产环境中扩展易变的 ML 模型

Rocket Money 从遗留的正则表达式(regex)系统过渡到托管在 Hugging Face 的 Inference API 上的基于 transformer 的机器学习模型,使应用能够扩展到每月超过十亿笔交易,同时提高用户留存率。

用 Transformer 模型替换遗留的正则表达式

Rocket Money 使用交易处理管道来对银行交易进行分类和 categorization,这对于识别周期性模式和检测用于成本谈判的商家至关重要。公司最初依赖基于正则表达式的 normalizer 和一个复杂的决策表来将字符串映射到品牌。随着订阅经济的增长和产品范围的扩大,由于需要不断调整以及碰撞和重叠的风险,该系统变得不可持续。

在探索了诸如 bag-of-words 模型之类的 unsuccessful traditional ML 解决方案后,Rocket Money 开发了一个使用 BERT 家族模型进行文本分类的新系统。为了支持这一点,他们使用 Retool 构建了内部工具,用于标记队列、金标准验证数据集和漂移检测监控。

使用 Hugging Face 克服生产挑战

Rocket Money 在将具有 4,000+ 个类别的模型移入生产时面临重大的基础设施挑战。该系统需要高可用性和动态扩展,以低延迟处理每月超过 1 亿笔交易的“突发”负载。

为了避免构建内部 MLOps 团队的开销,Rocket Money 评估了三种托管方案:

  • 内部原型解决方案: 一个手工构建的托管系统。
  • AWS SageMaker: 被发现是“笨拙且易出错”,因为 Rocket Money 使用 GCP 进行数据存储,并使用 Google Vertex Pipelines 进行训练。
  • Hugging Face Inference API: 因其设置简便且能够快速处理流量而被选中。

在进行了为期三个月的评估期间,涉及最坏情况下的模拟负载测试后,Rocket Money 正式采用 Hugging Face 进行模型托管。

集成与业务影响

Rocket Money 实施了从正则表达式系统到 transformer 模型的分阶段迁移。他们进行了一项 A/B 测试,其中新用户在这两个系统之间平均分配,结果显示 ML 模型在付费用户留存率和参与度方面明显优于遗留系统。这导致在两个月内向 100% 的用户全面推出。

扩展与性能优化

随着流量增加,Rocket Money 在推理调用之前实施了缓存层以管理成本。虽然理论最大缓存率为 93%,但他们在生产中达到了 85% 的缓存率,显著降低了发送到 Inference API 的交易基数。

尽管存在一些初始挑战——包括由于扩展第二个生产模型的类别数量导致的宕机以及模型过渡期间的缓存问题——该系统最终扩展到每月超过十亿笔交易的运行速率。此基础设施支持 Rocket Money 在应用商店中崛起为排名第一的金融应用。

未来方向与模型拓扑

Rocket Money 继续专注于类别和性能调优、自动化监控以及管理模型生命周期(例如,处理公司重新品牌化)。

关于模型选择,Rocket Money 发现专门的 transformer 分类器目前在速度和成本方面对于其主要分类任务优于 Large Language Models (LLMs)。然而,他们正在探索 LLMs 用于服务的“长尾”,例如小型本地企业(“妈妈和爸爸商店”),在这些情况下,专门的分类器可能效果较差。

Sources