作者| 阿里文娱开发专家 崇懿、

阿里文娱开发专家慧善

责编 | 屠敏

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

优酷视频搜索在文本搜索系统的基础上,不断探索视频搜索的方案,在多模态输入、多级多模态索引、跨模态检索上积累了丰富经验,并应用到C端B端场景中。本次分享将揭开多模态图引擎的面纱。

背景

随着智能手机及移动互联网的快速发展,人们接触到的多模态数据在数量和类别上都在飞速增长。计算、存储能力不断突破,人工智能技术也得以发展,在云、端测中CV技术、AR/VR技术都为人们提供更便利、智能的体验。

优酷作为视频平台拥有海量OGC、UGC视频内容,视频内容数据是一个高维度多模态的数据,有标题、简介、评论等文本信息,有视频帧的图像信息,有声音,也有连贯的动作视频片段。传统的基于倒排索引的搜索引擎只适合检索文本信息,对于多媒体内容检索能力不足。

为了让用户更便捷的找到多媒体内容,增加多模态搜索能力,开创性设计与研发多级多模态搜索引擎(MMS)。提供分布式大规模多层级多模态索引能力,低延时跨模态级联检索能力,多层级检索、融合、排序能力。

系统概况

基于阿里平台的Hippo(在线服务调度)、SAP(应用服务框架)等基础设施开发部署。MMS主要是在索引结构、检索控制、执行框架、部署等方面做了系统设计和选型。

关键技术

1. 分布式多级多模态索引结构设计

每层级独立构建分布式索引,索引类型包括倒排及向量索引。以视频、帧(图片)、人脸举例,索引结构如下:

1.  视频meta 文本,视频的元信息包括视频的名字,节目信息等,相对于线上的视频全库检索,这里只包含少量比较的字段,保证对视频的搜索精确召回。

2.  视频帧向量,我们把优质视频按关键帧切割,生成帧embeding 向量供检索,同时包含一些其他的帧的meta文本信息。

3.  人脸帧向量,对于切割帧中出现的明星,人物等,会识别出来并且向量化放在单独的检索库中

视频、帧、人脸存在层级关系;同时帧图片及人脸都有表征向量建的向量索引,支持亿级别规模,分10个分片,Top10的召回率90%以上。

2. 向量检索 

视频帧索引和人脸索引都集成了向量内容,通过算法提取到8.6 亿的高维视频帧向量,3800万的人脸向量,如此巨大的索引数据同时也考验我们对向量存储召回的选择,在经过多次的索引构建测试以后,我们选择aitheta 作为向量的执行召回引擎,aitheta 是拍立淘团队开发的向量检索引擎,在数据规模非常大时aitheta 的召回延时和召回率均优于faiss,同时indexlib 插件已经集成aitheta,可以很方便的使用,即使使用aitheta,对于10亿级别的高维向量检索,aitheta 的支持性也不是很好,我们团队专门做了一些优化,比如向量降维、自动化调参等。

在上层应用检索上我们使用Ha3 的向量查询能力,并且在这基础上进行功能扩充和优化,首先支持了向量检索的匹配分的返回,使用方可以更容易的进行按查询匹配的相关性进行截断和多维度打分,其次对于多个向量的查询,对返回结果添加来源向量标记,方便上层应用进行打散等业务逻辑。

向量召回架构

3. 检索调度

MMS的复杂性在于其在线检索逻辑,在支持层级及多模态query输入的基础上,如何控制跨层级、跨模态的检索。通过定义标准的跨层级和跨模态准则,根据用户的输入形成在线检索逻辑。

基本的检索流程如下图:

会由multi-call进行多层级、多模态扩展查询逻辑,其中关键是多级、跨模态的扩展查询逻辑。

1)跨层级

跨层级的检索由用户输入的层级作为起始检索点,用户想要的输出作为终点作为扩展,系统具有自适应推理能力。

2)跨模态

跨模态检索会有两种形式的解决方案,使用不同场景,索引构建前,不同模态数据做统一表征,映射到统一空间,在线进行向量检索,此处内容表征的占主要,MMS主要解决是在文本、向量间进行跨模态检索。

4. 图化执行引擎

复杂检索逻辑及低延迟服务能力要求,需要有高效的执行框架,图化执行引擎具备最大限度并行能力。同时对算子进行抽象,可以更自由编排及复用。

MMS选择Suez图化执行引擎,采用DAG执行引擎+业务逻辑算子的实现方式。

DAG 全图化引擎是阿里搜索AI·OS 的重要部分,主要思路是把业务逻辑和基础组件拆分并封装成tensorflow 的算子形式,在运行时数据以流(tensorflow里的Tensor)的方式传递,然后根据业务需求组装算子成静态执行图。正是 tensorflow 这种静态图的灵活性,我们甚至可以把MMS作为子图嵌入到其他应用中,也可以在MMS中嵌入其他的深度模型作为子图。全图化以后的应用支持异构设备,异步并行计算等tensorflow特性。

5. 通用性算子实现

搜索逻辑中会设计query parser、merge、sort通用逻辑,基于图化执行引擎接口实现通用算子:

1)query parser算子负责解析请求,查询串使用简单文本方式,相对于pb/binary方式,可视化的查询串更加直观,同时查询语法简单且强大。查询串支持查询文本查询,向量查询,或者同时有两者,支持高级语法,可以控制的查询参数粗排精排等;

2)merge融合多层级doc,补全所需要的正排、summary信息;

3)sort是搜索排序逻辑,排序后选取Top N返回;

