查看原文
其他

分享回顾 | 基于深度学习的神经语义搜索

王峰 Jina AI 2022-12-07

3 月 30 日,Jina AI 高级 AI 工程师王峰,做客 NeuHelium 新氦技术沙龙,为大家带来下一代搜索引擎的相关分享。


本文内容主要分为以下四部分:


神经搜索的背景及优势


 一、什么是神经搜索?


神经搜索 (Neural Search) 由 Jina AI 首创,可以理解为 Deep Learning for Search 的简称,是指借助深度学习技术,使用非结构化数据,搜索非结构数据。


神经搜索包括两个重要部分:信息搜索及深度学习技术。


1、神经搜索之信息搜索


提到搜索,最直观的理解就是 Google、百度、Amazon 网站首页上的搜索框,用户在搜索框里输入关键词,搜索系统给用户返回和关键词匹配的相关内容。


实际上搜索不仅仅是我们现在看到的交互页面,它还包括其他场景,例如用搜索实现一个聊天机器人,用户问一双鞋的格,聊天机器人返回一些相关信息。


搜索的输入也可以是 PDF 文档,返回也是 PDF。PDF 里包含的信息不是简单的关键字,而是大段文本。类似的搜索问题用传统搜索方法难以解决。


此外还有听歌识谱,搜索的输入是音乐片段,返回跟它最相似的音乐。或者输入一个关于足球的短视频,搜索到和足球相关的短视频片段。


同样也可以输入一双鞋的图片,返回和这张图片相似的商品。如淘宝淘立拍,用户在手机上拍一张商品照片,可以直接从淘宝找到商品的链接信息。


使用神经搜索技术,上述比较复杂的搜索场景,就比较容易实现。


上文中提到的图片、音频、视频、3D 模型等,都是非结构数据。与非结构化数据相对应的,是结构化数据。


结构化数据:以常用的数据库为代表,所有信息都是定义好的,可以直接进行快速搜索。


比较常见的是以关系数据库为代表的数据,或 Excel 里所有值的含义都是定义好的,可以直接用 SQL 语句搜索。


非结构化数据:没有明确定义好的、可供搜索的结构化信息。


例如给定一张图片,在计算机中它表达的只是一个三通道的 RGB 数值,计算机无法理解这张图片里面包含的具体信息——它里面包含的是猫是狗,还是风景?它只是计算机中的数字而已,不能直接对非结构化数据进行搜索。


2、神经搜索之深度学习技术


利用深度学习技术,可以实现非结构化数据的搜索。例如给定非结构化数据,借助深度神经网络模型,对非结构化数据进行转换,例如识别图片的文字描述,或离散的文字标签。


借助深度神经网络,可以对图片进行特征提取。这个特征是一些浮点数组,里面主要使用的方法,是借助神经网络提取非结构化数据的关键特征,然后基于这个特征(结构化数据),采用搜索算法进行搜索识别。


把非结构化数据转换成文字,也可以通过传统的文字搜索技术,对视频音频进行检索。


转化成文字的方法存在天然劣势,我们很难用文字完全覆盖或表达出原始数据里表达的信息。例如给定一张图片,可以直接对图片类别打标签,假如图片上是一只狗,但是可能还包含一些详细信息,如狗的颜色、品种、年龄等,这些信息都很难用一段文字完全表达出来。


我们比较推崇直接采用关键特征的方式解决这种问题,因为如果把非结构化数据转换成一些特征,那么它的搜索问题,就转变成了语义特征相似的搜索问题。


给定一些猫猫狗狗的照片,对每个照片里面的猫猫狗狗做特征的二维描述。横轴是种类(是猫还是狗),代表像猫/狗的程度。纵轴表示可爱程度。每个图片都可以由二维特征来表达,每张图片都可以被表达成这个空间中的一个点。


如果搜索一张小白狗的图片,如何搜索最相似的一张狗的图片?我们先描述小白狗的特征,它的特征值可能落到某个位置,然后通过找到它的最近邻来找到跟小白狗最相似的一张图片。


 二、神经搜索的优势 

传统的文本搜索(右)

给定一个关键词,对关键词的处理包含正则化、分词、找词根

