当前位置: 首页 > news >正文

jina-embeddings-v4

1. 模型概述

jina-embeddings-v4 是一个多模态嵌入模型,基于 Qwen2.5-VL 架构扩展而来。核心创新在于:

  • 多模态支持:统一处理文本和图像输入,生成语义嵌入向量。
  • 输出灵活性:提供单向量(全局语义)和多向量(细粒度语义)两种输出选项。
  • 任务特化:通过 LoRA 微调适配不同任务(如文档检索、代码搜索),显著提升性能。
    模型开源在 Hugging Face,论文见 arXiv。

2. 模型架构详解

架构基于 Qwen2.5-VL,扩展支持多向量输出。关键组件如下:

2.1 输入处理
  • 文本输入

    • 分词器将文本转换为标记序列。
    • Transformer 编码器处理序列,生成向量表示。
    # 伪代码示例:文本编码过程
    from transformers import AutoTokenizer, AutoModel
    tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-VL")
    model = AutoModel.from_pretrained("Qwen/Qwen2.5-VL")text = "Example text input"
    inputs = tokenizer(text, return_tensors="pt")  # 分词
    outputs = model(**inputs)  # Transformer 编码
    text_vectors = outputs.last_hidden_state  # 输出向量序列
    
  • 图像输入

    • 离散图像模型将图像转换为“图像标记”(类似文本标记)。
    • 图像标记输入 Transformer,与文本标记统一处理。
    # 伪代码示例:图像编码过程
    from PIL import Image
    image = Image.open("example.jpg")
    image_tokens = discrete_image_model(image)  # 转换为图像标记
    combined_inputs = torch.cat([text_vectors, image_tokens], dim=1)  # 文本+图像融合
    
2.2 输出机制
  • 单向量输出
    • 生成 2048 维全局向量,通过池化(如平均池化)实现。
    • 支持 Matryoshka 表示学习:可截断至 128 维,精度损失极小(标量值按语义重要性排序)。
  • 多向量输出
    • 为每个输入标记(包括图像标记)生成 128 维向量。
    • 优势:保留细粒度语义,适合处理视觉丰富文档(如 PDF 中的图文混合内容)。
2.3 LoRA 微调任务

模型训练时添加了三个独立的 LoRA 适配器(各 60M 参数),针对不同任务优化:

  1. 非对称查询-文档检索
    • 优化目标:处理结构差异(如短查询 vs 长文档)。
    • 示例应用:用户输入问题,检索相关文档。
  2. 语义相似性和对称检索
    • 优化目标:寻找相似内容(如语义文本相似性任务)。
    • 示例应用:推荐相似文章或产品。
  3. 代码检索
    • 优化目标:自然语言到代码、代码到代码的相似性搜索。
    • 示例应用:技术问答或代码库搜索。
架构示意图

以下图片展示了模型处理流程(文本和图像输入的统一编码):

在这里插入图片描述

3. 训练过程详解

训练分为两阶段:对比学习训练(基础语义学习)和任务特化训练(任务优化)。

3.1 对比学习训练
  • 目标:学习跨模态语义关系(文本-文本、文本-图像对)。
  • 方法
    • 输入正样本对(相关文本/图像)和负样本对(不相关内容)。
    • 使用 InfoNCE 损失函数优化嵌入相似性:
      L InfoNCE = − log ⁡ e sim ( q , k + ) / τ ∑ i = 1 N e sim ( q , k i ) / τ \mathcal{L}_{\text{InfoNCE}} = -\log \frac{e^{\text{sim}(q, k^+)/\tau}}{\sum_{i=1}^{N} e^{\text{sim}(q, k_i)/\tau}} LInfoNCE=logi=1Nesim(q,ki)/τesim(q,k+)/τ
      其中 sim ( ⋅ ) \text{sim}(·) sim() 是余弦相似度, τ \tau τ 是温度参数。
# 伪代码示例:InfoNCE 损失计算
import torch.nn.functional as Fdef info_nce_loss(query, positive_key, negative_keys, temperature=0.1):# query: 查询嵌入, positive_key: 正样本嵌入, negative_keys: 负样本嵌入列表pos_sim = F.cosine_similarity(query, positive_key, dim=-1) / temperatureneg_sims = [F.cosine_similarity(query, k, dim=-1) / temperature for k in negative_keys]logits = torch.cat([pos_sim.unsqueeze(-1)] + neg_sims, dim=-1)labels = torch.zeros(logits.shape[0], dtype=torch.long).to(query.device)loss = F.cross_entropy(logits, labels)return loss
3.2 任务特化训练
  • 方法:复制对比学习阶段的 LoRA 适配器,针对三个任务独立优化:
    1. 非对称检索任务
      • 数据:三元组(查询、正文档、负文档)。
      • 损失:扩展的 InfoNCE+ 损失,强化查询-文档差异处理。
    2. 语义相似性任务
      • 数据:带相似度分数的文本对(如 MTEB/arguana)。
      • 损失:CoSENT 损失,优化对称相似性:
        L CoSENT = ∑ ( i , j ) max ⁡ ( 0 , margin − sim ( v i , v j ) ) \mathcal{L}_{\text{CoSENT}} = \sum_{(i,j)} \max(0, \text{margin} - \text{sim}(v_i, v_j)) LCoSENT=(i,j)max(0,marginsim(vi,vj))
    3. 代码检索任务
      • 数据:代码相关数据集(如 StackExchangeQA)。
      • 损失:标准 InfoNCE 损失,专注代码语义。

