语义检索-BAAI Embedding语义向量模型深度解析[1-详细版]:预训练至精通、微调至卓越、评估至精准、融合提升模型鲁棒性

语义检索-BAAI Embedding语义向量模型深度解析[1-详细版]:预训练至精通、微调至卓越、评估至精准、融合提升模型鲁棒性

语义向量模型(Embedding Model)已经被广泛应用于搜索、推荐、数据挖掘等重要领域。在大模型时代,它更是用于解决幻觉问题、知识时效问题、超长文本问题等各种大模型本身制约或不足的必要技术。然而,当前中文世界的高质量语义向量模型仍比较稀缺,且很少开源。为加快解决大模型的制约问题,近日,智源发布最强开源可商用中英文语义向量模型BGE(BAAI General Embedding),在中英文语义检索精度与整体语义表征能力均超越了社区所有同类模型,如OpenAI 的text embedding 002等。此外,BGE 保持了同等参数量级模型中的最小向量维度,使用成本更低。

  • bge-*-v1.5向量模型,缓解相似度分布问题,提升无指令情况下的检索能力(但检索任务仍建议使用指令)
  • LM-Cocktail, 一种通过模型融合在微调时保持原有模型通用能力的方法

资料下载

### BAAI/bge-large-zh-v1.5 模型 API 调用参数说明 #### 基本功能概述 `BAAI/bge-large-zh-v1.5` 是一种基于中文的大规模预训练模型,适用于多种自然语言处理任务,特别是语义匹配和检索场景。其核心功能包括句子编码、查询编码以及相似度计算。 以下是 `FlagEmbedding` 库中调用此模型的主要参数及其作用: --- #### 参数列表及解释 1. **`model_name_or_path`** - 描述:指定加载的预训练模型路径或名称。 - 默认值:`'BAAI/bge-large-zh-v1.5'` - 示例:`model = FlagModel('BAAI/bge-large-zh-v1.5')` 2. **`query_instruction_for_retrieval`** - 描述:为短查询生成表示时附加的提示词(instruction)。这有助于提升无指令检索的效果[^3]。 - 默认值:空字符串 (`""`) - 示例:`model = FlagModel(..., query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:")` 3. **`use_fp16`** - 描述:是否启用半精度浮点数加速推理过程。开启后可显著提高速度,但可能略微降低性能。 - 类型:布尔值 - 默认值:`False` - 示例:`model = FlagModel(..., use_fp16=True)` 4. **`sentences` / `corpus`** - 描述:输入待编码的文本集合。可以是一组句子或文档片段。 - 数据类型:Python 列表 (list),其中每个元素是一个字符串。 - 示例: ```python sentences = ["样例数据-1", "样例数据-2"] ``` 5. **`encode()` 方法** - 功能:对一组句子进行编码,返回它们的向量表示。 - 输入:句子列表。 - 输出:二维 NumPy 数组,形状为 `(len(sentences), embedding_dim)`。 - 示例: ```python embeddings = model.encode(["样例数据-1", "样例数据-2"]) ``` 6. **`encode_queries()` 方法** - 功能:专门针对查询句进行编码,并自动应用 `query_instruction_for_retrieval` 提示词。 - 输入:查询句子列表。 - 输出:查询句子的嵌入矩阵。 - 示例: ```python q_embeddings = model.encode_queries(['query_1', 'query_2']) ``` 7. **`encode_corpus()` 方法** - 功能:对大规模语料库中的句子进行批量编码。 - 输入:语料库句子列表。 - 输出:语料库句子的嵌入矩阵。 - 示例: ```python p_embeddings = model.encode(["样例文档-1", "样例文档-2"]) ``` 8. **`similarity` 计算** - 功能:通过余弦相似度或其他距离度量方法比较两个嵌入之间的关系。 - 实现方式:通常使用矩阵乘法完成。 - 示例: ```python similarity = embeddings_1 @ embeddings_2.T print(similarity) ``` 9. **其他高级选项** - **`max_len`**: 控制最大序列长度,默认分别为 `query_max_len=64` 和 `passage_max_len=256`[^1]。 - **`temperature`**: 对比学习中的温度参数,影响分数分布范围[^3]。 - **`hard_negative_mining`**: 是否启用硬负采样机制,在微调阶段有效改善模型鲁棒性--- #### 微调命令行接口参数详解 当需要进一步优化模型表现时,可以通过命令行工具运行微调脚本。以下是对常用参数的具体描述: | 参数名 | 含义 | |--------|------| | `--output_dir` | 存储微调后的模型权重目录路径。 | | `--train_data` | 训练数据集文件位置,支持 JSONL 格式。 | | `--learning_rate` | 设置初始学习率,默认推荐值为 `1e-5`。 | | `--fp16` | 开启混合精度训练模式以节省显存并加快收敛速度。 | | `--num_train_epochs` | 总共迭代轮次数量。 | | `--per_device_train_batch_size` | 单设备上的批次大小;对于小型玩具数据集建议设为 1。 | 完整命令如下所示: ```bash torchrun --nproc_per_node {GPU数目} \ -m FlagEmbedding.baai_general_embedding.finetune.run \ --output_dir {保存路径} \ --model_name_or_path BAAI/bge-large-zh-v1.5 \ --train_data ./toy_finetune_data.jsonl \ --learning_rate 1e-5 \ --fp16 \ --num_train_epochs 5 \ --per_device_train_batch_size {批尺寸} ``` --- ### 示例代码展示 下面提供一段完整的 Python 示例代码演示如何利用该模型完成简单的语义相似度计算任务: ```python from FlagEmbedding import FlagModel # 初始化模型实例 model = FlagModel( 'BAAI/bge-large-zh-v1.5', query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:", use_fp16=True ) # 定义两组测试句子 sentences_1 = ["样例数据-1", "样例数据-2"] sentences_2 = ["样例数据-3", "样例数据-4"] # 编码句子得到对应向量 embeddings_1 = model.encode(sentences_1) embeddings_2 = model.encode(sentences_2) # 计算相似度得分 similarity_scores = embeddings_1 @ embeddings_2.T print(f"Similarity Matrix:\n{similarity_scores}") ``` --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汀、人工智能

十分感谢您的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值