Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记
- 0. 什么是多向量相似度检索
- 1. 多向量相似度检索的示例 SQL
- 2. 执行多向量相似度检索
- 3. 分区行限制子句的完整语法
0. 什么是多向量相似度检索
多向量相似度检索涉及通过使用称为分区的分组标准来检索顶部 K 个向量匹配,这些标准基于您的数据特征。此方法根据它们的片段与查询向量的相似度来评分数据。在 SQL 中,这通过分区行限制子句实现。
这个解释描述的非常抽象,让我们通过接下来的示例和说明更好的理解一下。
1. 多向量相似度检索的示例 SQL
比如,要找到前两本最相关书籍中的前四个最相关段落,可以使用以下 SQL 语句
SELECT doc_id, embed_id
FROM doc_chunks
ORDER BY vector_distance(embed_vector, (SELECT embedding FROM doc_queries WHERE query = '不同的备份和恢复方法'), COSINE)
FETCH FIRST 2 PARTITIONS BY doc_id, 4 ROWS ONLY;
2. 执行多向量相似度检索
多向量相似度检索特别适用于多文档检索,其中文档被分成多个块,每个块都嵌入到向量中。
这种检索类型使用基于文档特征的分区作为分组标准来检索顶部 K 个向量匹配。
它简化了编写 SQL 查询以回答诸如以下问题的方法:
- 如果存在,两本最匹配的书中的三个最匹配段落中的四个最匹配句子是什么?
例如,如果您的数据库中的每本书都组织成包含具有向量嵌入表示的句子的段落,那么可以使用单个 SQL 语句解决上述问题:
SELECT bookId, paragraphId, sentence
FROM books
ORDER BY vector_distance(sentence_embedding, :sentence_query_vector)
FETCH FIRST 2 PARTITIONS BY bookId, 3 PARTITIONS BY paragraphId, 4 ROWS ONLY;
或者,对于目标精度为 90% 的近似相似度检索,您可以使用:
SELECT bookId, paragraphId, sentence
FROM books
ORDER BY vector_distance(sentence_embedding, :sentence_query_vector)
FETCH APPROXIMATE FIRST 2 PARTITIONS BY bookId, 3 PARTITIONS BY paragraphId, 4 ROWS ONLY
WITH TARGET ACCURACY 90;
注意:
所有返回的行都按分区子句排序,不按其分组。
此方法有助于根据句子与查询向量之间的向量距离对记录进行排序,根据它们的 bookId 和 paragraphId 过滤记录。
多向量相似度搜索不仅限于文档:
这种搜索方法非常灵活,不限于文档。它可以用于:
- 确定最接近的前 K 张不同人物的照片。
- 发现至少有两个音频段与某声音片段最匹配的前 K 首歌曲。
附加信息:
- 分区行限制子句扩展是 SQL 语言的广泛扩展,适用于向量检索之外。
- 它不依赖于向量索引。
3. 分区行限制子句的完整语法
分区行限制子句的完整语法,向量扩展部分以粗体突出显示,如下所示:
[FETCH [ EXACT | APPROX | APPROXIMATE ] { FIRST | NEXT }[ pbycount1 { PARTITION | PARTITIONS } BY pbyexpr1 , ][ pbycount2 { PARTITION | PARTITIONS } BY pbyexpr2 , ][... ,][ pbycountN { PARTITION | PARTITIONS } BY pbyexprN , ][{ row_count | percent PERCENT }] { ROW | ROWS } { ONLY | WITH TIES }][[ WITH | WITH TARGET | TARGET ] ACCURACY {accuracy [PERCENT] | PARAMETERS ( {NEIGHBOR PARTITION PROBES nprobes | EFSEARCH efs} ) } ]
完结!