4. 推理过程详解

推理时用户根据任务需求选择 LoRA 适配器,生成嵌入后计算相似性。

4.1 推理步骤
  1. 输入处理
    • 文本或图像输入,转换为标记序列。
  2. 嵌入生成
    • 选择 LoRA 适配器(非对称检索/语义相似性/代码检索)。
    • 生成单向量或多向量嵌入。
  3. 相似性计算
    • 单向量:余弦相似度(全局匹配)。
    • 多向量:MaxSim 或 ColBERT 式相似度(细粒度匹配)。
# 伪代码示例:推理流程
from sklearn.metrics.pairwise import cosine_similarity# 选择适配器(示例:非对称检索)
lora_adapter = load_lora("asymmetric_retrieval")
model.set_adapter(lora_adapter)# 生成嵌入
query = "搜索查询"
document = "候选文档"
query_embedding = model.encode(query)  # 单向量
doc_embedding = model.encode(document)  # 单向量# 计算相似度
similarity = cosine_similarity(query_embedding, doc_embedding)
print(f"相似度: {similarity[0][0]:.4f}")
4.2 多向量输出优势
  • 适合复杂文档:例如图像中的 OCR 文本(数据集如 HungarianDocQA-OCR),多向量能捕捉局部语义。
  • 示例:图像中的文字“标题”,其向量与文本“标题”向量高相似。

在这里插入图片描述

5. 关键资源汇总

  • 模型与数据集
    • 模型:jina-embeddings-v4 on Hugging Face
    • 论文:arXiv:2506.18902
    • 数据集:
      • Donut VQA(视觉问答)
      • JDocQA(文档问答)
      • ArguaNA(语义相似性)

https://huggingface.co/collections/jinaai/jinavdr-visual-document-retrieval-684831c022c53b21c313b449
https://huggingface.co/datasets/warshakhan/donut_vqa_ISynHMP https://huggingface.co/datasets/jlli/JDocQA-nonbinary https://huggingface.co/datasets/jlli/HungarianDocQA-OCR
https://github.com/laituan245/StackExchangeQA
https://huggingface.co/datasets/mteb/arguana
https://huggingface.co/jinaai/jina-embeddings-v4
https://arxiv.org/pdf/2506.18902

  • 核心创新:统一文本/图像处理、任务特化 LoRA 适配器、Matryoshka 单向量压缩。
  • 优势场景:视觉文档检索(如 PDF 图文混合)、代码搜索、高精度语义相似性任务。
  • 性能关键:多向量输出保留细节,LoRA 微调提升任务特定性能 20%+(据论文指标)。
http://www.lqws.cn/news/525925.html

相关文章:

  • Oracle 角色与自定义角色深度解析
  • vllm加载多个Lora部署
  • Linux系统(信号篇):信号的产生
  • 重塑音视频叙事:Premiere文本剪辑与Podcast AI降噪的革命性工作流
  • dify小用
  • 操作系统面试知识点(1):操作系统基础
  • unibest+uniapp+vue3+TS+Wot UI分包
  • uniapp页面间通信uni.$on与通过uni.navigateTo中eventChannal的方式的区别
  • 【重点】【DP】174.地下城游戏
  • HTML表单元素
  • Webpack 核心概念
  • 数的范围(连续数字边界)
  • 大语言模型(LLM)初探:核心概念与应用场景
  • 【深度学习新浪潮】什么是上下文工程?
  • 【偏微分方程】基本概念
  • 【网络实验】-配置用户登录
  • spring boot项目整合百度翻译
  • Windows 安装 Redis8.0.2
  • JVM 中的 GC 算法演进之路!(Serial、CMS、G1 到 ZGC)
  • OceanBase向量检索在货拉拉的探索和实践
  • js截取地址详细信息(除去省市区、市市区、自治区市区)
  • python3虚拟机线程切换过程
  • 企业级混合云平台,信息安全基础技术方案
  • WinAppDriver 自动化测试:Python篇
  • Docker环境搭建和docker性能监控
  • CTF Writeup: [强网杯 2019]随便注挑战解析
  • 分布式系统 - 分布式缓存及方案实现
  • Python 数据分析与可视化 Day 7 - 可视化整合报告实战
  • 【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
  • 达梦数据库安装