跨模态搜索系列 --- 二、Jina-跨模态搜索实现

【AIGC调研系列】Jina的Reader API是什么 Jina的Reader API是一个能够将任何网址转换成对大型语言模型(LLM)友好的输入格式的工具。用户只需在URL前添加简单的前缀"https://r.jina.ai/",即可实现这一转换,从而为使用代理和检索生成系统的用户提供改善后的输出结果[1][2]。这个API操作简单,不需要API密钥,且绝大部分网页能在2秒内处理完毕,显著改善了基于LLM的自动化系统输出质量[4]。 阅读详情

二、Jina-跨模态搜索实现

1. Jina 的基本概念与部署指北

作为Github热榜前三的神经搜索框架之一,Jina实现了对当前绝大部分数据类型的支持,对于视频、图像、文本、PDF以及音乐等非结构化数据,可进行大规模的索引与查询。

作为分布式架构,Jina具备可拓展和云原生的设计,实现了对云容器化、并行、分片、异步调度以及HTTP/gRPC/WebSocket 协议的支持。其专为神经搜索系统所设计的搭建模式,可以在极短时间内完成对深度学习搜索系统的部署,实现多模态的数据搜索。

  • 基本概念
    • 框架结构

      整个Jina框架基本上可分为 Document、Executor以及Flow 三个基本组件,三者共同协作,构建成完整的Jina应用程序。

      • Document: 作为Jina的基础数据类型,主要负责将非结构数据映射到向量数据中,从而将视频、语音以及文本等多模态数据转化为为统一的数据结构类型进行处理。
      • Executor: 可将其理解为一个类,通过该组件可以将本地函数转化为可在Flow组件中分发的函数,从而在Jina中构造相应的方法对Document进行处理
      • Flow: 主要负责将多个Executor进行连接,组成完整的Pipeline以提供服务。其入口是Gataway,本质是一个内部通信的路由,对接收到的请求进行分发。
    • 执行逻辑与应用示例

      • Jina官方提供了明确的搭建模式,使得Jina框架可在极短时间内完成搭建与部署,具体部署流程可参照官方文档进行安装
      • 需要注意的是,当前Jina暂不支持在Windows系统环境下安装,Windows用户需要开启WSL后,在WSL中进行安装部署。
    • DocArray 结构工具

      • 定义:

        作为存储非结构化数据的工具包,DocArray的特点在于其存在不同层级的结构,其可以将数据拆分为多种粒度多种模态,存储到不同的层级中,从而提高搜索粒度和结果丰富度。值得注意的是,Jina 3.x版本中已经包含了DocArray,无需独立安装。

      • 框架组成:

        • Document:作为DocArray的基本数据类型,无论文本、视频还是音频等多模态数据,都可采用Document进行表示,使得这些数据规整存储,以供后续处理。
        • DocumentArray:作为存放多个Document的容器,类似python中的list
        • Dataclass:用于直观表示多模态数据的高级API

