关于算法:如何用DockArray的子索引实现嵌套数据的搜索

2次阅读

共计 1164 个字符,预计需要花费 3 分钟才能阅读完成。

​ 

 

导语

在数据很简略的时候,每个向量都代表一个数据点,咱们轻松地存储到任意向量数据库,基于类似度去检索 embedding。但事实世界的数据总是很凌乱的,多模态数据有着各式各样的档次嵌套构造。

无需放心,Jina 全家桶为你筹备了解决方案!

作者介绍

Jina AI 机器学习工程师 Johannes Messner

工作:商品搜寻

在本笔记本中,咱们的数据库蕴含在线商店的列表,每个列表都蕴含多个图像和一个商品形容。首先要让这些数据都是可搜寻的,此外,还心愿用户能应用不同的模态 (文本、图像或两者同时) 作为查问输出,来搜寻到精确的商品。

为了解决这两个问题,咱们只须要一个工具 DocArray

具体来说,咱们将用到 3 个 DocArray 的性能:


1. Dataclass[1],对数据进行建模


2. Subindex[2],使数据点及数据点的嵌套信息可搜寻


3. Document Stores[3],将咱们的数据存储在磁盘上,并对它做检索


此外,咱们也将应用 CLIP-as-service 编码文本和图像数据,生成对应 embedding。

数据索引

在索引数据之前,让咱们看看咱们的数据必须是什么样子,能力实现上述工作。


• 想要搜寻图像,须要为每个图像提供 embedding


• 想要搜寻形容,须要示意其形容的语义 embedding


• 想要搜寻整个列表,每个列表都须要一个能代表整个列表的 embedding


将 embedding 存储在向量数据库中时,通常无奈保留这种嵌套数据结构。然而,DocArray 子索引解决了这一难题。

Subindex

在 DocArray 中,数据以 Document 的模式存储,DocumentArray 是用于保留多个 Document 的列表。默认状况下,DocumentArray 是一个内存数据结构,但它也原生反对 Document Store,它是 (向量) 数据库后端,可用于在磁盘上长久化数据。

每个 DocumentArray 代表一个搜寻索引,因而给定一个查问,咱们能够找到其中蕴含的元素。一旦找到匹配的 Document,就能够将它们加载到内存中。

子索引使得这种模式可能扩大到嵌套数据。每个子索引代表父 DocumentArray 的一个嵌套档次,比方图片或形容文本。只有启用了子索引,就能够间接在该层执行搜寻,就不须要像应用根级别索引一样,先将所有数据加载到内存中。

在底层,每个子索引创立一个独自的数据库索引,独立于其余子索引或根索引来存储相干数据。

援用链接

[1] Dataclass: https://docarray.jina.ai/fund…
[2] Subindex: https://docarray.jina.ai/fund…
[3] Document Stores: https://docarray.jina.ai/adva…

 

正文完
 0