由 Jina AI、Finetuner 团队训练的文本嵌入模型。
jina-embedding-t-en-v1 是一款小型语言模型,使用 Jina AI 的 Linnaeus-Clean 数据集训练而成。
该数据集包含 3.8 亿对句子,其中包括查询-文档对。
这些句子对来源于多个领域,并经过严格清洗精心筛选。
Linnaeus-Clean 数据集衍生自 Linnaeus-Full 数据集,后者最初包含 16 亿对句子。
该模型具有多种用途,包括信息检索、语义文本相似度计算、文本重排序等。
模型参数规模极小,仅 1400 万参数, 可在 CPU 上实现闪电般的推理速度,同时仍能提供出色的性能。 此外,我们还提供以下型号:
jina-embedding-1b-en-v1:12 亿参数,规模为 bert-base 的 10 倍(即将推出)。jina-embedding-6b-en-v1:60 亿参数,规模为 bert-base 的 30 倍(即将推出)。详情请查阅我们的 技术博客。
我们将该模型与 sbert 的 all-minilm-l6-v2/all-mpnet-base-v2 以及 OpenAI 的 text-embeddings-ada-002 进行了对比:
| 名称 | 参数规模 | 维度 |
|---|---|---|
| all-minilm-l6-v2 | 2300 万 | 384 |
| all-mpnet-base-v2 | 1.1 亿 | 768 |
| ada-embedding-002 | 未知/OpenAI API | 1536 |
| jina-embedding-t-en-v1 | 1400 万 | 312 |
| jina-embedding-s-en-v1 | 3500 万 | 512 |
| jina-embedding-b-en-v1 | 1.1 亿 | 768 |
| jina-embedding-l-en-v1 | 3.3 亿 | 1024 |
| 名称 | STS12 | STS13 | STS14 | STS15 | STS16 | STS17 | TRECOVID | Quora | SciFact |
|---|---|---|---|---|---|---|---|---|---|
| all-minilm-l6-v2 | 0.724 | 0.806 | 0.756 | 0.854 | 0.79 | 0.876 | 0.473 | 0.876 | 0.645 |
| all-mpnet-base-v2 | 0.726 | 0.835 | 0.78 | 0.857 | 0.8 | 0.906 | 0.513 | 0.875 | 0.656 |
| ada-embedding-002 | 0.698 | 0.833 | 0.761 | 0.861 | 0.86 | 0.903 | 0.685 | 0.876 | 0.726 |
| jina-embedding-t-en-v1 | 0.717 | 0.773 | 0.731 | 0.829 | 0.777 | 0.860 | 0.482 | 0.840 | 0.522 |
| jina-embedding-s-en-v1 | 0.743 | 0.786 | 0.738 | 0.837 | 0.80 | 0.875 | 0.523 | 0.857 | 0.524 |
| jina-embedding-b-en-v1 | 0.751 | 0.809 | 0.761 | 0.856 | 0.812 | 0.890 | 0.606 | 0.876 | 0.594 |
| jina-embedding-l-en-v1 | 0.745 | 0.832 | 0.781 | 0.869 | 0.837 | 0.902 | 0.573 | 0.881 | 0.598 |
我们在以下设备上对单个句子“What is the current weather like today?”进行了1万次编码:
并记录了所花费的时间以展示嵌入速度:
| 名称 | 参数 | 维度 | cpu耗时 | gpu耗时 |
|---|---|---|---|---|
| jina-embedding-t-en-v1 | 14m | 312 | 5.78s | 2.36s |
| all-minilm-l6-v2 | 23m | 384 | 11.95s | 2.70s |
| jina-embedding-s-en-v1 | 35m | 512 | 17.25s | 2.81s |
与 Jina AI Finetuner 配合使用
# 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}")请参考 Finetuner。
jina-embedding-s-en-v2 目前正在开发中,主要有两个目标:提升性能和增加最大序列长度。jina-embedding-s/b/l-de-v1。加入我们的 Discord 社区,与其他社区成员交流想法。
如果您在研究中发现 Jina Embeddings 有用,请引用以下论文:
@misc{günther2023jina,
title={Jina Embeddings: A Novel Set of High-Performance Sentence Embedding Models},
author={Michael Günther and Louis Milliken and Jonathan Geuter and Georgios Mastrapas and Bo Wang and Han Xiao},
year={2023},
eprint={2307.11224},
archivePrefix={arXiv},
primaryClass={cs.CL}
}