拼写错误检查、识别实体类型、进行消歧等多个步骤

例如判定用户输入苹果,想搜的是水果还是手机


* 搜索结果完全根据特征向量与相关度来决定,只要特征向量提取的足够好,就可以通过特征向量之间的相似度,找到和它相似度最高的相关文档。


* 不再局限于文本检索,所有可以向量化的物品,都可以通过神经搜索方案实现搜索,例如图片、视频甚至 3D 模型、音频等。只要神经网络可以提取特征,就可以用这样的技术完成复杂类型数据的搜索。


更容易集成最新的深度学习算法和技术,提供丰富的语义特征。


神经搜索的关键技术


神经搜索过程:给定复杂的非结构化数据👉🏻神经网络对这些数据进行分析👉🏻提取关键特征,并存到数据库或索引里👉🏻利用向量搜索找到最相似的向量,返回给用户作为最终搜索结果。


这里最重要的两个部分就是深度学习模型和向量搜索这两个关键技术。


深度神经网络里用到的关键模型,是深度表征学习。


表征学习的目的,是把原始数据里的无效或冗余信息剔除掉,把有价值的信息提炼出来,形成浮点的向量特征。


它具有以下特点:


* 通常来说表征学习会紧跟一个下游任务(如分类任务)进行训练。下游任务用于评价表征学习的性能,例如在图片领域,我们通常会使用图片分类模型,训练完成后,把神经网络里最后一层的分类层去掉,把倒数第二层的模型输出作为本身图片的特征,直接拿来用。


* 通常深度模型用成百上千维向量来表征特征,提供更加丰富的语义信息,例如 RestNet50 模型可以提供 1024 维的向量,文本 BERT 模型会提供 768 维的向量特征。


* 提取特征表达能力的好坏,取决于深度模型的复杂度和训练数据的多少。深度模型越复杂,建模能力对数据的表达能力越强;数据模型的复杂度越高,需要的训练数据也越多。


所以通常来说,如果要得到一个比较好的深度表征学习模型,通常需要海量数据。数训练数据量也是实际中带来限制的重要因素,因为表征学习通常会跟下游任务放在一起考虑,需要大量的标注数据。


深度表征学习分为以下两个大类别:


1、生成模型:这类方法以自编码器为代表。举例来说,在自编码器中对数据样本编码成特征再解码重构,这里认为重构的效果比较好,则说明模型学到了比较好的特征表达。通常这个模型包括编码器和解码两个部分。


2、对比学习:这类方法则是通过将数据分别与正例样本和负例样本在特征空间进行对比,来学习样本的特征表示。


神经搜索里通常会采用对比学习的方法。


对比学习最早应用于人脸识别。如上图所示,库里的图片作为锚定图片,给定另外一张库里图片作为正样本,汤普森的图片作为负样本。


三个样本都经过同一个神经网络得到一个特征,同一个人的这两个特征之间的距离越近越好,不同人的照片之间的距离越远越好。这是对比学习基本的工作原理和优化目标。

受试者根据印象画出来的美元(左)

受试者临摹画出来的美元(右)


上图中,左图代表对比学习,右图代表生成模型。生成模型需要完全还原到原始数据,所以更加注重原始数据的细节。对比学习更多关注的是在特征上区别比较大的关键信息。


通常在搜索中,过多关注细节信息,并不能对搜索提供更多帮助,相反,更多关注在特征上区分性比较大的特征,会对搜索结果的提升更有利,这也是为什么对比学习在神经搜索中应用更多的原因。


训练表征模型时,往往需要用到海量的标注数据,但是现实场景下,很难拿到这么多标注数据,通常我们会采用迁移学习的技术来解决这个问题。


迁移学习是指将某个领域或任务上,学习到的知识或模式,应用到不同但相关的领域或问题中。


在传统方法里,面对不同的任务,我们会采用不同的数据和模型来分别训练,任务之间完全没有分享,学到的知识不能相互之间应用。


迁移学习按照学习方式,可以分为:


* 基于样本的迁移:通过对源域中有标定样本的加权利用完成知识迁移


