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

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

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 应