4)result是结果返回和处理逻辑,基于查询使用文本方式,我们希望结果也是直接可视化,所以在构建结果的时候支持了json/xml,同时为了兼顾性能,我们也支持protobuf 的返回格式,同时还加入snappy/lz4 方式压缩,使返回结果集更小,传输效率更高;为了方便调试,我们加入了调试参数,可以保存聚合调试参数,输出引擎内部的调试内容。

产品应用

1. 优酷智能搜索

采用MMS对视频、帧、元素(人物、动作)等多级内容进行索引,召回出视频解构后的信息,可以实现定帧播放,支持用户对于精准视频内容片断的需求。

2. 以图搜剧

用户可以通过拍照、上传图片搜索人物及节目、相似画面的视频。输入态丰富为图像,召回系统采用MMS,既具备传统的通过人脸识别后用人名召回节目,又可直接通过图片向量进行召回。

总结&展望

多媒体信息不断丰富,直播、小视频等相关应用增长迅猛,5G移动通信技术的进一步普及,多媒体信息的生产、传播将会持续爆发式增长。人工智能技术日臻成熟,对于多模态内容理解、表征会进一步加强。多模态的人机交互体现会渗透到生活、生产各个环节。多级多模态的检索能力是必须要面临的核心问题。

优酷的多级多模态搜索引擎(MMS)提供了低延迟的跨模态、跨层级搜索能力,支持大规模多模态的索引。在视频分发、视频创作中都有着十分关键的应用场景。MMS技术在更多的智能交互场景也将发挥更广泛的应用场景。

推荐阅读
  • 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型

  • 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈

  • Python 还能实现哪些 AI 游戏?附上代码一起来一把!

  • 使用虚幻引擎4年,我想再谈谈他的网络架构

  • 真惨!连各大编程语言都摆起地摊了

  • 谁是合约届「技术之王」?

你点的每个“在看”,我都认真当成了AI

一文详解面向多级多模态场景的召回引擎相关推荐

  1. 一文详解 | 开放搜索兼容Elasticsearch做召回引擎

    简介:开放搜索发布开源兼容版,支持阿里云Elasticsearch做搜索召回引擎,本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库,提升查询语义理解能力,无需开发.算法投入,即可获得 ...

  2. 一文详解如何在真实场景的双目立体匹配(Stereo Matching)获取深度图

    来源:博客园 作者:一度逍遥 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左.右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图.而深度图的应用范围非常广泛,由于其能够记录 ...

  3. 一文数学数模-相关性分析(二)斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

    前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典.关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达.其中常见的相关性系数就有三种:person相关系数,spearman相关系 ...

  4. 从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘

    本文转载自:从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘 事务消息是RocketMQ提供的非常重要的一个特性,在4.x版本之后开源,可以利用事务消息轻松地实现分布式事务.本文对Roc ...

  5. 一文详解自动驾驶的动态驾驶任务(DDT) | 自动驾驶系列

    文章版权所有,未经授权请勿转载或使用 本系列上篇文章<一文详解自动驾驶的运行设计域(ODD)>解读了什么是自动驾驶ODD,本篇文章依据SAE J3016详细解读自动驾驶DDT.DDT fa ...

  6. 一文详解编程中的随机数

    一文详解编程中的随机数 随机数的类型 真随机数生成器 TRNG - True Random Number Generator 伪随机数生成器 PRNG - Pseudo Random Number G ...

  7. 一文详解 ChatGPT:背后的技术,数据,未来发展

    文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...

  8. 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1

    一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...

  9. 一文详解JavaBean 看这篇就够了

    一文详解JavaBean 看这篇就够了 JavaBean的历史渊源 JavaBean的定义(通俗版) JavaBean应用 < jsp:useBean > < jsp:getProp ...

最新文章

  1. 两大图像处理库Halcon和Opencv 的对比
  2. 写给初学大数据的你,从零开始学习大数据开发的完整学习路线
  3. Python 技术篇-win32、amd64结尾的whl库该选哪个,如何查看python平台支持
  4. 【深度学习篇】--神经网络中解决梯度弥散问题
  5. 02-CSS基础与进阶-day7_2018-09-07-21-27-32
  6. linux pdm 查看工具,linux系统监控工具
  7. python 服务器框架_python 服务器框架
  8. 【转载】Latex对中文的支持 模版
  9. php二维数组以某个键进行排序
  10. OpenGL采样贴图显示不出来
  11. 劳务php源码,php学校劳务酬金系统
  12. 回归分析-线性回归-检验-模型
  13. Java - 为什麽 Iterator接口 不提供 add(E) 方法 ?
  14. Linux用户、用户组的管理
  15. Daily record-August
  16. (4)绪论三:归纳偏好
  17. mysql中清空数据库数据保留表结构
  18. 100天精通Python(基础篇)——第2天:入门必备
  19. zabbix企业级实战笔记(原创)
  20. Java Math3 Probability Distributions(概率分布)

热门文章

  1. CES Asia专题|微鹅展示无线充电,智能手机的无线充电时代何时来临?
  2. Bootstrap3.x - 源代码分析
  3. modified: xxx(modified content, untracked content)
  4. init.rc的disabled含义
  5. 如何使dropship第三方销售是基于发货数量,而不是基于LIV发票校验的数量
  6. 用gdb调试mpi程序的一些心得
  7. java保护型数据成员_Java基础知识笔记第四章:类和对象
  8. 2018-3-6论文-网络评论中非结构化信息的应用于研究------(语义矩离)
  9. 文件中数组的最大值及其对应的最小下标
  10. js学习总结----crm客户管理系统之项目开发流程和api接口文档