* 基于特征的迁移:通过将源域和目标域,映射到相同的空间(或者将其中之一映射到另一个的空间中)并最小化源域和目标域的距离来完成知识迁移


* 基于模型的迁移:将源域和目标域的模型与样本结合起来调整模型的参数


* 基于关系的迁移:通过在源域中学习概念之间的关系,然后将其类比到目标域中,完成知识的迁移


理论上,任何领域之间都可以做迁移学习。但是,如果源域和目标域之间相似度不够,迁移结果就会不理想,出现所谓的负迁移情况。


比如,一个人会骑自行车,就可以类比学电动车;但是如果类类比学开汽车,那就有点天方夜谭了。如何找到相似度尽可能高的源域和目标域,是整个迁移过程最重要的前提。


深度学习需要大量的高质量标注数据,预训练 + 微调是现在深度学习中一个非常流行的 trick,以图像领域为代表,很多时候会选择预训练的 ImageNet 对模型进行初始化。


例如基于共享参数的迁移,原任务上有一个比较好的预训练模型,只需要在少量的标注数据上进行微调,就可以得到一个比较好的效果,这也是当下比较主流的方法。


迁移学习最重要的前提假设,就是有一个相对来说比较好的预训练模型,预训练技术也是迁移学习成功的主要的原因之一。


不管是 NLP 还是 CV 领域,预训练技术都得到了非常快的发展。NLP 最早采用的是 Bag-of-Words 词袋模型,后来引入深度学习后,可以通过 Word2Vec、ELMO 的一些方法。


2018 年之后,Google 提出了基于 Transformer 新架构的 BERT 模型,采用更多数据,训练一个更大的模型,使得 BERT 在 NLP 的不同的问题下,都达到了最优效果。同时由于 BERT 的发展,NLP 技术在实际落地应用中得到了较快速的发展。 


CV 领域同理,最早是基于简单的颜色直方图或 SIFT 构建特征。随着神经网络的发展,可以用大量标注数据训练一个效果较好的 ResNet 分类模型。


受 NLP 影响,最近大量的工作开始尝试用 Transformer 技术网络架构,用大量图片数据训练效果较好的预训练模型,使得这些预训练模型可以进一步被迁移到下游任务上,例如表征学习任务。


上面主要介绍了深度学习在神经搜索中的关键技术。下面将展开介绍,通过神经网络深度模型拿到原始数据特征后,如何做向量相似性搜索。


 向量相似搜索可分为两种:


1、精确搜索:通过在整个向量空间内,遍历所有已存向量计算其与检索向量的距离。常见的向量度量有四种:欧式距离、余弦、内积、海明距离。


优点:线性查找算法简单,不需要建立额外的数据结构和存储空间。


缺点:向量数量越来越多,搜索结果的延时会越来越大,无法完全在实际应用场景中应用。


2、近似搜索:全称 Approximate Nearest Neighbor Search (ANNS),即近似最近邻搜索。不要求算法总是精确地返回最近的向量,接受只得到部分最近的邻居或稍微接近的邻居。


优点:通过对空间或时间上的牺牲,快速找到相对较优的结果。

通过不同索引结构或距离计算的 4 种方法

量化、图算法、哈希算法、分割法


实际应用中,大部分数据都达到了千万级别,精确搜索无法直接拿过来用,所以近似近邻搜索,通常作为解决向量搜索的技术方案。


 总体解决思路包括:


1、减少候选向量集:使用某种索引结构来避免在全量的数据上做匹配;


2、降低距离计算的复杂度:对高维向量而言,通常会对向量进行降维或量化,对向量做近似计算,最后在一个很小的数据集上做原始向量的排序。


 4 种具体方法包括:


1、完全基于量化


2、图算法:预先计算好向量之间的近邻,然后构建一个近邻的图数据结构,当一个新的 query 来了之后,无需遍历图中所有的点,只需根据图中边的关系来游走,找到最近邻。


3、哈希算法:是另外一种对浮点向量的处理方式,把它转换成一种哈希的方式,直接用哈希距离来计算。


4、分割法:把原始的向量空间分割成不同的子空间,来了新向量后,只需在某些特定子空间上进行搜索,无需在全量的数据空间上搜索。