2. Demo 实现 —文本匹配

  • YAML文件与Client监听
    • yaml文件主要用于指定Flow的执行逻辑,以下述文件为例:

      jtype: Flow
      with:
        port: 51000
        protocol: grpc
      executors:
        - uses: FooExecutor
          name: foo
          py_modules:
            - test.py
        - uses: BarExecutor
          name: bar
          py_modules:
            - test.py
      

      Jina在yaml文件中获取到指定的type、端口和协议,这里采用GRPC协议进行通讯,也可通过纯Python的方式调用Flow

      运行jina flow --uses toy.yml 命令启动grpc服务,输出如下结果:

      在这里插入图片描述

    • test.py文件主要负责构建yaml文件中的类,类中定义foo和bar函数

      # 创建 test.py 文件与 YAML 文件在同一目录下
      # 导入 document、executor 和 flow 以及 requests 装饰器
      from jina import DocumentArray, Executor, requests, Document
      
      # 编写 FooExecutor 与 BarExecutor 类,类中定义了函数 foo 和 bar
      # 该函数从网络请求接收 DocumentArray (先暂时不需要理解它是什么),并在其内容后面附加 "foo was here" 与 "bar was here"
      class FooExecutor(Executor):
          @requests # 用于指定路由,类似网页访问 /index 和 /login 会被路由到不同的方法上是用样的概念,关于 request 下面会再进行详细介绍
          def foo(self, docs: DocumentArray, **kwargs):
              docs.append(Document(text='This is foo'))
      
      
      class BarExecutor(Executor):
          @requests
          def bar(self, docs: DocumentArray, **kwargs):
              docs.append(Document(text='This is bar'))
      
    • 创建client.py文件,对上图端口进行监听

      # 从 Jina 中导入连接的客户端与 Document
      from jina import Client, Document
      
      c = Client(host='grpc://0.0.0.0:51000')  # 如果运行提示失败,可尝试使用localhost
      result = c.post('/', Document()) # 将一个空的 Document 传到服务端执行
      print(result.texts) 
      

      运行该文件,client会对指定端口进行监听,获取到DocumentArray类型的result,打印出其text内容

      在这里插入图片描述

    • 执行逻辑:

      在上述过程中,Jina按顺序读取py_modules中定义的函数,这些函数在test.py内的两个类中被分别定义,这两个类继承自Executor类。Jina在对端口进行监听时,client.py以post请求的方式发送Document到Gataway中,由Gataway将其发送给Executor顺序执行定义好的函数,最后将结果返回给Gataway,由Gataway发送至Client

      在这里插入图片描述

      通过 YAML 方式将 Executor 和 Flow 分开有以下优点:

      • 服务器上的数据流是非阻塞和异步的,当 Executor 处于空闲状态时,会立即处理新的请求。
      • 必要时会自动添加负载平衡,以确保最大吞吐量。
  • 中文文本匹配

    在官方给出的Demo示例中,Jina通过embed_feature_hashing函数实现了文本内容向量化,但此处的函数仅仅是一个简单的词袋模型,并未实现中文分词,仅仅通过空格来对英文文本进行分割,因此尝试采用深度学习方法实现文本向量化。

    • 使用Sentence_BERT预训练模型进行文本向量化,并采用余弦相似度取代Jaccard相似度。原因在于,jaccard相似度统计的是两个向量中交集与并集的比值,适用于词袋模型环境,根据分词获取相似度。在面对深度学习处理的文本向量时,其中存在的大量重复词会影响到Jaccard相似度的计算结果,因此需要改为余弦相似度。

      from docarray import Document, DocumentArray
      from sentence_transformers import SentenceTransformer
      from tqdm import tqdm
      from pprint import pprint
      
      with open('./龙族1·火之晨曦.txt', encoding='GBK') as f:
          text = f.read()
      
      d = Document(text=text)
      da = DocumentArray(Document(text=s.strip()) for s in d.text.split('\n') if s.strip())
      
      model = SentenceTransformer('./bert_base_chinese/')
      word_vec = model.encode
      
      for d in tqdm(da):
          d.embedding = word_vec(d.text)
      
      text = Document(text='路明非看向身边,所有人的脸色都很难看')
      text.embedding = word_vec(text.text)
      q = text.match(da, limit=10, exclude_self=True, metric='cos', use_scipy=True)
      pprint(q.matches[:, ('text', 'scores__cos')])
      
使用Jina嵌入在LangChain中的应用指南 近年来,随着自然语言处理(NLP)技术的发展,文本嵌入在各种应用场景中的作用愈发重要。Jina AI 提供了高效的嵌入模型,能够将文本转换为多维向量,方便后续的分析和处理。本文将介绍如何在LangChain中使用Jina嵌入,及其相关的应用场景。 阅读详情

相关推荐

跨模态搜索(cross-modal/media retrieval)

跨模态搜索研究的基本内容是寻找不同模态样本之间的关系,实现利用某一种模态样本,搜索近似语义的其他模态样本。 本文实现了论文《Joint Feature Selection and Subspace Learning for Cross-Modal Retrieval》(PAMI2016)和论文《Simple to Complex Cross-modal Learning

不会讲段子的正能量小王子 1万+

【VCED】Jina

Jina

KEEP的博客 1391

