Milvus 向量搜索引擎开源半年以来,全球已经有过百家企业或组织用户。小米作为一家专注于智能硬件和电子产品研发的全球化移动互联网企业,也是 Milvus 的重要用户。
|应用场景
随着信息技术和互联网行业的发展,信息过载成了人们处理信息的挑战。对于用户而言,如何在以指数增长的资源中快速、准确地定位到自己需要的内容是一个非常重要的事情。对于平台而言,如何把恰当的内容及时呈现给用户,从而促进点击量和阅读量,也是一件颇具难度的事情。
当你打开小米手机上的浏览器,后台系统会向用户推荐其感兴趣的优质文章和热点内容等。使用 Milvus 来加速其相似文章的检索速率。
资讯类推荐系统中的核心是从海量的文章库中挑选合适的文章最终展示给用户。由于库中数量大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段。召回阶段主要是从全量的库中得到用户可能感兴趣的一小部分候选集,排序阶段则是将召回阶段得到的候选集按一定的指标进行精准排序,推荐给用户。
召回阶段,根据用户的兴趣和点击等信息,从几十万的文章底库中召回几千篇最适合用户的文章,再对这几千篇文章进行个性化的排序,最后进行展现处理,推荐给客户端。用户在客户端进行点击操作时,能够根据用户的线上行为实时反馈,快速跟踪用户的偏好,对用户进行新的推荐。
在资讯类文章的推荐场景下,召回通常还需要满足时新性。所以在此类场景中,召回模型要满足如下几点:
(1) 高效性:要在很短的响应时间内完成文章的召回;(2) 相关性:要尽可能召回那些匹配用户兴趣的文章;(3) 时新性:新上线的文章,也要能被召回,以确保最新的内容也有曝光的机会;
在用户的具体场景中,其信息流的相似文章召回阶段中,除了召回用户感兴趣的文章之外,还用于确定新的热点文章推广范围,将新的热点文章与库中的历史文章做相似度检索,获取与之相似度最高的 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 博客
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。