如何用DockArray的子索引实现嵌套数据的搜索

2023-10-27

注:本篇文章推荐以 Colab NoteBook 的形式查看,并在浏览器中直接运行代码。
链接:https://colab.research.google.com/github/jina-ai/workshops/blob/main/notebooks/docarray/subindices.ipynb

导语

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

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

作者介绍

Jina AI 机器学习工程师 Johannes Messner

任务:商品搜索

在本笔记本中,我们的数据库包含在线商店的列表,每个列表都包含多个图像和一个商品描述。首先要让这些数据都是可搜索的,此外,还希望用户能使用不同的模态(文本、图像或两者同时)作为查询输入,来搜索到准确的商品。

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

具体来说,我们将用到 3 个 DocArray 的功能:

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

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

  3. 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] Dataclasshttps://docarray.jina.ai/fundamentals/dataclass
[2] Subindex: https://docarray.jina.ai/fundamentals/documentarray/subindex
[3] Document Stores: https://docarray.jina.ai/advanced/document-store

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用DockArray的子索引实现嵌套数据的搜索 的相关文章

  • shell 中的单行注释和多行注释

    今天在学习shell编程的时候 当自己想对多行进行注释时 发现自己不会 所以在网上去查询下 参考 作者 lansesl2008 地址 http blog csdn net lansesl2008 article details 205583
  • 疯传全网网络10个运维巡检脚本以及使用小技巧

    哈喽大家好 欢迎来到虚拟化时代君 XNHCYL 大家好 我是虚拟化时代君 一位潜心于互联网的技术宅男 这里每天为你分享各种你感兴趣的技术 教程 软件 资源 福利 每天更新不间断 福利不见不散 第1章 前言 巡检脚本在网络运维中非常重要 近期

随机推荐

  • Jenkins远程命令执行漏洞(CVE-2018-1000861)

    声明 好好学习 天天向上 漏洞描述 Jenkins使用Stapler框架开发 其允许用户通过URL PATH来调用一次public方法 由于这个过程没有做限制 攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法 通过这个漏洞 我们
  • C单元测试框架——CMockery (1) 简介

    cmockery 是google发布的用于C单元测试的一个轻量级的框架 主要特点 免费且开源 google提供技术支持 轻量级的框架 使测试更加快速简单 避免使用复杂的编译器特性 对老版本的编译器来讲 兼容性好 并不强制要求待测代码必须依赖
  • 【设计模式】-设计模式总目录

    设计模式 重要性不多说了 之前在简书上简单总结过 这次再来总结一次 更详细版 以此加深印象和帮助理解 01 单例模式 https blog csdn net lovexiaotaozi article details 83896573 02
  • Java并发编程——ReentrantLock重入锁解析

    重入锁 所谓重入锁 即支持重入性 表示能够对共享资源重复加锁 即当前线程获取该锁再次获取不会被阻塞 重入性 在线程获取锁的时候 如果已经获取锁的线程是当前线程的话则直接再次获取成功 由于锁会被获取n次 那么只有锁在被释放同样的n次之后 该锁
  • 二叉树的层序遍历,以及求层数

    二叉树的中序遍历 最主要的一种方法是用队列 Queue 来实现 下面贴出一份实现代码 class Tree int data Tree lchild 左孩子 Tree rchild 右孩子 以下是主要方法 public static voi
  • 自己实现telnet程序

    转自 http blog csdn net gujintong1110 article details 44278535 include
  • Metasploitable渗透测试实战:ms17-010

    漏洞简介 永恒之蓝 即ms17 010 是指2017年4月14日晚 黑客团体Shadow Brokers 影子经纪人 公布一大批网络攻击工具 其中包含 永恒之蓝 工具 永恒之蓝 利用Windows系统的SMB漏洞可以获取系统最高权限 5月1
  • 论文解读:Improving Nighttime Driving-Scene Segmentation via Dual Image-adaptive Learnable Filters

    论文地址 https arxiv org abs 2207 01331 发表时间 Submitted on 4 Jul 2022 v1 last revised 20 Mar 2023 this version v2 项目地址 https
  • C语言穷举解决最大子序列含测试

    题目再现 设给定一个整数序列 a 1 a 2
  • Python语言:列表初体验

    列表是Python中的一个对象 他类似于C语言中的数组 可以存储许多数据 也可以称之为数据集合 他原则是可以存储不同类型的数据 一般不建议这样使用 有点奇怪 一般情况下一个列表中保存的都是同一种类型的数据 列表的创建 列表 list 是把数
  • qml界面参数传递、返回

    背景 设计设置界面时需要在键盘上设置数值 设定完返回时需要知道返回值是什么 如果用上下级关系实现可能很方便 但是会重复加载按键模块 觉得这样不好 想用stackView push url 初始值 设定后的值 这样的方式 1 想过用带参数信号
  • Java事件机制简介 内含面试题

    面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转clo
  • 编程是一门技术,更加是一门艺术

    最近一段时间在学习 大话设计模式 书籍开篇就提到 编程是一门技术 更加是一门艺术 这句经典 读罢 我不得不被作者程序设计模式这种与众不同的思维所折服 其实软件编程真的是一门了不起的艺术 谈及 艺术 人们自然会联想到 美 技艺 灵感 等词 但
  • 开关电源输出纹波主要来源五个方面?示波器测纹波方法?

    一 开关电源纹波来源 以20M示波器带宽为限制标准 电压设为PK PK 也有测有效值的 去除示波器控头上的夹子与地线 因为这个本身的夹子与地线会形成环路 像一个天线接收杂讯 引入一些不必要的杂讯 使用接地环 不使用接地环也可以 不过要考虑其
  • armeabi和armeabi-v7a

    在我们android APK的根目录有一个 libs文件夹 此文件夹下包含了armeabi 和armeabi v7a两个文件夹 我们的c代码编译成的本地库 各种 so 就会放在这两个文件夹其中的一个 那armeabi v7a 与 armea
  • 《机器学习》(西瓜书)第六章

    6 1 间隔与支持向量 对于两类训练样本分开的超平面很多 我们需要找到对训练样本局部扰动的 容忍 性最好的那一个 对未见示例的泛化能力最强 鲁棒性 一个系统或组织抵御或克服不利条件的能力 距离超平面最近的几个训练样本能够正确分类 他们被称为
  • jdk1.8新特性之Lambda表达式

    目录 一 为什么使用lambda表达式 二 lambda 表达式语法 一 为什么使用lambda表达式 1 lambda是一个匿名函数 我们可以把lambda表达式理解为是一段可以传递的代码 将代码像数据一样进行传递 二 lambda 表达
  • 性能测试基础知识(一)性能测试策略

    性能测试策略 一 什么是性能测试 二 性能测试的目的 三 性能测试策略 1 基准测试 2 并发测试 3 负载测试 4 压力测试 5 其他测试 一 什么是性能测试 性能测试是在一定的负载1条件下 系统的响应时间等特性是否满足特定的性能需求 需
  • 毕业设计 单片机stm32智能大棚监控护理系统 - lora 远程通信

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4 1 lora无线通信 4 2 MG812二氧化碳监测模块 4 3 MQ 2烟雾传感器 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度
  • 如何用DockArray的子索引实现嵌套数据的搜索

    注 本篇文章推荐以 Colab NoteBook 的形式查看 并在浏览器中直接运行代码 链接 https colab research google com github jina ai workshops blob main notebo