引子
向量
在深度学习火热的当下,向量是一个无法逃避的概念,万物皆可 embedding。
在现实世界中,我们认识和理解一个事物,总是会想办法捕捉它的一些特质或者属性。比如路边一朵红色的野花,那么仅从颜色这个维度,我们可以使用离散的0,1来表达。如 【1,0,0】。
但仅从颜色描述是不够的,还有花的种类,气味,高度,用途等等。把所有的属性枚举出来,排列好位置,元素对应属性的位置点亮,那么一朵沁人心脾的红色梅花 = 【1,0,0,1,0,0,1,0】
上面分别就是 one-hot 与multi-hot的编码标识,在传统机器学习中比较常见。
【注释】
One-hot编码是指将离散变量映射成一个只有0和1两个值的向量,其中每个值代表变量是否拥有该属性。例如,如果有一个颜色属性,可能的取值为红、绿、蓝三种,那么我们可以使用一个长度为3的向量来表示这个属性,例如(1,0,0)表示红色,(0,1,0)表示绿色,(0,0,1)表示蓝色。在实际应用中,通常需要对每个不同的取值建立一个one-hot编码向量,从而将整个数据集转化成一个稀疏矩阵。
Multi-hot编码与one-hot编码类似,但是允许变量具有多个属性。例如,如果有一个文本分类任务,某个文本可能同时属于多个类别,那么我们可以使用一个长度为N的向量来表示N个可能的类别,其中第i个元素表示该文本是否属于第i个类别,如果属于则为1,否则为0。注意,一个变量的multi-hot编码向量可以有多个位置上的值为1,因此该编码方式也是稀疏的。
但是,这样也会产生一些问题:
真实世界,物品描述的属性维度特别多,且值非常稀疏。(几十上百万个维度也是正常的)
物品的属性无法完整枚举到。
物品的属性包含离散和连续。
因此,为了更好的表达元素 ( 包括度量元素之间的距离 ) ,假设元素有n个维度的属性(每个维度的意义都不是可解释的),那么元素的集合就是n维基向量张开的线性空间的子空间。空间中的点就是该元素在这个空间下的表达。
比如一个三维的空间,元素A 可能表示为 (x,y,z) = 【1.1,2.3,3,3】。
元素在空间中的分布则会出现如下情况:
通过上述内容,我们也可以给出如下定义:
向量是描述对象特征的抽象表达,以DashScope上通用文本向量模型为例,通过输入一段文本,通用文本向量模型会将这段文本变成一个向量,将文本变成向量的过程叫 Embedding。Embedding是一种将高维度的离散数据映射到低维连续向量空间的技术。
通过使用embedding技术,我们可以将原始的离散特征转化为连续的数值向量,这样可以更好地表达特征之间的关系和相似度。而且,由于低维向量的稠密性,embedding能够大大减少特征的维度,提高计算效率,同时也可以减少存储空间的消耗。
调用示例如下:
输入文本
“衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买”
import dashscope
from dashscope import TextEmbedding
dashscope.api_key = {
YOUR API KEY}
def embed_with_str():
resp = TextEmbedding.call(
model=TextEmbedding.Models.text_embedding_v1,
input='衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买')
print(resp)
if __name__ == '__main__':
embed_with_str()
调用输出
{
"status_code": 200,
"request_id": "617b3670-6f9e-9f47-ad57-997ed8aeba6a",
"code": "",
"message": "",
"output": {
"embeddings": [
{
"embedding": [
0.09393704682588577,
2.4155092239379883,
-1.8923076391220093,
.,
.,
.
],
"text_index": 0
}
]
},
"usage": {
"total_tokens": 23
}
}
在返回中embedding字段中的内容就是一条向量。
[
0.09393704682588577,
2.4155092239379883,
-1.8923076391220093,
.,
.,
.
]
通俗地说,就是可以将一个事物在计算机中表示成一个数值向量。以自然语言处理为例,我们可以将每个单词映射到一个向量空间中的某个点,并且这个点代表了该单词的语义信息。例如,"猫"和"狗"在向量空间中可能比较接近,因为它们都属于"动物"这个类别。而"猫"和"汽车"则可能比较远,因为它们没有太多共同的语义特征。
这里也给出一些常见的数据向量如下:
图像向量,通过深度学习模型提取的图像特征向量,这些特征向量捕捉了图像的重要信息,如颜色、形状、纹理等,可以用于图像识别、检索等任务;
文本向量,通过词嵌入技术如Word2Vec、BERT等生成的文本特征向量,这些向量包含了文本的语义信息,可以用于文本分类、情感分析等任务;
语音向量,通过声学模型从声音信号中提取的特征向量,这些向量捕捉了声音的重要特性,如音调、节奏、音色等,可以用于语音识别、声纹识别等任务。
向量数据
深度学习程序以人脑类似的方式处理世界上的信息,信息被转换为向量嵌入( 或简单地称为“向量” ),然后用于预测、解释、比较和其他认知功能。
在机器学习中,Transformer模型 (一般也称为“嵌入模型”)起到了将原始数据转换为向量嵌入的作用,即模型产生向量数据。
有各种各样的嵌入模型:音频、图像、文本、日志、视频、结构化、非结构化等等。通过将原始数据转换为向量,它们可以实现图像搜索、音频搜索、重复数据删除、语义搜索、物体和面部识别、问题回答等功能。
嵌入模型的数量、功能和采用率正在不断增长,也越来越容易获得和使用。MXNet、TensorFlow、PyTorch和Caffe等深度学习框架已经包含了预训练模型,只需两行代码就可以轻松地访问。
import torchvision.models as models
model = models.squeezenet1_0(pretrained=True)
使用的模型越多,产生的向量数据就越多。通常情况下,向量在生成后会被立即丢弃。但假如你需要保存生成的向量数据呢?此时,向量数据库也就应运而生。不过此处也不急着进入向量数据库的主题,还有两个概念需要额外申明一下。
向量维度和向量数据类型
从上文中可以看出,向量实际上是一串数字的组合,也就是一个数组,这个数组代表了这段文本的特征。向量的维度即为这个数组中元素的个数,例如,这个数组中有100个元素,那么向量就是100维的。仍以DashScope上通用文本向量为例,通用文本向量返回的向量中都有1536个元素,则向量的维度为1536维,且返回的向量维度是不变的。从通用文本向量的说明文档中也可以查看向量的维度,如下表所示。
而向量的数据类型指的是向量数组中元素的数据类型。还是以DashScope上通用文本向量为例,返回向量的元素均为Float型,则向量的数据类型为Float型。换言之,如果向量为[1,2,3,4],向量中的元素都为整数型,那么这个向量则为4维的INT型向量。
【注释】
- 向量的维度和数据类型,取决于使用的Embedding的模型,不同的Embedding模型,向量的维度和数据类型可能也是不一样的。
向量数据库和向量检索
向量数据库是一种以向量嵌入(高维向量)方式存储和管理非结构化数据(如文本、图像或音频)的数据库,以便于快速查找和检索类似对象。而其中实现快速查找和检索类似对象的功能,就是向量检索技术的能力体现之一。(此处指的是通用能力,与本文的产品服务在概念上有差异)
所以也可以看出,向量数据库就是专门用来存储、索引和检索这些生成的向量Embedding的数据库管理系统。
它优化了对高维向量进行高效查询的功能,支持基于向量相似度的搜索,比如最近邻(nearest neighbor)搜索,这在大规模的数据集上具有非常重要的应用价值。诸如阿里云的向量数据库以及Milvus这样的项目,它们提供了一个平台,用户可以将经过Embedding处理后的向量数据存入,并快速地根据查询向量找到最相似的记录,极大地提升了推荐系统、图像识别、知识图谱等各种应用场景下的性能和准确性。
向量数据库的主要功能包括:
管理:向量数据库以原始数据形式处理数据,能够有效地组织和管理数据,便于AI模型应用。
存储:能够存储向量数据,包括各种AI模型需要使用到的高维数据。
检索:向量数据库特别擅长高效地检索数据,这一个特点能够确保AI模型在需要的时候快速获得所需的数据。这也是向量数据库能够在一些推荐系统或者检索系统中得到应用的重要原因。
向量数据库的主要优点是,它允许基于数据的向量距离或相似性进行快速准确的相似性搜索和检索。这意味着,可以使用向量数据库,根据其语义或上下文含义查找最相似或最相关的数据,而不是使用基于精确匹配或预定义标准查询数据库的传统方法。向量数据库可以搜索非结构化数据,但也可以处理半结构化甚至结构化数据。例如,可以使用向量数据库根据视觉内容和风格查找与给定图像相似的图像,根据主题和情感查找与给定文档相似的文档,以及根据功能和评级查找与给定产品相似的产品。
目前,市面上也是出现了越来越多的向量数据库产品,一些老牌的数据库比如Redis、PostgreSQL等也开始增加对向量数据库的支持,具体可以见以下两篇文章:
《AI时代新宠,向量数据库》 https://zhuanlan.zhihu.com/p/664747312
《向量数据库有什么用?》 https://developer.aliyun.com/article/1385776?spm=a2c6h.13148508.setting.32.1cb94f0eYCQ4WC
现在,大家应该也都明白了向量检索的含义了,接下来,我们就步入正题,一起揭开阿里云向量检索服务的神秘面纱。
阿里云向量检索服务
产品简介
向量检索服务DashVector,依托于阿里云通义实验室自主研发的高效向量搜索引擎Proxima内核,提供了一种高度可扩展、弹性伸缩的云原生、全托管式解决方案。该服务不仅具备强大的向量数据管理能力,能够有效地存储和维护海量高维向量数据,还集成了先进的向量查询算法与索引技术,确保在大规模数据集上实现亚秒级的快速检索响应。
通过简洁而功能丰富的SDK(软件开发工具包)以及API(应用程序接口),DashVector将这些底层核心能力以易用的形式开放给开发者和用户,极大地简化了集成过程,使得各类AI应用能够迅速接入并利用其高效的向量检索服务。无论是对于大模型生态中复杂多样的预训练模型进行有效管理和调用,还是应用于多模态AI搜索场景,例如跨文本、图像、视频等不同模态信息的智能匹配与检索,甚至在生物医药领域对分子结构进行深度分析,DashVector都能凭借其卓越的向量检索性能,为以上应用场景提供强有力的支持和赋能,助力提升整体业务效率与智能化水平。
产品地址:https://www.aliyun.com/product/ai/dashvector?spm=a2c4g.2510217.0.0.78e7504515TOwQ 。
开通方式
方式一:领取试用
进入如下评测页面:https://developer.aliyun.com/topic/dashvector?spm=a2c6h.27063436.J_6978680750.1.51f34f46jhp0XJ 。
看到如下图所示位置,点击立即使用。(是我为数不多没有试用过的产品了<(~︶~)>)
修改一下Cluster的名称,点击立即试用。
此时就自动跳转到控制台界面了,至此免费试用步骤完成。
方式二:购买使用
回到产品地址界面:https://www.aliyun.com/product/ai/dashvector?spm=a2c4g.2510217.0.0.78e7504515TOwQ 。
点击立即开通按钮。
此时的购买界面同刚才试用界面别无两样,也是只需要修改一下Cluster的名称就可以了,后续操作略过。
产品功能
1 . 全托管高效向量检索云服务
极简 SDK 功能设计 : 通过简洁易用的 SDK/API 接口透出,方便被上层 AI 应用迅速集成。
降低运维成本 : 全托管、云原生的向量检索云服务,提供水平和垂直拓展能力,只需关注业务使用,降低运维成本。
高精度高效检索 : 自研高效查询算法,实现大规模数据低延迟查询,给与客户良好的查询体验。
2 . 向量数据实时索引
流式构建 : 向量检索服务采用扁平化的索引结构,支持在线大规模向量索引从 0 到 1 的流式构建。
实时在线更新 : 当向量发生新增、删除、修改后,向量状态即时生效,实现了向量即增即查、即时落盘以及向量实时动态更新。
海量数据快速索引 : 采用多种方式优化索引结构和加载方式,支持 2-20000 维度大规模向量快速导入。
3 . 条件过滤查询
支持自定义 Schema:条件过滤时,用预先定义的 Field 将会有更快的检索速度和更少的算力开销。
支持多种表达式过滤:支持 6 种比较运算符、and 和 or 逻辑运算符以及 like 字符串运算符,满足向量+条件过滤组合查询。
4 . 关键词感知 Sparse Vector
两路召回、综合排序:具备关键词检索、向量检索、关键词 + 向量混合检索的优势,且可大幅降低系统复杂度。数据统一、检索效率高。
Sparse Vector 生成工具:向量检索服务推荐使用 DashText 进行稀疏向量编码。
产品优势
多维度高精度:依据不同数据维度和分布选择不同算法或算法组合,根据具体场景需求实现精度和性能之间的平衡。
实时在线更新:采用扁平化的索引结构,支持在线大规模向量索引的从0到1的流式构建,实现了索引即增即查、即时落盘,以及实时动态更新。
高性能低成本:有限成本下实现最大化性能并满足业务的需求。
多场景适配:结合超参调优和复合索引等方法,提高系统的自动化能力,以及增强用户的易用性。
超大规模索引构建和检索:引入复合性检索算法,精于工程实现和算法底层优化,低成本实现高效率的检索方法,单片索引可达几十亿的规模。
标签+向量检索:在索引算法层实现了“带条件的向量检索”,解决了传统多路归并召回结果不理想的情况,满足组合检索的要求。
索引水平扩展:采用非对等分片方法实现分布式检索,支持有限精度下索引的快速合并,与Map-Reduce计算模型可有效结合。
异构计算:支持大批量高吞吐的离线检索加速,支持GPU构建邻居图索引,成功实现小批量+低延时+高吞吐的资源利用。
应用场景
电商智能搜索和偏好推荐场景
在电商智能搜索和偏好推荐场景中,向量数据库可以实现基于向量相似度的搜索和推荐功能。例如一个电商平台中包含了各种商品的图像和描述信息,用户在搜索商品时,可以通过图像或者描述信息查询相关的商品,并且还希望能够实现推荐功能,自动向用户推荐可能感兴趣的商品。
用户只需要先将商品的图像和描述信息使用Embedding技术转换为向量表示,并将其存储到向量数据库中。当用户输入查询请求时,向量检索服务可以将其转换为向量表示,然后计算查询向量与向量数据库中所有商品向量的相似度,然后返回相似度最高的几个商品向量。另外,还可以基于用户的历史行为和偏好通过向量检索服务将用户的历史浏览记录和购买记录转化为向量表示,并在向量数据库中查询与该向量最相似以及相似度较高的商品向量,为用户推荐可能感兴趣的商品,提供更加智能和个性化的服务、更加高效和优秀的性能与购买体验。
自然语言处理等AI问答系统场景
问答系统是属于自然语言处理领域的常见现实应用。典型的问答系统比如通义千问、ChatGPT、在线客户服务系统、QA聊天机器人等。例如在一个问答系统,其中包含了一些预定义的问题和对应的答案。用户希望能够根据输入的问题,自动匹配到最相似的预定义问题,并返回对应的答案。为了实现此功能,首先可以通过向量检索服务将预定义的问题和答案转换为向量表示,并将其存储到向量数据库中。其次当用户输入问题时,向量检索服务可以将其转换为向量表示,并在向量数据库中查询与该向量最相似的问题向量。然后使用模型训练、问答推理、后期优化等步骤,实现类似通义千问、ChatGPT等的语言智能交互体系。
图库类网站多模态搜索场景
当前大型的图片素材网站和分享社交应用等,通常都有几亿甚至上百亿的图片量,只能提供简单的文字搜索或者单一的图片搜索方式,用户无法快速地找到所需的图片。而使用DashVector向量检索服务,将图片内容和文本描述以向量形式表示,并将其存储到向量数据库中。当用户搜索时,支持以文搜图,图搜图以及文字+图片组合搜索精确过滤等多种模态的搜索模式,将搜索需求也通过向量表示,在向量数据库中进行相似搜索,帮助用户迅速找到想要的图片,从而提升用户体验。
视频检索场景
在视频检索场景中,例如视频监控系统、影视资源网站、短视频应用等平台,其中包含了各种视频数据。使用向量检索服务通过将视频数据转换为向量表示,并将其存储到向量数据库中。当用户看到一个电影片段或频频截图时,使用视频相似性搜索系统进行基于内容向量的视频检索,从而快速检索出与查询视频最相似的视频,并返回给用户作为搜索结果。同时还可以在向量数据库中使用基于聚类的视频检索方法,对视频进行聚类,并在聚类之间进行快速检索,提高检索效率和准确度。
分子检测与筛选场景
在分子检测中,可以使用分子指纹(例如ECFP、MACCS键等)将分子结构转换为向量表示,并将其存储到向量数据库中。当用户输入查询请求时,可以使用同样的方法将其转换为向量表示,并在向量数据库中查询与该向量最相似的分子向量,并返回给用户作为搜索结果,实现基于分子结构相似度的分子检索和筛选。为分子发现和药物设计提供更加智能和高效的解决方案。
DashVector基本概念
Client(客户端)
Client(客户端),是用户用于连接DashVector服务端的基础对象,相当于关系型数据库中的Connection。通过设置API_KEY即可完成Client对象的创建,即完成与DashVector服务端的连接。通过Client对象可进行Collection操作(如新建Collection、获取Collection列表等)。
Collection(集合)
Collection(集合),是一个相同类型Doc组成的集合,相当于关系型数据库中的一张表。每个Collection必须使用唯一的名称来标识,通过名称可唯一获取Collection对象。Collection对象可进行各种Doc操作(如插入Doc、检索Doc等)和Partition操作(如新建Partition等)。
Partition(分区)
Partition(分区),是指同一个Collection下的Doc可通过不同的Partition进行物理和逻辑上的分区。各种Doc操作(如插入Doc、检索Doc等)如若指定Partition,则该操作将限定在该指定的Paritition内进行。通过合理的Partition设置,可有效提升Doc操作的效率。
Doc(文档)
Doc(文档),是DashVector最基础的数据单元,相当于关系型数据库中的一行数据。Doc包含以下属性:id(主键)、vector(向量)、fields(key-value结构的字段名和字段值)。Doc是插入Doc、更新Doc、插入或更新Doc操作的基础输入结构,同时也是检索Doc和获取Doc操作的输出结构。
Field(字段)
Field(字段),是组成Doc的基础单位之一,每个Doc可具备多个Field,相当于关系型数据库中的列。
Vector(向量)
Vector(向量),Embedding Vector,非结构化数据通过各种AI Embedding模型进行特征的提取,获取到的多维数据。DashVector中,Vector作为Doc的基础数据单位之一,用于描述各种非结构化数据的特征。例如,[0.1, 0.2, 0.3, 0.4]就是一个维度(dimension)为4的向量。
Sparse Vector(稀疏向量)
Sparse Vector(稀疏向量),稀疏向量是指大部分元素为0,仅少量元素非0的向量。在DashVector中,稀疏向量可用来表示词频等信息。例如,{1:0.4, 10000:0.6, 222222:0.8}就是一个稀疏向量,其第1、10000、222222位元素(分别代表三个关键字)有非0值(代表关键字的权重),其他元素全部为0。
QPS(访问频次)
每秒能向DashVector服务的API发起的最大查询请求次数。QPS越高,同一时段内能够处理的业务量越多。例如QPS为5时,则在1秒内可以进行5次调用请求。
API-KEY
API-KEY是您访问向量检索服务(DashVector)的密钥。DashVector通过API-KEY进行调用鉴权和计量计费,目前仅支持通过阿里云主账号进行API-KEY管理,每个账户同时可拥有3个有效的API-KEY。
实践:基于向量检索服务与TextEmbedding实现语义搜索
下述操作均基于阿里云提供的最佳实践完成:https://help.aliyun.com/document_detail/2510234.html?spm=a2c4g.2510236.0.0.5ecc72d0KtWv2V
此模型还需要开通灵积模型服务,点击https://dashscope.console.aliyun.com/overview?spm=a2c4g.11186623.0.0.3881697eBRNIIi ,前往灵积控制台。
访问DashScope管理控制台API-KEY管理页面:前往API-KEY管理,然后点击“创建新的API-KEY”。
点击“创建新的API-KEY”后,系统会创建生成API-KEY,并在弹出的对话框中展示,此处客户可以点击复制按钮将API-KEY的内容复制保存。
复制并在安全的地方保存API-KEY后点击“我已保存,关闭”按钮则弹窗关闭,此次创建的API-KEY可立即用于调用DashVector模型服务API,对API-KEY的后续操作均可在当前的API-KEY管理页面进行。
再进入到刚才试用的DashVector向量检索服务控制台中,创建API-KEY。
此时,前置条件完成。
由于我电脑上有python环境,故直接略过python安装这一步了,需要说明的是必须是Python3.7 及以上版本才可以。
执行下列命令安装dashvector和dashscope软件包。
pip3 install dashvector dashscope
【注释】
dashvector是一个用于向量数据处理和分析的Python库。它提供了许多功能,如向量相似度搜索、向量聚类、降维可视化等。通过使用dashvector,您可以方便地处理和分析向量数据,并从中获取有价值的信息。
dashscope是一个基于Web的用户界面,用于可视化和探索向量数据。它结合了dashvector库的功能,为您提供了交互式的图表和可视化工具,以便更好地理解和分析向量数据。
等到安装完成后,下载相关数据作为准备。
QQ浏览器搜索相关性数据集(QBQTC, QQ Browser Query Title Corpus),是QQ浏览器搜索引擎目前针对大搜场景构建的一个融合了相关性、权威性、内容质量、 时效性等维度标注的学习排序(LTR)数据集,广泛应用在搜索引擎业务场景中。作为CLUE-beanchmark的一部分,QBQTC 数据集可以直接从github上下载(训练集路径为dataset/train.json)。
git clone https://github.com/CLUEbenchmark/QBQTC.git
wc -l QBQTC/dataset/train.json
进入到 dataset/train.json,直接下载也可以。
可以看到里面的数据类型如下:
带有id,query,title,label这四个属性。
{
"id": 0,
"query": "应届生实习",
"title": "实习生招聘-应届生求职网",
"label": "1"
}
我们将通过如下代码,从这个数据集中提取title,方便后续进行embedding并构建检索服务。
import json
def prepare_data(path, size):
with open(path, 'r', encoding='utf-8') as f:
batch_docs = []
for line in f:
batch_docs.append(json.loads(line.strip()))
if len(batch_docs) == size:
yield batch_docs[:]
batch_docs.clear()
if batch_docs:
yield batch_docs
此时也可以使用灵码工具解释一下,方便小白更好的理解。
接下来通过 DashScope 生成 Embedding 向量。DashScope灵积模型服务通过标准的API提供了多种模型服务。其中支持文本Embedding的模型中文名为通用文本向量,英文名为text-embedding-v1。我们可以方便的通过DashScope API调用来获得一段输入文本的embedding向量。
import dashscope
from dashscope import TextEmbedding
dashscope.api_key='{your-dashscope-api-key}'
def generate_embeddings(text):
rsp = TextEmbedding.call(model=TextEmbedding.Models.text_embedding_v1,
input=text)
embeddings = [record['embedding'] for record in rsp.output['embeddings']]
return embeddings if isinstance(text, list) else embeddings[0]
# 查看下embedding向量的维数,后面使用 DashVector 检索服务时会用到,目前是1536
print(len(generate_embeddings('hello')))
需要将上述API-KEY替换为我们自己的DashScope私有key再执行。
再通过 DashVector 构建检索:向量入库。
DashVector 向量检索服务上的数据以集合(Collection)为单位存储,写入向量之前,我们首先需要先创建一个集合来管理数据集。创建集合的时候,需要指定向量维度,这里的每一个输入文本经过DashScope上的text_embedding_v1模型产生的向量,维度统一均为1536。
DashVector 除了提供向量检索服务外,还提供倒排过滤功能 和 scheme free 功能。所以我们为了演示方便,可以写入数据时,可以将title内容写入 DashVector 以便召回。写入数据还需要指定 id,我们可以直接使用 QBQTC 中id。
from dashvector import Client, Doc
# 初始化 DashVector client
client = Client(
api_key='{your-dashvector-api-key}',
endpoint='{your-dashvector-cluster-endpoint}'
)
# 指定集合名称和向量维度
rsp = client.create('sample', 1536)
assert rsp
collection = client.get('sample')
assert collection
batch_size = 10
for docs in list(prepare_data('QBQTC/dataset/train.json', batch_size)):
# 批量 embedding
embeddings = generate_embeddings([doc['title'] for doc in docs])
# 批量写入数据
rsp = collection.insert(
[
Doc(id=str(doc['id']), vector=embedding, fields={
"title": doc['title']})
for doc, embedding in zip(docs, embeddings)
]
)
assert rsp
此处需要使用api-key替换示例中的 your-dashvector-api-key ,以及Cluster Endpoint替换示例中的 your-dashvector-cluster-endpoint,代码才能正常运行。
其中:
Cluster Endpoint的查看方式如下
点击进入自己的Cluster列表中,点击已创建好的Cluster。
可以看到end-point如下
复制后替换如图所示位置
dashvector api-key的查看方式如下
复制后替换如图所示位置
执行后此时相当于完成了向量入库操作。
在把QBQTC训练数据集里的title内容都写到DashVector服务上的集合里后,就可以进行快速的向量检索,实现“语义搜索”的能力。
继续上面代码的例子,假如我们要搜索有多少和'应届生 招聘'相关的title内容,可以通过在DashVector上去查询'应届生 招聘',即可迅速获取与该查询语义相近的内容,以及对应内容与输入之间的相似指数。
# 基于向量检索的语义搜索
rsp = collection.query(generate_embeddings('应届生 招聘'), output_fields=['title'])
for doc in rsp.output:
print(f"id: {doc.id}, title: {doc.fields['title']}, score: {doc.score}")
最终输出如下:
结论与展望
阿里云向量检索服务凭借自主研发的Proxima内核,成功突破了传统文本或关键词检索技术在处理非结构化数据和理解语义方面的局限性,将深度学习“表示学习”的成果转化为实际应用。其水平拓展、全托管及云原生架构的设计,不仅为用户提供了一站式、高效率、低成本的向量检索解决方案,而且极大地推动了信息检索技术的创新与发展。
通过简洁易用的SDK/API接口,阿里云向量检索服务已成功应用于大模型知识库搭建、多模态AI搜索等多个前沿场景中,大大提升了对复杂数据的理解和利用能力,为各行业提供了强大的智能搜索基础设施。
对比华为云基于es的云搜索服务CSS,阿里云自主研发的Proxima内核无疑在向量检索领域具有更高性能计算能力和水平拓展的优势,更适合处理大规模数据集上的复杂查询需求。
另外,随着AI技术的不断迭代升级以及应用场景的日益丰富多样,阿里云向量检索服务也有望与其他产品联动,例如:
与云计算平台、lot物联网平台协同:随着物联网设备产生的海量非结构化数据增长,阿里云向量检索服务有望与IoT平台无缝对接,实时处理来自各类传感器、摄像头等终端设备的图像、音频等多模态数据,助力智慧城市、工业4.0等领域的智能化应用。
与数据库及数据分析工具集成:向量检索服务可以嵌入到数据库系统中,实现对既有关系型数据和新兴的非结构化数据的混合查询,同时与BI(商业智能)工具联动,帮助企业在大数据分析决策过程中更快地挖掘出有价值的信息。
通过与上述产品或者服务的深度整合与联动,阿里云向量检索服务将会逐步构建起一个以高效检索为核心驱动力的智能化生态系统,为各行各业的数字化转型提供强大支撑。
除了可以联动的产品之外,在未来,阿里云向量检索服务也可以延续现在的发展趋势,进一步提升其语义理解、实时响应与个性化服务、多模态融合检索这三大核心能力。(从这三个方面来进行优化似乎是不存在上限的),同时,这边也额外提出一些可以提升的方向:
大规模高维向量检索性能优化:随着模型复杂度增加,向量维度越来越高,服务需要持续优化索引结构和算法,以保证在处理TB甚至PB级数据时保持高效查询速度和低延迟。
资源成本与性价比优化:随着用户规模和数据增长,优化资源配置策略,降低计算成本,提供更高性价比的服务方案是市场竞争力的关键之一。
考虑全球部署与多地域支持:对于全球化业务场景,阿里云向量检索服务可以考虑在全球更多地域提供更低延迟的服务,满足跨国企业的需求。
总的来说,这次测评还是让我很受益匪浅,如果最佳实践能够再多几个,或者能够在动手实践模块直接更新相关实验室会更好,文章如有不对之处,还望大佬们海涵!