Jina多模态语义搜索实战:从向量检索到生产级神经搜索系统

向量搜索是现代AI应用的核心基础设施,其本质是将文本、图像、音频等异构数据映射至统一语义空间,通过近似最近邻(ANN)算法实现跨模态内容匹配。其技术原理依赖Embedding模型生成高质量向量表示,并以语义相似度替代关键词匹配,显著提升非结构化数据的检索准确率与鲁棒性。该技术在企业知识库、智能客服、工业图纸检索等场景中展现出强大价值,尤其适用于用户提问口语化、术语不规范、数据多源异构的现实业务。Jina作为原生支持多模态与端到端神经搜索的框架,提供了从Document建模、Flow编排到生产可观测性的完整链

weixin_34072637的博客 397

如何用 Jina 部署深度学习模型

来自:Jina AI进NLP群—>加入NLP交流群本文我们将介绍如何使用 Jina 来构建和部署一个使用 Stable Diffusion 生成图像的 Executor。什么是 Executor???? Executor 是一个独立的 gRPC 微服务,它可以在 DocumentArray 上执行任务。Executor Hub 上有大量预构建的 Executor 可供选择,包含了各种常见的任务,如...

zenRRan的博客 1441

解密电商大促背后的智慧:LSTM与ARIMA模型的双剑合璧

举个例子,如果某东发现某款新推出的电子产品在促销前夕搜索量突然暴涨,虽然这个产品没有过去的销售记录,但LSTM模型可以结合用户对类似产品的行为模式、实时的市场反馈,迅速捕捉到这些变化,并预测这款产品在大促期间的需求会急剧上升。想象一下,如果预测不准确,备货不足,商品很快就卖光了,大量用户可能在促销期间买不到想要的商品,这不仅让用户失望,还会影响某东的品牌形象。这种情况就像我们看一部很长的电视剧,看得越久,前面的情节可能就越来越模糊,到最后有些关键的情节细节都忘了,影响了对整个剧情的理解。

小蒋聊技术 2090

【Unity3D】关于unity中spriteAtlas的打包方案及使用时内存状态的多组对照实验

unity项目中使用精灵(Sprite)为了降低性能消耗,我们可以使用精灵图集(Sprite Atlas)技术,它能够将多个纹理合并成一个大纹理

云渊寒烬 5100

Jina 实例秀 —— 跨模态搜索

在本教程中,Jina将用于构建跨模态的搜索应用程序。在Jina框架的支持下,应用程序使用了Open AI的最新自然语言模型CLIP:CLIP可将一段文本或一张图片编码为512维向量。通过向...

Jina AI 的博客 1311

基于CRU和WorldClim的高分辨率(1km)气候数据生成

基于CRU和WorldClim的高分辨率(1km)气候数据生成

lhq7842955的博客 1691

【跨模态】神经搜索实践:Jina VCED

Jina 跨模态

weixin_42322991的博客 918

嵌入式GUI显示驱动配置实战:从emWin硬件接口到SPI屏驱动优化

在嵌入式系统开发中,显示驱动是连接GUI库与物理屏幕的核心底层模块,其本质是CPU与显示控制器之间的数据“翻译”与“传输”系统。其工作原理是通过实现特定的硬件抽象层接口,将GUI生成的图形数据转换为屏幕能识别的时序和协议。这项技术的核心价值在于,它允许开发者在资源受限的MCU上,通过适配不同的硬件接口,以最小的硬件开销实现稳定的图形输出。其典型应用场景包括智能家居面板、工业HMI、可穿戴设备等嵌入式图形界面开发。本文将深入解析emWin GUI库的驱动框架,重点探讨如何针对SPI、I2C等串行接口进行高效的

weixin_29159711的博客 341

深入解析V4L2框架与高通KMD在Camera驱动中的协同设计

本文深入解析了V4L2框架与高通KMD在Camera驱动中的协同设计。V4L2作为Linux内核标准视频驱动框架,提供了统一的设备抽象与数据流管理;而高通KMD则在其基础上,通过引入CRM等核心模块,构建了一套针对移动平台复杂相机系统的高效内核态驱动架构,实现了硬件配置与执行的解耦与智能调度。

