由 Jina AI 训练的文本嵌入模型集。
使用 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 技术报告
mean pooling 从模型输出中获取所有标记嵌入,并在句子/段落级别对它们进行平均。
事实证明,这是生成高质量句子嵌入最有效的方法。
我们提供了一个 encode 函数来处理此过程。
然而,如果您希望不使用默认的 encode 函数来实现:
# coding = utf-8
import os
import torch
import torch_npu
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import argparse
from openmind import pipeline, is_torch_npu_available
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument("--model_name_or_path", type=str, default="./")
args = parser.parse_args()
model_path = args.model_name_or_path
device = None
if is_torch_npu_available():
device = "npu:0"
else:
device = "cpu"
sentences_1 = ['how is the weather today']
sentences_2 = [ 'What is the current weather like today?']
model = SentenceTransformer(model_path)
model = model.to(device)
embeddings_1 = model.encode(sentences_1)
embeddings_2 = model.encode(sentences_2)
cosine_scores = cos_sim(embeddings_1, embeddings_2)
print(f"cosine_scores: {cosine_scores}")根据 LLamaIndex 最新的博客文章,
总之,要在命中率和 MRR 上都达到峰值性能,OpenAI 或 JinaAI-Base 嵌入模型与 CohereRerank/bge-reranker-large 重排序器的组合表现突出。
模型代码加载失败
如果在调用 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}
}