通常来看,这 4 种方法可以混用,例如可以把分割法和量化法联合使用,先把空间分割成不同的子空间,然后在子空间上做量化,这样得到一个相对较好的向量搜索效率。


 神经搜索面临的挑战:


  • 提高提取特征向量的质量(最大挑战):通常来说可以不断增加模型复杂度,使用最新的深度学习模型及更好的预训练模型,根据业务需要进行微调。

  • 加速大模型的推理速度

    • 深度模型推理计算密集,吞吐量低;

    • 超大规模索引的精度和性能;

  • 快速集成最新的深度学习模型

    • 深度学习技术和模型日新月异


 向量搜索面临的 4 个挑战:


1、高维数据:向量数据维度通常是 256/512/768/1024 维。


2、海量数据:在常用的图片或视频处理场景中,向量数据通常在亿级别。


3、高召回:为保证检索效果,精度召回率通常要求 95% 以上。


4、高性能:为保证用户体验,向量检索的响应要求毫秒级。


神经搜索的研究现状


神经搜索技术不是一个全新的技术,已被广泛应用于一些具体场景中,例如搜索推荐问题。


但是神经搜索的技术门槛相对较高,只有头部互联网大厂才具备这样的技术能力,例如现在百度或腾讯对短视频、图片的搜索,都已经开始应用神经搜索技术,来实现这种复杂多媒体数据的搜索。


目前业界逐渐开始关注无监督的预训练模型,从而减轻对标注数据的依赖,进一步提升特征提取向量的质量。


海量向量数据的索引,已经有相对比较成熟的产品如 Weaviate 等。但是仍然缺少全链路的神经搜索解决方案,这也是 Jina 诞生的一个原因。

Jina AI 全家桶


Jina 是一个完全开源的云原生神经搜索框架,其最核心的产品是 Jina core,它提供云原生的搜索系统,以及其他帮助提升最终搜索质量的产品。


Finetuner 可以帮助用户微调特征表征模型,只需提供少量的标注数据,用户就可以一键式地在原有训练模型的基础上,得到一个比较好的微调后的模型,直接部署到 Jina 链路中,得到更好的测试结果。


另外一个产品是 Hub,Hub 里分享了不同的基础模块,用户仅用几行代码就可以快速搭建一个功能相对完善的搜索系统。


神经搜索的未来展望


  • 多模态和跨模态神经搜索应用得到更多关注

  • 单模态搜索往多模态搜索发展

  • 传统文字搜索和神经搜索的融合


近日 Jina AI 发布了 CLIP-as-service。CLIP 是一个热门的跨模态预训练模型,可以同时对图片和文本进行编码。


CLIP-as-service 详情介绍可参见:《BERT-as-service 时隔三年突然更新,这次连名儿都改了


传统的文字搜索得到的搜索结果准确度较高,但是召回较低;神经搜索召回较高,但是准确度偏低。如何把这两个方法进行融合,得到更好的搜索解决方案,是未来的另一个发展方向。



此外,Jina AI 提供了 Learning Bootcamp 系列课程,分为初级、中级、高级三个等级,可以帮助大家快速了解神经搜索的基本概念、技术方案、工作原理。


查看 Jina 官方文档,可以仅用几行代码,搭建一个单模态或跨模态搜索系统,处理音频、视频、图像甚至 3D 模型搜索问题。


以上就是关于本期分享的全部内容,从 0 到 1,成为神经搜索专家,敬请访问 learn.jina.ai,更多精彩内容欢迎关注 Jina AI 公众号获取!


 关于王峰 


Jina AI 高级 AI 工程师,开源神经搜索框架 Jina 核心贡献者。毕业于山东大学,并于香港浸会大学获得计算机博士学位。


曾就职于腾讯科技和虎牙科技,热衷于开源软件及云原生技术,专注机器学习与深度学习算法在自然语言理解、多模态表征学习和信息检索领域的实际应用。




公众号后台发送「神经搜索」,获取本次分享的完整 PPT。





下一代开源神经搜索引擎


在 GitHub 找到我们

更多精彩内容(点击图片阅读)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存