本文介绍了向量检索的概念,以及以示例的形式来介绍如何使用向量检索功能。
向量检索概念
向量检索(Vector Search)是一种基于向量空间模型的搜索技术,它利用机器学习(尤其是深度学习)生成的向量来表示文本、图片、视频或任何类型的数据项。这些向量捕捉了数据项的语义信息和内容特征,使得能够通过计算向量之间的距离或相似性来进行高效且精确的搜索。
在向量检索中,数据项通常被转换为高维空间中的点,也就是向量。这种转换通常由诸如Word2Vec、BERT以及ResNet等预训练模型执行,这些模型能够将自然语言文本或者图像内容编码为固定长度的连续向量。一旦数据被编码,就可以使用向量之间的相似度度量(如余弦相似度、欧几里得距离等)来查找最相关的结果。
向量检索能够提供传统关键字搜索所不能提供的优势,主要包括:
语义搜索:能够捕获查询和文档的深层语义信息,实现基于意图而非仅仅关键字的匹配。
多模态搜索:支持跨越文本、图像和其他非结构化数据的搜索。
高效检索:通过使用ANN技术,能够在大规模数据集上实现快速搜索。
向量检索正逐渐成为搜索引擎、推荐系统以及其他多种应用中的核心技术。例如,电商网站使用它来提升商品推荐的相关性,社交媒体平台使用它来提高内容发现的精确度等。
前提条件
已通过PolarDB MySQL版的集群地址连接数据库集群。
使用指南
创建向量表
创建向量表的示例如下:
/*polar4ai*/CREATE TABLE table_name (
id int,
name vector_5,
type int,
primary key(id)
);
其中,字段类型无需指定精度。name
为向量类型,vector_5
中的5是向量的维度,您可以根据实际需要修改向量的维度,向量维度的最大值为2048。创建向量表时,必须定义主键(primary key)。
插入、更新向量表
更新表中的数据示例如下:
/*polar4ai*/UPSERT INTO table_name(id,name,type) VALUES(1,'[2,2,3,4,5]',1),(2,'[2,2,3,4,5]',2)
执行更新操作时,主键列必须存在,且更新操作按照主键进行全列更新,不支持部分列更新。
查看向量表信息
查看表信息的示例如下:
/*polar4ai*/DESCRIBE table_name;
查看所有表信息
查看所有表信息的示例如下:
/*polar4ai*/SHOW tables;
查询向量表数据
向量表数据的两种查询方式如下:
/*polar4ai*/SELECT * FROM table_name LIMIT 10;
/*polar4ai*/SELECT id,name,type FROM table_name LIMIT 10;
如果查询语句中不添加LIMIT关键字,则默认最多查询10000条数据。
向量检索
获取余弦相似度的示例如下:
/*polar4ai*/SELECT 'distance(name,[1,2,3,4,5])' FROM table_name WHERE type=1; /*polar4ai*/SELECT id,'distance(name,[1,2,3,4,5])' FROM table_name WHERE type=1;
其中,
distance(name,[1,2,3,4,5])
中的name
为向量类型的字段。使用精准检索,虽然在大数据量场景下的搜索速度会较慢,但召回率可以达到100%。获取余弦相似度,且输出TopK结果的示例如下:
/*polar4ai*/SELECT 'distance(name,[1,2,3,4,5])' FROM table_name WHERE type=1 LIMIT 10 /*polar4ai*/SELECT id,'distance(name,[1,2,3,4,5])' FROM table_name WHERE type=1 LIMIT 10
删除向量表中的数据
删除向量表中的数据示例如下:
/*polar4ai*/DELETE FROM table_name WHERE id=1;
删除向量表
删除向量表的示例如下:
/*polar4ai*/DROP TABLE table_name;