qq_27496129的博客 1145

Jina AI x DataWhale|跨模态神经搜索实践的教程正式上线!

Datawhale x Jina AI 联合推出跨模态神经搜索教程!本教程基于 MLOps 框架 Jina 与 CLIP 模型搭建,通过前后端分离的模式,帮助你快速地搭建自己的神经搜索应用,接触前沿的多模态 AI 技术。教程背景在当下互联网信息爆发且形式愈加丰富的背景下,多模态、跨模态的人工智能崛起。单一模态往往难以提供对图文、视频等信息的完整描述,而多模态人工智能颠覆了传统单模态的互动方式,用户...

Jina AI 的博客 1438

Android perfetto 简介

android linux 性能优化 原理及操作

求变,从思想开始 3475

[datawhale202211]跨模态神经搜索实践:Jina生态

Jina生态有两个重要的组成成分:Jina结构本身,以及数据形式DocArray。 Jina的基本结构包含三部分:Flow,Executor,还有客户端Client,理解他们之间的交互关系很重要。 DocArray是Jina的数据形式,实现多模态数据处理的重要环节。本次task熟悉了文本,图像及视频三种形式的DocArray的处理。

qq_40990057的博客 1443

深度测评:Accio Work——目前普通用户最友好的多 Agent 协同工具

摘要:Accio Work是阿里国际站推出的多Agent协同工具,通过借鉴古代"三省六部制"构建高效协作框架。该工具支持主流大模型,可配置专业Agent角色,实现40分钟内完成复杂产品PRD等高效协作。其亮点在于直观的UI设计和流程驱动机制,能强制各Agent从专业视角深度思考。虽然超长对话稳定性有待优化,但作为目前最用户友好的多Agent工具,显著降低了构建复杂AI团队的门槛,成为提升个人和小微企业生产力的利器。

Maynor的博客 1729

华为OD机试2025A卷 - 用户调度问题(Java & Python& JS & C++ & C )

题目要求每个用户依次选择当前所能选择的最小资源消耗策略,并且若有多个策略的资源消耗相同,则选择最后一个策略。每个用户的选择是独立的,只考虑该用户的策略和相邻用户的约束,不考虑整个调度序列的全局资源消耗。每个用户根据自己的当前状态(即自己的三种选择的资源消耗)做出局部最优选择:在当前可选的策略中,选择消耗最小的那个。如果有多个最小值,则选择最后一个(根据题意)。这一选择是局部的最优,即在当下最有利的选择,但并不保证最终的整体系统资源消耗是最小的。

算法大师! 1万+

JINA 神经搜索:从原型到生产(二)

在本章中,我们分析并实践了如何使用 Jina 的高级功能,如分块、模态和高级的执行器,以应对神经搜索中最具挑战性的目标。我们实现了针对任意层次深度数据表示、跨模态搜索和非阻塞数据更新的解决方案。分块使我们能够反映一些数据具有多层次语义意义的特性,例如段落中的句子或长篇电影中的视频片段。跨模态搜索开启了神经搜索的一个主要优势——数据的通用性。这意味着,只要使用正确的模型,你就可以用任何类型的数据进行任何类型的数据搜索。最后,执行器使我们能够构建一个实时系统,用户既可以搜索也可以索引,同时数据保持同步。

龙哥盟 578

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

跨模态神经搜索实践VCED Jina入门

Jina介绍、基本概念、DocArray、文本、图像、视频处理、Executor、Flow相关使用

1ncludeSteven 724

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Jina AI 示例项目教程

Jina AI 示例项目教程 1. 项目介绍 Jina AI 是一个开源的神经搜索框架,旨在帮助开发者构建高效的搜索系统。Jina AI 提供了丰富的示例和演示,帮助开发者快速上手并理解如何使用 Jina 构建各种搜索应用。 2. 项目快速启动 2.1 安装 Jina 首先,确保你已经安装了 Python 3.7 或更高版本。然后,使用以下命令安装 Jina: pip install jina ...

gitblog_00988的博客 1312

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Jina AI 携搜索小模型亮相 ICLR 2025 新加坡

