jina-embeddings-v3
是 Jina AI
推出的最新文本嵌入(Text Embeddings)模型,主要用于 NLP 任务,如搜索、推荐、分类、聚类等。它基于深度学习技术,优化了向量表示的质量,能够高效地将文本转换为高维稠密、精准的向量表示。并且也支持多种语言,能够在跨语言任务中表现出色,适用于全球化的应用场景。
HuggingFace:https://huggingface.co/jinaai/jina-embeddings-v3
1. 模型介绍
在 jina-embeddings-v3
中,使用 encode
方法进行文本向量编码。该方法有个重要的参数 task,通过 该参数来指定不同的任务类型,以优化嵌入的生成方式。不同的 task
值会激活不同的 LoRA(Low-Rank Adaptation)适配器,这些适配器可以针对特定任务进行微调,从而提升性能。如果不传 task
,则不会使用特定的 LoRA 适配器,模型将按照默认方式进行文本嵌入。
以下是 encode
方法的各个参数的详细解释:
sentences
(Union[str, List[str]]):- 类型:
str
或List[str]
- 描述:输入的文本,可以是单个句子(字符串)或多个句子(字符串列表)。
- 类型:
batch_size
(int, 默认值=32):- 类型:
int
- 描述:每批处理的句子数量。较大的批次可以提高处理速度,但需要更多内存。
- 类型:
show_progress_bar
(Optional[bool], 默认值=None):- 类型:
bool
或None
- 描述:如果设置为
True
,则在处理过程中显示进度条;如果设置为False
,则不显示进度条。默认为None
,具体行为取决于环境。
- 类型:
output_value
(str, 默认值=”sentence_embedding”):- 类型:
str
- 描述:指定输出值的键。默认值是
"sentence_embedding"
,即返回句子嵌入。如果需要其他输出,可以更改此参数,如token_embeddings
。
- 类型:
convert_to_numpy
(bool, 默认值=True):- 类型:
bool
- 描述:如果为
True
,返回的结果将转换为 NumPy 数组。这对于进行数值操作非常有用。
- 类型:
convert_to_tensor
(bool, 默认值=False):- 类型:
bool
- 描述:如果为
True
,结果将返回为 PyTorch 张量。如果您打算直接进行深度学习任务,可以使用此选项。
- 类型:
device
(Optional[torch.device], 默认值=None):- 类型:
torch.device
或None
- 描述:指定计算应使用的设备(CPU 或 GPU)。如果为
None
,则自动选择设备。
- 类型:
normalize_embeddings
(bool, 默认值=True):- 类型:
bool
- 描述:如果为
True
,返回的嵌入向量将进行归一化(即缩放为单位长度)。通常在基于嵌入的任务中使用,确保向量的大小一致。
- 类型:
truncate_dim
(Optional[int], 默认值=None):- 类型:
int
或None
- 描述:如果设置了该值,嵌入将被截断到指定的维度。可用于减少嵌入的大小,适用于特定任务。
- 类型:
task
(Optional[str], 默认值=None):- 类型:
str
或None
- 描述:指定要执行的任务。如果使用的是预训练模型,并且该模型优化了特定任务(如文本分类或情感分析),可以设置此参数。默认值为
None
。
- 类型:
任务类型有如下几种:
- retrieval.query(检索查询):
- 任务:生成查询的嵌入向量,用于在文档库中检索相关文档。
- 示例:用户输入查询“什么是机器学习?”,模型生成该查询的嵌入向量,用于在文档库中查找相关文章。
- retrieval.passage(检索段落):
- 任务:生成文档或段落的嵌入向量,用于与查询嵌入进行匹配。
- 示例:模型生成一段关于“机器学习”的文章的嵌入向量,用于与用户查询的嵌入向量进行相似度计算。
- separation(分离):
- 任务:将文本分割成独立的语义单元或段落。
- 示例:将一篇长文章分割成多个独立的段落,每个段落讨论不同的子主题。
- classification(分类):
- 任务:将文本分类到预定义的类别中。
- 示例:将一篇新闻文章分类为“体育”、“科技”或“政治”。
- text-matching(文本匹配):
- 任务:比较两段文本的语义相似度。
- 示例:比较“猫在沙发上”和“沙发上有只猫”这两句话的语义相似度,判断它们是否表达相同的意思。
2. 模型使用
# 屏蔽输出: flash_attn is not installed. Using PyTorch native attention implementation. import logging logging.basicConfig(level=logging.ERROR) import torch from transformers import AutoModel def demo(): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = AutoModel.from_pretrained('jinaai/jina-embeddings-v3', trust_remote_code=True).to(device) vectors = model.encode(['我是谁?', '你是谁?'], task='classification', convert_to_tensor=True) print(vectors.shape) # 输出: torch.Size([2, 1024]) if __name__ == '__main__': demo()
这段代码可能会报错如下:
File "/home/chinacpp/.cache/huggingface/modules/transformers_modules/xlm-roberta-flash-implementation/modeling_xlm_roberta.py", line 33, in <module> from .rotary import RotaryEmbedding ModuleNotFoundError: No module named 'transformers_modules.xlm-roberta-flash-implementation.rotary'
解决步骤:
- 从 https://huggingface.co/jinaai/xlm-roberta-flash-implementation/tree/main 下载所有文件
- 拷贝到 /.cache/huggingface/modules/transformers_modules/ 目录下,注意你的 cache 目录