说明文档
Jina Embeddings V2 Base English 模型 README
<!-- TODO: add evaluation results here --> <br><br>
<p align="center"> <img src="https://huggingface.co/datasets/jinaai/documentation-images/resolve/main/logo.webp" alt="Jina AI: Your Search Foundation, Supercharged!" width="150px"> </p>
<p align="center"> <b>由 <a href="https://jina.ai/"><b>Jina AI</b></a> 训练的文本嵌入模型。</b> </p>
快速入门
使用 jina-embeddings-v2-base-en 最简单的方法是使用 Jina AI 的 Embedding API。
预期用途与模型信息
jina-embeddings-v2-base-en 是一个支持 8192 序列长度的英文单语嵌入模型。
它基于 BERT 架构(JinaBERT),该架构支持 ALiBi 的对称双向变体,以支持更长的序列长度。
主干网络 jina-bert-v2-base-en 在 C4 数据集上进行了预训练。
该模型进一步在 Jina AI 收集的超过 4 亿个句子对和硬负样本上进行了训练。
这些句子对来自各个领域,并经过了严格的清洗过程精心筛选。
嵌入模型使用 512 序列长度进行训练,但借助 ALiBi 可以外推到 8k 序列长度(甚至更长)。 这使得我们的模型适用于各种用例,特别是需要处理长文档的场景,包括长文档检索、语义文本相似度、文本重排序、推荐、RAG 和基于 LLM 的生成式搜索等。
该模型拥有 1.37 亿个参数的标准规模,在实现快速推理的同时,性能优于我们的轻量级模型。建议使用单个 GPU 进行推理。 此外,我们还提供以下嵌入模型:
jina-embeddings-v2-small-en:3300 万参数。jina-embeddings-v2-base-en:1.37 亿参数 (当前页面)。jina-embeddings-v2-base-zh:中英双语嵌入。jina-embeddings-v2-base-de:德英双语嵌入。jina-embeddings-v2-base-es:西英双语嵌入。
数据与参数
Jina Embeddings V2 技术报告
使用方法
<details><summary>集成模型时请使用 mean pooling。</summary> <p>
为什么要用 mean pooling?
mean pooling(平均池化)从模型输出中获取所有 token 嵌入,并在句子/段落级别对它们进行平均。
已被证明是生成高质量句子嵌入的最有效方法。
我们提供了一个 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-v2-small-en')
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-small-en', trust_remote_code=True)
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
</p> </details>
您可以直接从 transformers 包使用 Jina Embedding 模型。
!pip install transformers
from transformers import AutoModel
from numpy.linalg import norm
cos_sim = lambda a,b: (a @ b.T) / (norm(a)*norm(b))
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-en', trust_remote_code=True) # 需要 trust_remote_code 来使用 encode 方法
embeddings = model.encode(['How is the weather today?', 'What is the current weather like today?'])
print(cos_sim(embeddings[0], embeddings[1]))
如果您只想处理较短的序列,例如 2k,可以将 max_length 参数传递给 encode 函数:
embeddings = model.encode(
['Very long ... document'],
max_length=2048
)
使用最新版本(v2.3.0)的 sentence-transformers 也支持 Jina 嵌入(请确保您已登录 huggingface):
!pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
model = SentenceTransformer(
"jinaai/jina-embeddings-v2-base-en", # 切换为 en/zh 以支持英文或中文
trust_remote_code=True
)
# 控制输入序列长度,最多 8192
model.max_seq_length = 1024
embeddings = model.encode([
'How is the weather today?',
'What is the current weather like today?'
])
print(cos_sim(embeddings[0], embeddings[1]))
Transformers(或 SentenceTransformers)包的替代方案
- 托管 SaaS:在 Jina AI 的 Embedding API 上使用免费密钥开始。
- 私有化高性能部署:从我们的模型套件中选择并部署在 AWS Sagemaker 上。
使用 Jina Embeddings 进行 RAG
根据 LLamaIndex 的最新博客文章:
总之,为了在命中率和 MRR 方面达到最佳性能,OpenAI 或 JinaAI-Base 嵌入与 CohereRerank/bge-reranker-large 重排序器的组合表现突出。
<img src="https://miro.medium.com/v2/resize:fit:4800/format:webp/1*ZP2RVejCZovF3FDCg-Bx3A.png" width="780px">
计划
- 支持更多欧洲和亚洲语言的双语嵌入模型,包括西班牙语、法语、意大利语和日语。
- 多模态嵌入模型,支持多模态 RAG 应用。
- 高性能重排序器。
问题排查
加载模型代码失败
如果在调用 AutoModel.from_pretrained 或通过 SentenceTransformer 类初始化模型时忘记传递 trust_remote_code=True 标志,您将收到错误提示,无法初始化模型权重。
这是因为 transformers 回退到创建默认的 BERT 模型,而不是 jina-embedding 模型:
Some weights of the model checkpoint at jinaai/jina-embeddings-v2-base-en were not used when initializing BertModel: ['encoder.layer.2.mlp.layernorm.weight', 'encoder.layer.3.mlp.layernorm.weight', 'encoder.layer.10.mlp.wo.bias', 'encoder.layer.5.mlp.wo.bias', 'encoder.layer.2.mlp.layernorm.bias', 'encoder.layer.1.mlp.gated_layers.weight', 'encoder.layer.5.mlp.gated_layers.weight', 'encoder.layer.8.mlp.layernorm.bias', ...
用户未登录 HuggingFace
该模型仅在 gated access 下可用。 这意味着您需要登录 huggingface 才能加载它。 如果您收到以下错误,您需要提供访问令牌,可以通过使用 huggingface-cli 或通过上述环境变量提供令牌:
OSError: jinaai/jina-embeddings-v2-base-en is not a local folder and is not a valid model identifier listed on 'https://huggingface.co/models'
If this is a private repository, make sure to pass a token having permission to this repo with `use_auth_token` or log in with `huggingface-cli login` and pass `use_auth_token=True`.
联系方式
加入我们的 Discord 社区,与其他社区成员交流想法。
引用
如果您在研究中觉得 Jina Embeddings 有用,请引用以下论文:
@misc{günther2023jina,
title={Jina Embeddings 2: 8192-Token General-Purpose Text Embeddings for Long Documents},
author={Michael Günther and Jackmin Ong and Isabelle Mohr and Alaeddine Abdessalem and Tanguy Abel and Mohammad Kalim Akram and Susana Guzman and Georgios Mastrapas and Saba Sturua and Bo Wang and Maximilian Werk and Nan Wang and Han Xiao},
year={2023},
eprint={2310.19923},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
jinaai/jina-embeddings-v2-base-en
作者 jinaai
创建时间: 2023-09-27 17:04:00+00:00
更新时间: 2025-01-06 16:24:38+00:00
在 Hugging Face 上查看