在这个高度垂直的任务上,ReaderLM-V2 的表现甚至超越了像 GPT-4o 这样的业界领先大模型,同时效果提升显著。除了技术的交流,我们也非常乐意介绍 Jina AI 的工作与实习机会,并为您准备了精美的纪念品。CLIP 模型在图文理解任务上表现亮眼,但其内部存在一个常被忽视的“模态鸿沟”:图像和文本的向量各自占据不同的领地。如果您也将参加 ICLR 2025,欢迎在会场找到我们的团队成员,与我们一起深入探讨对 AI 搜索的研究洞见。我们发现,简单的向量平移并不能解决问题,反而会破坏向量空间的结构。

Jina AI 的博客 1323

如何用Jina Embeddings V5 Omni Small快速构建跨模态搜索引擎

在当今多模态AI时代,构建能够同时处理文本、图像、视频和音频的搜索引擎已成为许多开发者的迫切需求。Jina Embeddings V5 Omni Small正是为解决这一挑战而生的终极解决方案——一个仅需1.74B参数的多模态嵌入模型,能够在单一向量空间中对齐所有媒体类型,让您轻松构建跨模态搜索引擎。🎯 ## 什么是Jina Embeddings V5 Omni Small? Jina Em

gitblog_00107的博客 780

JINA 神经搜索:从原型到生产(一)

我们生活在数字时代,数据的创建变得越来越容易。根据《福布斯》报道,我们每天生成 2.5 quintillion 字节的数据,而这些数据来自各种来源。它可以是 Instagram 上的图片、Telegram 上的语音消息、视频、文本,甚至是它们的组合。这在互联网刚刚起步时显然不是这样。尽管数据创建的容易度发生了显著变化,但我们依然在使用相同的搜索技术。尽管数据生成爆炸式增长,我们的搜索技术却没有得到太多更新。神经搜索是改变这一现状的方法。它利用我们当前所处的机器学习ML。

龙哥盟 768

Jina Hub:一站式神经搜索系统组件分享平台

Hub 是 Jina 全家桶中非常重要的一个成员,本期推文我们将详细介绍 Hub 的相关内容。在过往推文中,我们介绍过:* 高度适配深度学习任务的可扩展数据结构 DocArray* 开源神经搜索框架 Jina* 神经搜索系统结果调优工具 Finetuner* 为文本和图像创建 SOTA 表征向量的 CLIP-as-service今天,我们将为大家介绍 Jina全家桶中...

Jina AI 的博客 2388

跨模态神经搜索实践VCED-Jina学习

简单来说 Jina 可以帮助你快速把非结构化数据例如图像,文档视频等,转换为向量数据。并结合 Jina 的其他组件设计,帮助你快速的把向量数据利用起来,实现多模态的数据搜索。

weixin_45268944的博客 304

终极指南:CLIP-as-service如何与Jina生态深度集成神经网络搜索框架

CLIP-as-service是一款革命性的低延迟高可扩展性服务,专为图像和文本嵌入而设计。它通过CLIP模型将任意图像和句子转换为固定长度的向量表示,能够轻松作为微服务集成到神经网络搜索解决方案中。作为Jina生态系统的核心组件,CLIP-as-service为开发者提供了构建跨模态和多模态AI应用的强大工具。🚀 ## 什么是CLIP-as-service? CLIP-as-service

gitblog_00086的博客 563

【Datawhale跨模态实践学习笔记】Jina体验

简单来说 Jina 可以帮助你快速把非结构化数据例如图像,文档视频等,转换为向量数据。并结合 Jina 的其他组件设计,帮助你快速的把向量数据利用起来,实现多模态的数据搜索。DocArray 是用于存储非结构化数据的数据结构工具包,是本次我们做跨模态应用的基础。通过这个小而精的入口,能友好地带你走进多模态、跨模态的世界。DocArray 的亮点在于 Hierarchy + Nested。

JeffDing 416
上一篇: 一、语音识别方法(3)
下一篇: Day 1 --- 计算机视觉与OpenMMLab开源算法体系
Aaaaaki
博客等级 码龄9年 884粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaaaaki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值