AirBnb 经常要创建用于机器学习模型的新特征,为了提高生产力和可扩展性,他们构建了一个名为Chronon的解决方案,用于创建将原始数据转换为特征并进行训练和推理所需的基础设施。
AirBnb 工程师兼 Chronon 创始人 Nikhil Simha 解释说,将原始数据转换为特征并用于训练 ML 模型是一项复杂且耗时的任务,工程师需要从 AirBnb 数据仓库中提取数据,并编写复杂的 ETL 逻辑将其转换为特征。另一个难点在于要确保这个逻辑所生成的推理特征分布与训练时的相同。
Simha 说,Chronon 就是为了解决这些问题,使机器学习工程师在训练和推理中以可复制的方式定义特征并中心化数据计算。
作为用户,你只需要声明一次计算,Chronon 就会生成所需的所有基础设施,不断地将原始数据转换为训练和服务所需的特征。AirBnb 的机器学习从业者不用再花费数月的时间手动实现复杂的管道和特征索引。通常,他们用不到一周的时间就可以为他们的模型生成新的特征集。
Chronon的第一个组件支持从各种数据源获取数据,包括事件数据源、实体数据源和累积事件源,从每个数据源收集不同类型的数据。
摄取数据后,它就可以使用类似 SQL 的操作和聚合进行转换,从而生成服务于在线模型的低延迟端点,以及用于离线训练的 Hive 表。在底层,Chronon 使用 Kafka、Spark/Spark Streaming、Hive 和 Airflow 来构建管道。类似 SQL 的操作包括GroupBy
、Join
和StagingQuery
,它们是 Spark SQL 查询,每天脱机计算一次。聚合包括窗口、桶和基于时间的聚合。
最后,它还有一个 Python API,提供了类似 SQL 的原语,并将基于时间的聚合和窗口作为一级概念。例如,使用 Python API,你可以过滤和转换用户在过去五个小时内查看某个物品的次数。
Chronon 有一个重要的概念是准确性,即特征值更新的频率,是实时更新还是固定时间间隔更新。要根据特定的用例选择合适的准确性,因此,Chronon 让用户可以方便地将计算的准确性设为为 temporal 或 snapshot。
在写这篇文章的时候,我还不知道 AirBnb 是否会在 GitHub 上提供 Chronon,但如果你想创建自己的特征工程管道,可以读下原文中的讨论,非常有趣。
原文链接:
https://www.infoq.com/news/2023/08/airbnb-chronon-ml-features/
评论