BGE向量模型架构和训练细节

2024-05-02 18:20

本文主要是介绍BGE向量模型架构和训练细节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模型论文:https://arxiv.org/pdf/2309.07597
模型数据:https://data.baai.ac.cn/details/BAAI-MTP

训练数据

在这里插入图片描述

无标签数据有标签数据组成。
无标签数据使用了悟道等数据集,有标签数据使用了dureader等数据集。
都是文本对,对于无标签数据还使用Text2Vec-Chinese过滤掉得分低于0.43的pair。
有标签数据直接来自于下游任务的标注数据集,包括DuReader、mMARCO、NLI-Zh等,涵盖retrieval、ranking、similarity comparison等任务。
在这里插入图片描述
在这里插入图片描述

模型训练

在这里插入图片描述BGE是一个类BERT的模型。
是一个三阶段的训练过程。

1.Pre-Training

使用纯文本的悟道语料,不是文本对。目的是得到更强大的表征能力。做法是采用RetroMAE的训练策略:先对text X进行随机Mask,然后进行encoding,再额外训练一个light-weight decoder(如单层transformer)进行重构。通过这一过程,强迫encoder学习到良好的embedding。作者认为,解码器结构简单,只有单层transformer,而且输入句子的掩码率很高,会使得解码变得具有挑战性,可以迫使生成高质量的句子嵌入,以便可以以良好的保真度恢复原始输入。在这里插入图片描述

2.general-purpose fine-tuning

预训练模型通过对 C-MTP(无标签)进行对比学习进行微调,以区分配对文本与其负样本。

对比学习的一个关键因素是负样本。没有特意挖掘难负样本,而是纯粹依赖批内负样本,并借助大批次(高达 19,200)来提高嵌入的区分性。

3.Task-specific fine-tuning

BGE适合各种类型的任务,如检索、摘要等等。它们包含的任务类型各异,可能会相互影响。
为了将通用的也能在各类任务中有优异表现,采用了以下两个方法:

  1. 基于指令的微调: 输入数据会被区分,以帮助模型适应不同任务。对于每个文本对 (p,
    q),会在查询侧附加一个特定任务的指令。指令是一个言语提示,明确了任务的性质,例如“为这个句子生成表示以用于检索相关文章:”。
  2. 负样本更新:除了批内负样本,每个文本对 (p, q) 还会挖掘一个难负样本 q’。难负样本从任务的原始语料库中挖掘,遵循了ANN
    风格的采样策略。难负样本通常与目标文本相似,但并不匹配,从而增加了模型的训练难度,提升了模型的区分能力。

自定义微调

官方提供了挖掘难负样本的脚本,是从query召回的top2-100中随机抽取,正样本是top1。
构造好数据集后,就可以继续做特定任务上的微调了。
https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/finetune
也可以使用llama_index微调,可以参考我的http://t.csdnimg.cn/EYs91

微调在 Embeding 模型和 Reranker 模型上使用同类型的数据集,并将语义相关性任务视为二分类任务。使用二分类交叉熵损失(BCE)来训练模型,使其能够在语义相关性任务中区分正负样本。

参考:
1.https://zhuanlan.zhihu.com/p/690856333
2.https://zhuanlan.zhihu.com/p/669596130
3.https://zhuanlan.zhihu.com/p/670277586
4.https://zhuanlan.zhihu.com/p/578747792

这篇关于BGE向量模型架构和训练细节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954885

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus