小红书,美团,微博,今日头条……内容如海。作为互联网时代的生活基础设施,信息流产品是多数应用软件的一项必备属性。
然而,你是否曾为重复的微博段子、类似的热点文章、雷同的商品推荐而心烦?若某一款内容资讯产品持续一天推荐重复内容,既会影响用户的信息获取,又无形中浪费了很多推荐位(如果这些位置放的是广告,那就是赤裸裸的收入损失啊!)
对于一款信息流产品,如何找到一款数据处理利器嵌入产品开发之中,实现有效的新闻去重、新闻/广告召回,是打造多元丰饶的信息体验的重中之重。
SmartNews,这家估值 20 亿美元、目前美国新闻类应用程序中估值最高的公司,曾是 Milvus 向量数据库的使用者,后成为 Milvus 数据库的共同开发者。从单向调用到共同开发,让我们一起聆听他们的经验之谈吧!
SmartNews 总部位于日本东京,成立于 2012 年,在日本市场一直高居新闻类 App 的榜首,在美国市场则是粘性最强的新闻类 App。根据 App Annie 的统计,截止于 2021 年 7 月,SmartNews 用户月均浏览时间在所有新闻类应用程序中位列第一,超过 AppleNews 和 Google News 的总和。
伴随着用户量和用户粘性的快速提升,SmartNews 在广告推荐的工程和算法领域面临更多的挑战。例如:海量离散特征在大规模机器学习系统中的使用、通过向量相似度搜索来加速非结构化数据检索等。
2021 年初,SmartNews 动态广告算法团队向 AI 基础设施团队提出了广告优化搜索召回功能的需求。彼时,工程团队都是自行封装 Faiss,开发维护挑战较大,加上整个 SmartNews 正在扩大和深化机器学习的应用,于是 AI 基础架构团队决定提供通用的向量管理和近邻搜索服务。
经过近两个月的调研选型,有多种语言 SDK、支持在线持续更新、已经拥有上千家企业用户的开源向量数据库 Milvus 进入了 AI 基础设施工程师 Shu 的视野。
以向量计算实现广告推荐
在 SmartNew 的广告业务中,为了解决海量的用户和千万级的动态广告(Dynamic Ads)的匹配和推荐,向量数据库 Milvus 成了 SmartNews 的非结构化数据处理神剑——通过将两种无法比较的数据映射成计算机能识别的向量、实现对他们的计算,连接用户与商品。今年第二季度,Shu 在 SmartNews 公司内 Kubernetes 集群上完成 Milvus 1.0(单机/集群、CPU/GPU)的部署。
Milvus 部署教程(文档地址:https://milvus.io/docs)
Milvus 1.0 上线后的第一个使用案例是由广告团队提出的广告向量召回项目,初期约百万级的向量数据,严格要求 P99 latency < 10ms。经过反复的试验和基准测试(benchmark),Shu 和业务团队一起选定了速度更快的 Milvus 1.0 单机模式。
6 月上旬,Shu 和算法团队同学将 Milvus 数据库应用于更多的相关业务场景,在 SmartNews 尝试了线上实时更新数据/索引并进行聚合。
截止目前,Milvus 数据库在 SmartNews 的数个案例场景中被使用,包括广告推荐等。
从单向调用到共同开发「表重命名」
技术的跃迁要求每一个开发者必须充分利用他人的知识、经验和额外的智力来解决不断出现的新问题。
对 Milvus 数据库逐渐上手之后,Shu 等 SmartNews 开发人员又发现了动态重加载(hot reload)、向量自动过期(item TTL)、同 ID 覆盖向量(item update/replace)等新的向量数据库相关功能需求。与此同时,Milvus 社区中有不少用户存在类似需求,SmartNews AI 基础设施负责人 Dennis Zhao 就决定向社区贡献动态重加载相关功能,由 SmartNews 的工程团队主要负责设计开发参与设计。Dennis Zhao 表示:“SmartNews 团队一直受益于 Milvus 社区,如果一个功能既是我们产品亟需的又是对社区伙伴们有用的,我们很乐意去实现和分享。”
动态重加载是一种在调试过程中进行代码编辑的功能。有了这一功能,开发者们不需要在代码断点停止或者重启应用程序,就可以对代码进行修改,并立即看到代码修改的效果。
7月下旬,SmartNews 工程师 Yusup 向 Milvus 社区提出用表重命名(collection alias)方式实现动态重加载功能的设计方案。所谓表重命名,即开发者对特定数据仓库的诉求是内容可变的情况下名字不变,就好像一个柜子的编号和位置长期不变、柜子中拿进拿出的东西总是在随时间而变化。
由于模型的不断迭代以及动态广告的不断更新,SmartNews 需要每天更新近一亿向量,而当时 Milvus 数据库的更新机制是先删除再插入,以这种机制更新上亿向量,往往需要耗费数小时。重新创建新的集合存放更新的向量,就会涉及到新旧集合的切换,不停为新的内容打造新的「柜子」。如何让切换更加平滑, 对上层业务没有感知,表重命名就显得很必要了。
从这一需求出发, Milvus 社区的工程师着手帮助 SmartNews 团队理解 Milvus 的架构,一个半月后,Milvus 社区收到并接受了由 Yusup 提交的动态重加载完整实现代码,并发布在了不久后上线的 Milvus 2.0 rc7 中。目前,由 AI 基础设施团队牵头,SmartNews 正进行着Milvus 2.0的部署,并开始迁移现有的 Milvus 1.0 项目。
Milvus CLI 文档:create alias
Milvus 数据库支持表重命名之后,企业进行线上业务切换时更加平滑,尤其对于一些用户请求量比较大的互联网企业,极大地提升了用户体验。负责沟通 SmartNews 的 Milvus 社区数据工程师小龙说:“表重命名来源于 SmartNews 的实际业务需求,也由 SmartNews 开发实现,让 Milvus 真正做到了从用户中来,到用户中去,期待未来 Milvus 能有更多这样的贡献者,共同建设更繁荣的社区。”
“目前 SmartNews 已经在一些广告业务中采用 Milvus 数据库作为离线计算的向量数据库。伴随着 Milvus 2.0 正式版的临近,特别是动态重加载功能的实现,SmartNews 的工程团队期待未来更多的业务场景中,借助 Milvus 数据库构建更加实时、可靠的系统和服务。” Dennis Zhao 说道。
彩蛋
作为开源社区的一员,SmartNews 对于技术人才的开源项目也颇为关注哦 💗
在交流过程中,SmartNews AI 基础设施负责人 Dennis Zhao 表示,如果候选人的 GitHub 中的项目代码优雅、注释清晰且坚持维护,这对候选人是大大的加分项。目前 SmartNews 北京和上海办公室的算法/后端/ 前端等热招岗位持续招聘中,对打造信息流产品感兴趣的开发小伙伴,欢迎关注公众号「SmartNews CN」或点击下方链接了解更多详情!
Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。
Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 数据库是 LF AI & Data 基金会的毕业项目,能够管理大量非结构化数据集,在新药发现、推荐系统、聊天机器人等方面具有广泛的应用。