科技俱乐部菌 来分享下内容社区的AI架构搭建与应用,知乎CTO李大海:谢邀( 二 )


在设计良好的架构和统一代码管理的模式下 , 方便我们去构建这个场景下的通用代码库 , 提高基础功能的代码复用率 , 并解决项目和代码的散乱问题 。
在统一的基础服务架构上 , 团队成员的开发工作模式一致 , 并且沟通语言都是基于此 , 一定程度上会提升协作效率和沟通效率 。
同时 , 开发人员更容易理解非自己主导项目的脉络主线 , 可以极大地降低工作内容调整和交接的复杂度 。 从另一个角度提升了协作、沟通效率 。
在统一的基础服务架构下 , 团队不再需要关心一些通用的细节 , 只是按需调用/复用通用组件 , 将主要的精力用在解决问题的核心算法/模型上 , 这样一来 , 加速了团队的技术积累 , 快速地推进业务的创新 。
这张图可以简单的展示知乎基础AI架构的体系 。
科技俱乐部菌 来分享下内容社区的AI架构搭建与应用,知乎CTO李大海:谢邀
文章图片
我们的统一框架取名叫zai , 本质上是一个工作流水线 。 其中的每个部件都是可定制的 。 workflow分为三大类:
baseworkflow , 通常只包含一种推断服务或预测服务 。
seriesworkflow , 其可以串联多个不同的baseworkflow , 形成一个更复杂的服务链 , 比如关键词服务 , 需要前序依赖分词服务 。
parallelworkflow , 其可以并联多种seriesworkflow , 形成相对比较复杂的网络 , 比如监听内容创建kafkatopic , 并分别进行多种预测处理 。
在这个框架中 , 我们选择protobuffer来进行数据schema的定义 , 满足速率快和存储小的需求 。
zai-serving是预测/推荐模块 , 加载zai-model模块训练出来的模型来进行推断服务 。 模型可以支持传统模型和NN模型 。 其中NN模型基于tensorflowestimator做了改造和封装 , 这样具备以下优点:
数据管道和模型分离 。
保留足够的模型灵活度 , 具有模型自定义的自由和模型相关超参调整的自由 。
封装了训练、预测、评估、模型输出;只需要关心模型本身 。
基础AI架构的主要应用场景 , 一般是各种离线的数据处理场景 。 在典型的线上推荐场景中 , 我们也正在形成统一推荐框架 。
统一推荐AI架构
当越来越多的业务都需要用到推荐服务时 , 我们开始了统一推荐框架的工作:我们期望通过统一Ranking框架 , 将推荐系统全局排序阶段的技术统一 , 降低开发和维护成本 , 提高效率 。
科技俱乐部菌 来分享下内容社区的AI架构搭建与应用,知乎CTO李大海:谢邀
文章图片
知乎的统一推荐框架包括以下模块:
统一的完备的数据schema , 打通各业务线的数据 , 减少重复特征数据的落地成本 , 并成为统一推荐框架的标准输入 。
统一的特征落盘服务 , 各业务线可根据业务特点 , 灵活填充schema中的特征字段 , 减少在特征落盘和训练数据管理部分的开发工作 。 特定业务还可以低成本的实现跨部门数据复用 , 打通不同部门之间的数据协同作用 。
统一的训练数据流水线 。
统一的特征工程框架 。
统一的训练代码库 。 有利于模型结构复用 , 兼容离线训练和onlinelearning训练 。
统一的线上预测服务 。 支持tensorflow和xgboost的模型;支持模型的自动加载和更新;提供通用的特征、预测分数监控 。 支持CPU或GPU部署 。 优化公共特征计算 。
我重点讲一下其中的几个模块 。
第一个是特征引擎 。
特征数据处理 , 是要把结构化的特征数据(如用户画像 , 内容画像等)转换成向量化的训练数据 。 我们的特征引擎具备以下功能:
特征工程配置化:管理使用哪些特征;增删特征无需改代码 。 避免了离线数据处理和线上预测服务代码不一致的情况 。
特征工程模块化:我们把对特征数据的操作抽象成一个个操作子(operator) 。 比如:Echo,OneHot等 。 规范了operator的输入输出;每个operator可以处理不同的特征数据;大部分operator和具体的业务无关 , 代码可复用性大大增强 。 每个operator必须有严格的单元测试 , 保证了特征工程代码质量 。


推荐阅读