文本向量模型 jina-embeddings-v3 使用

jina-embeddings-v3Jina 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 方法的各个参数的详细解释:

  1. sentences (Union[str, List[str]]):
    • 类型strList[str]
    • 描述:输入的文本,可以是单个句子(字符串)或多个句子(字符串列表)。
  2. batch_size (int, 默认值=32):
    • 类型int
    • 描述:每批处理的句子数量。较大的批次可以提高处理速度,但需要更多内存。
  3. show_progress_bar (Optional[bool], 默认值=None):
    • 类型boolNone
    • 描述:如果设置为 True,则在处理过程中显示进度条;如果设置为 False,则不显示进度条。默认为 None,具体行为取决于环境。
  4. output_value (str, 默认值=”sentence_embedding”):
    • 类型str
    • 描述:指定输出值的键。默认值是 "sentence_embedding",即返回句子嵌入。如果需要其他输出,可以更改此参数,如 token_embeddings
  5. convert_to_numpy (bool, 默认值=True):
    • 类型bool
    • 描述:如果为 True,返回的结果将转换为 NumPy 数组。这对于进行数值操作非常有用。
  6. convert_to_tensor (bool, 默认值=False):
    • 类型bool
    • 描述:如果为 True,结果将返回为 PyTorch 张量。如果您打算直接进行深度学习任务,可以使用此选项。
  7. device (Optional[torch.device], 默认值=None):
    • 类型torch.deviceNone
    • 描述:指定计算应使用的设备(CPU 或 GPU)。如果为 None,则自动选择设备。
  8. normalize_embeddings (bool, 默认值=True):
    • 类型bool
    • 描述:如果为 True,返回的嵌入向量将进行归一化(即缩放为单位长度)。通常在基于嵌入的任务中使用,确保向量的大小一致。
  9. truncate_dim (Optional[int], 默认值=None):
    • 类型intNone
    • 描述:如果设置了该值,嵌入将被截断到指定的维度。可用于减少嵌入的大小,适用于特定任务。
  10. task (Optional[str], 默认值=None):
    • 类型strNone
    • 描述:指定要执行的任务。如果使用的是预训练模型,并且该模型优化了特定任务(如文本分类或情感分析),可以设置此参数。默认值为 None

任务类型有如下几种:

  1. retrieval.query​(检索查询):
    • 任务:生成查询的嵌入向量,用于在文档库中检索相关文档。
    • 示例:用户输入查询“什么是机器学习?”,模型生成该查询的嵌入向量,用于在文档库中查找相关文章。
  2. retrieval.passage​(检索段落):
    • 任务:生成文档或段落的嵌入向量,用于与查询嵌入进行匹配。
    • 示例:模型生成一段关于“机器学习”的文章的嵌入向量,用于与用户查询的嵌入向量进行相似度计算。
  3. separation​(分离):
    • 任务:将文本分割成独立的语义单元或段落。
    • 示例:将一篇长文章分割成多个独立的段落,每个段落讨论不同的子主题。
  4. classification​(分类):
    • 任务:将文本分类到预定义的类别中。
    • 示例:将一篇新闻文章分类为“体育”、“科技”或“政治”。
  5. 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'

解决步骤:

  1. https://huggingface.co/jinaai/xlm-roberta-flash-implementation/tree/main 下载所有文件
  2. 拷贝到 /.cache/huggingface/modules/transformers_modules/ 目录下,注意你的 cache 目录

未经允许不得转载:一亩三分地 » 文本向量模型 jina-embeddings-v3 使用
评论 (0)

8 + 1 =