模型库 / jinaai/jina-embeddings-v3

jina-embeddings-v3

jinaai feature-extraction transformers multilingual af am
jinaai/jina-embeddings-v3
3,080,746
下载量
1140
收藏数
8
浏览量
cc-by-nc-4.0
许可

简介

jina-embeddings-v3: Multilingual Embeddings With Task LoRA

模型卡片

许可协议 cc-by-nc-4.0
语言
multilingual af am ar as az be bg bn br bs ca cs cy da de el en eo es et eu fa fi fr fy ga gd gl gu ha he hi hr hu hy id is it ja jv ka kk km kn ko ku ky la lo lt lv mg mk ml mn mr ms my ne nl no om or pa pl ps pt ro ru sa sd si sk sl so sq sr su sv sw ta te th tl tr ug uk ur uz vi xh yi zh
框架 transformers
feature-extraction sentence-similarity mteb sentence-transformers

模型配置

架构 XLMRobertaModel

模型详情

已翻译

由 Jina AI 训练的 embedding 模型。

jina-embeddings-v3:基于 Task LoRA 的多语言 Embedding 模型

快速开始

博客 | Azure | AWS SageMaker | API

预期用途与模型信息

jina-embeddings-v3 是一个多语言多任务文本 embedding 模型,专为多种 NLP 应用设计。
基于 Jina-XLM-RoBERTa 架构
该模型支持旋转位置编码(Rotary Position Embeddings),可处理长达 8192 个 token 的输入序列。
此外,它配备了 5 个 LoRA 适配器,能够高效生成特定任务的 embedding。

主要特性:

  • 扩展序列长度: 通过 RoPE 支持最长 8192 个 token。
  • 任务特定 Embedding: 通过 task 参数自定义 embedding,可选以下选项:
    • retrieval.query:用于非对称检索任务中的查询 embedding
    • retrieval.passage:用于非对称检索任务中的段落 embedding
    • separation:用于聚类和重排序应用中的 embedding
    • classification:用于分类任务中的 embedding
    • text-matching:用于衡量两段文本相似度的任务(如 STS 或对称检索任务)中的 embedding
  • Matryoshka Embeddings: 支持灵活的 embedding 尺寸(32, 64, 128, 256, 512, 768, 1024),允许截断 embedding 以适应您的应用。

支持的语言:

虽然基础模型支持 100 种语言,但我们将调优工作集中在以下 30 种语言上:
阿拉伯语、孟加拉语、中文、丹麦语、荷兰语、英语、芬兰语、法语、格鲁吉亚语、德语、希腊语、
印地语、印度尼西亚语、意大利语、日语、韩语、拉脱维亚语、挪威语、波兰语、葡萄牙语、罗马尼亚语、
俄语、斯洛伐克语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语、乌尔都语
越南语。

⚠️ 重要提示:
我们修复了 encode 函数中的一个 bug #60,该 bug 导致 Matryoshka embedding 截断 在归一化 之后 进行,从而产生未归一化的截断 embedding。此问题已在最新代码修订版中解决。

如果您使用旧版本编码了数据并希望保持一致性,请在加载模型时使用特定的代码修订版:AutoModel.from_pretrained('jinaai/jina-embeddings-v3', code_revision='da863dd04a4e5dce6814c6625adfba87b83838aa', ...)

使用方法

集成模型时应用均值池化(mean pooling)。

为什么使用均值池化?

均值池化会取模型输出的所有 token embedding,并在句子或段落级别进行平均。
这种方法已被证明能产生高质量的句子 embedding。

我们提供了一个 encode 函数,可以自动为您处理这一操作。

然而,如果您直接在 encode 函数之外使用模型,
则需要手动应用均值池化。具体操作如下:

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = (
        attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    )
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
        input_mask_expanded.sum(1), min=1e-9
    )

sentences = ["How is the weather today?", "What is the current weather like today?"]

tokenizer = AutoTokenizer.from_pretrained("jinaai/jina-embeddings-v3")
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v3", trust_remote_code=True)

encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
task = 'retrieval.query'
task_id = model._adaptation_map[task]
adapter_mask = torch.full((len(sentences),), task_id, dtype=torch.int32)
with torch.no_grad():
    model_output = model(**encoded_input, adapter_mask=adapter_mask)

embeddings = mean_pooling(model_output, encoded_input["attention_mask"])
embeddings = F.normalize(embeddings, p=2, dim=1)

开始使用 jina-embeddings-v3 最简单的方式是通过 Jina Embedding API

或者,您也可以通过 Transformers 包直接使用 jina-embeddings-v3

!pip install transformers torch einops
!pip install 'numpy<2'

如果您在支持 FlashAttention-2 的 GPU 上运行。截至 2024.9.12,它支持 Ampere、Ada 或 Hopper GPU(例如 A100、RTX 3090、RTX 4090、H100),

!pip install flash-attn --no-build-isolation
from transformers import AutoModel

# Initialize the model
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v3", trust_remote_code=True)

texts = [
    "Follow the white rabbit.",  # English
    "Sigue al conejo blanco.",  # Spanish
    "Suis le lapin blanc.",  # French
    "跟着白兔走。",  # Chinese
    "اتبع الأرنب الأبيض.",  # Arabic
    "Folge dem weißen Kaninchen.",  # German
]

# When calling the `encode` function, you can choose a `task` based on the use case:
# 'retrieval.query', 'retrieval.passage', 'separation', 'classification', 'text-matching'
# Alternatively, you can choose not to pass a `task`, and no specific LoRA adapter will be used.
embeddings = model.encode(texts, task="text-matching")

# Compute similarities
print(embeddings[0] @ embeddings[1].T)

默认情况下,模型支持最大序列长度为 8192 个 token。
然而,如果您希望将输入文本截断到更短的长度,可以将 max_length 参数传递给 encode 函数:

embeddings = model.encode(["Very long ... document"], max_length=2048)

如果您想使用 Matryoshka embeddings 并切换到不同的维度,
可以通过将 truncate_dim 参数传递给 encode 函数来调整:

embeddings = model.encode(['Sample text'], truncate_dim=256)

最新版本(3.1.0)的 SentenceTransformers 也支持 jina-embeddings-v3

!pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("jinaai/jina-embeddings-v3", trust_remote_code=True)

task = "retrieval.query"
embeddings = model.encode(
    ["What is the weather like in Berlin today?"],
    task=task,
    prompt_name=task,
)

您可以使用 SentenceTransformerTrainerjina-embeddings-v3 进行微调。
要为特定任务进行微调,您应在将模型传递给 ST Trainer 之前设置任务,可以在初始化时进行:

model = SentenceTransformer("jinaai/jina-embeddings-v3", trust_remote_code=True, model_kwargs={'default_task': 'classification'})

或者在之后进行:

标签

onnx sentence-similarity mteb sentence-transformers custom_code multilingual af am

操作


详细信息

厂商
jinaai
任务
feature-extraction
框架
transformers
许可(HF)
cc-by-nc-4.0
语言
multilingual, af, am, ar, as, az, be, bg, bn, br, bs, ca, cs, cy, da, de, el, en, eo, es, et, eu, fa, fi, fr, fy, ga, gd, gl, gu, ha, he, hi, hr, hu, hy, id, is, it, ja, jv, ka, kk, km, kn, ko, ku, ky, la, lo, lt, lv, mg, mk, ml, mn, mr, ms, my, ne, nl, no, om, or, pa, pl, ps, pt, ro, ru, sa, sd, si, sk, sl, so, sq, sr, su, sv, sw, ta, te, th, tl, tr, ug, uk, ur, uz, vi, xh, yi, zh