信息推流,小米浏览器的Milvus实践

Milvus 向量搜索引擎开源半年以来,全球已经有过百家企业或组织用户。小米做为一家专一于智能硬件和电子产品研发的全球化移动互联网企业,也是 Milvus 的重要用户。git

|应用场景

随着信息技术和互联网行业的发展,信息过载成了人们处理信息的挑战。对于用户而言,如何在以指数增加的资源中快速、准确地定位到本身须要的内容是一个很是重要的事情。对于平台而言,如何把恰当的内容及时呈现给用户,从而促进点击量和阅读量,也是一件颇具难度的事情。github

当你打开小米手机上的浏览器,后台系统会向用户推荐其感兴趣的优质文章和热点内容等。使用 Milvus 来加速其类似文章的检索速率。算法

资讯类推荐系统中的核心是从海量的文章库中挑选合适的文章最终展现给用户。因为库中数量大,所以常见的推荐系统通常分为两个阶段,即召回阶段和排序阶段。召回阶段主要是从全量的库中获得用户可能感兴趣的一小部分候选集,排序阶段则是将召回阶段获得的候选集按必定的指标进行精准排序,推荐给用户。浏览器

召回阶段,根据用户的兴趣和点击等信息,从几十万的文章底库中召回几千篇最适合用户的文章,再对这几千篇文章进行个性化的排序,最后进行展示处理,推荐给客户端。用户在客户端进行点击操做时,可以根据用户的线上行为实时反馈,快速跟踪用户的偏好,对用户进行新的推荐。网络

在资讯类文章的推荐场景下,召回一般还须要知足时新性。因此在此类场景中,召回模型要知足以下几点:架构

(1) 高效性:要在很短的响应时间内完成文章的召回;(2) 相关性:要尽量召回那些匹配用户兴趣的文章;(3) 时新性:新上线的文章,也要能被召回,以确保最新的内容也有曝光的机会;app

在用户的具体场景中,其信息流的类似文章召回阶段中,除了召回用户感兴趣的文章以外,还用于肯定新的热点文章推广范围,将新的热点文章与库中的历史文章作类似度检索,获取与之类似度最高的 K 篇历史文章,而后根据 K 篇类似文章的点击率,判断新的文章的热度,肯定给用户的推荐范围。框架

| 关键技术

Milvus分布式

Milvus向量类似度搜索引擎能够对接包括图片识别,视频处理,声音识别,天然语言处理等深度学习模型,为向量化后的非结构数据提供搜索分析服务。经过深度学习模型将非结构化数据转化为特征向量导入Milvus库,Milvus对特征向量进行存储并创建索引,而后在Milvus中进行搜索,Milvus将返回检索向量的类似结果。性能

BERT

BERT 模型是一个新的语言表达模型(language representation model),全称是 Bidirectional Encoder Representation Transformers,即双向Transformer的Encoder。能够理解为这是一个通用的 NLU (Natural Language Understanding) 模型,为不一样的 NLP 任务提供支持。模型的主要特色:

  • 使用了 Transformer 做为算法的主要框架,Transformer 能更完全的捕捉语句中的双向关系;
  • 使用了Mask Language Model (MLM) 和 Next Sentence Prediction (NSP) 的多任务训练目标;
  • 使用更强大的机器训练更大规模的数据,使 BERT 的结果达到了全新的高度,用户能够直接使用 BERT 做为 Word2Vec 的转换矩阵并高效的将其应用到本身的任务中。

BERT的网络架构使用的是多层 Transformer 结构,其最大的特色是抛弃了传统的 RNN 和 CNN,经过 Attention 机制将任意位置的两个单词的距离转换成1,有效的解决了 NLP 中棘手的长期依赖问题。

Transformer 的网络架构如图所示,由 Multi-Head Attention 和一个全链接组成,用于将输入语料转化成特征向量。

BERT 的网络结构以下图,该图中的一个 'trm' 对应上图的 Transformer 的网络架构。

BERT 提供了简单和复杂两个模型,对应的超参数分别以下:BERT BASE: L=12,H=768,A=12,参数总量110M;BERT LARGE: L=24,H=1024,A=16,参数总量340M;

在上面的超参数中,L 表示网络的层数(即 Transformer blocks 的数量),A 表示 Multi-Head Attention 中 self-Attention 的数量,filter 的尺寸是 4H。

| 系统实现

在小米浏览器首页推荐系统中实现的文章召回系统可分为三个模块:向量化服务, ANN 服务、ID Mapping 服务这三部分:

向量化服务:经过深度学习模型将文章标题转化为通用句向量。这里采用的是基于 BERT 调整的 SimBert 模型。SimBert,跟 BERT 模型一致,12层模型,hidden size为768。simbert 是使用基于模型 chinese_L-12_H-768_A-12 进行继续训练,训练任务为“度量学习+UniLM”,以 Adam 优化器(学习率2e-6,批大小128)在单个 TITAN RTX 上训练了117万步。简单来讲,这就是一个优化过的 BERT 模型。

ANN 服务:将文章标题的特征向量插入 Milvus 的 collection 中(这里的 collection 至关于结构化数据里的表),而后用 Milvus 作向量类似度检索,获得类似文章的 ID。

ID Mapping 服务:经过 Milvus 检索结果获得的 ID,获取对应文章的曝光度、点击量等相关信息。

召回系统总体架构图以下:

目前的使用场景中有数十万的文章底库,因为天天都会产生新的文章数据,过期的数据也须要删除,因此在该系统中,选择了将 T-1 天的数据作全量更新,第 T 天的数据增量更新。全量更新也就是上图中所示的离线更新,天天凌晨删除掉旧的 collection,而后将已处理好的前 T-1 天的数据插入新的 collection 中。增量更新是上图所表示的实时更新,这里是对当天产生的新的数据实时插入的过程。数据插入完成后,在 Milvus 进行类似度检索,而后将检索出来的类似的文章按点击率再一次进行排序,召回这些类似文章中高点击率的文章。得益于 Milvus 数据快速插入和高性能检索,在这种频繁更新数据的场景,可以极大的提升库中文章的更新速度,以及高点击率文章的召回速率。

| 结语

目前在推荐系统中应用最为普遍的召回技术是将商品和用户等信息向量化,而后经过计算向量间的类似度来实现召回,而这一技术的推广应用很大程度上受益于基于 ANNS(近似最近邻搜索)算法的向量类似度搜索引擎的出现,大大提升了向量类似度计算的效率。相较其余相似产品,Milvus 集成了数据存储功能,有更丰富的 SDK,并提供了分布式部署的解决方案,大大下降了召回层架构搭建的工做量;同时具备更好的社区活跃度和项目支持力度,这也是小米选择 Milvus 做为向量类似度检索产品的重要缘由。

但愿 Milvus 在非结构化数据处理的道路上走得更远,为企业带去更多的价值。同时也但愿更多志同道合的伙伴加入 Milvus 开源社区,一块儿参与、见证 Milvus 的成长。

|欢迎加入 Milvus 社区

http://github.com/milvus-io/milvus | 源码

http://milvus.io | 官网

http://milvusio.slack.com | Slack 社区

http://zhihu.com/org/zilliz-11| 知乎

http://zilliz.blog.csdn.net | CSDN 博客

相关文章
相关标签/搜索