说明文档
<!-- TODO: 添加评估结果 --> <br><br>
<p align="center"> <img src="https://huggingface.co/datasets/jinaai/documentation-images/resolve/main/logo.webp" alt="Jina AI: 您的搜索基座,超级赋能!" width="150px"> </p>
<p align="center"> <b>由 <a href="https://jina.ai/"><b>Jina AI</b></a> 训练的文字嵌入模型。</b> </p>
快速开始
使用 jina-embeddings-v2-small-en 最简单的方式是使用 Jina AI 的 Embedding API。
预期用途与模型信息
jina-embeddings-v2-small-en 是一个英文的、单语言的 嵌入模型,支持 8192 的序列长度。
它基于 BERT 架构(JinaBERT),支持 ALiBi 的对称双向变体,以支持更长的序列长度。
骨干网络 jina-bert-v2-small-en 在 C4 数据集上进行了预训练。
该模型进一步在 Jina AI 收集的超过 4 亿个句子对和硬负样本上进行了训练。
这些句子对来自各种领域,并通过严格的清洗过程精心筛选。
该嵌入模型使用 512 的序列长度进行训练,但得益于 ALiBi,可以外推到 8k 序列长度(甚至更长)。 这使得我们的模型适用于一系列用例,特别是需要处理长文档的场景,包括长文档检索、语义文本相似度、文本重排序、推荐、RAG 和基于 LLM 的生成式搜索等。
该模型有 3300 万参数,能够实现闪电般快速且内存高效的推理,同时仍能提供令人印象深刻的性能。 此外,我们还提供以下嵌入模型:
jina-embeddings-v2-small-en:3300 万参数 (您在此处)。jina-embeddings-v2-base-en:1.37 亿参数。jina-embeddings-v2-base-zh:1.61 亿参数 中英双语嵌入模型。jina-embeddings-v2-base-de:1.61 亿参数 德英双语嵌入模型。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-small-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
)
最新的 sentence-transformers 也支持 Jina 嵌入:
!pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
model = SentenceTransformer(
"jinaai/jina-embeddings-v2-small-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 包的替代方案
- 托管 SaaS:在 Jina AI 的 Embedding API 上免费获取密钥开始使用。
- 私有化高性能部署:从我们的模型套件中选择并部署在 AWS Sagemaker 上。
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', ...
联系方式
加入我们的 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-small-en
作者 jinaai
创建时间: 2023-09-27 20:17:27+00:00
更新时间: 2025-01-06 16:26:03+00:00
在 Hugging Face 上查看