NLP-预训练模型-202302-NLU:BGE (BAAI General Embedding) 【包含Embedder、Reranker】【专注RAG】【隶属FlagEmbedding】【智源】

BGE (BAAI General Embedding) 专注于检索增强llm领域,目前包括以下项目:

智源 发布了其开源的中英文语义向量(embedding)模型BGE,此模型在多个重要指标上均超越了其他同类模型。

相关代码开源在FlagEmbedding项目下,这是一个专注于Embedding技术和模型的项目

为了进一步评估中文语义向量的性能,智源团队还推出了全新的中文评测基准C-MTEB。

embedding模型的应用:

  • embedding模型可以将各种数据(语言、图片等)转化为向量,并使用向量之间的距离来衡量数据的相关性。
  • 大模型时代,这种技术有助于解决大模型在回答问题时可能出现的问题,可以帮助大模型获取最新的知识。
  • OpenAI、Google、Meta等大厂也都推出了自己的语义向量模型和API服务,催生了大量的应用和工具,如LangChain、Pinecone等。

BGE模型特点:

  • BGE模型在语义检索精度和整体表征能力上都表现出色,超过了OpenAI的text embedding 002等模型。
  • 虽然性能出色,BGE模型的参数量却很小,这使得它在使用时成本更低。

C-MTEB评测基准: 考虑到中文社区缺乏全面的评测基准,智源团队特意发布了C-MTEB,这是一个全面的中文语义向量评测基准,涵盖了6大类评测任务和31个数据集。所有的测试数据和代码也都已开源。

BGE的技术亮点:

  • 高效预训练和大规模文本微调;
  • 在两个大规模语料集上采用了RetroMAE预训练算法,进一步增强了模型的语义表征能力;
  • 通过负采样和难负样例挖掘,增强了语义向量的判别力;
  • 借鉴Instruction Tuning的策略,增强了在多任务场景下的通用能力。

RetroMAE预训练

主要思想是encoder用小一点的mask rate得到sentence embedding,然后decoder用大一点的mask rate结合encoder得到的sentence embedding进行重构

此外,为了使得每个token使用的context信息不同,RetroMAE还使用了增强解码的方法

微调

主要通过对比学习和Instruction Tuning的思想

对比学习是一种训练模型的方法,通过比较正例和反例来学习数据的表示。

  • 输入数据的格式:模型接受三元组格式的数据作为输入,包括一个查询(query),一个正例(positive),和一个反例(negative)。
  • in-batch negatives 策略:除了上述三元组中的反例外,他们还采用了“in-batch negatives”策略,意思是在同一个批次的数据中,使用其他数据作为额外的反例。
  • cross-device negatives sharing method:这是一种在不同的GPU之间共享反例的方法,目的是大大增加反例的数量。
  • 训练硬件和参数:使用了48个A100(40G)的GPU进行训练。批次大小为32,768,因此每个查询在批次中有65,535个反例。使用了AdamW优化器,学习率为1e-5。对比损失的温度为0.01。

在训练中为检索任务的查询添加了instruction。 对于英语,指令是Represent this sentence for searching relevant passages: ; 对于中文,指令是为这个句子生成表示以用于检索相关文章:. 在评测中,针对段落检索任务的任务需要在查询中添加指令,但不需要为段落文档添加指令。


什么是FlagEmbedding?

FlagEmbedding 能将任意文本映射为低维稠密向量,以用于检索、分类、聚类或语义匹配等任务,并可支持为大模型调用外部知识。

论文:https://arxiv.org/pdf/2309.07597.pdf

代码:https://github.com/FlagOpen/FlagEmbedding

参考资料

【transformers二次开发——(定义自己的数据加载器 模型 训练器)bge模型微调流程】 https://www.bilibili.com/video/BV1eu4y1x7ix/?share_source=copy_web&vd_source=97da61a87d5a14ca15b351252ae0f105

代码结构

https://github.com/FlagOpen/FlagEmbedding拉取代码,代码结构如下(在linux中查看结构的命令:tree -d):

我大致跑了两个部分的代码:baai_general_embedding和reranker。

环境安装

按照readme的说明,首先创建一个conda虚拟环境,然后拉取源码后,通过pip install -e .来安装BGE包。这种方法的好处是可以方便地修改源代码,更好地用于调试、开发。

baai_general_embedding

我们先跑一遍baai_general_embedding中finetune的流程。

关于baai_general_embedding中finetune的readme文档,位于路径examples/finetune下。

config.json配置

如果是在命令行运行代码来执行微调,则运行命令是(在FlagEmbedding路径下执行)

torchrun --nproc_per_node {number of gpus} \
-m FlagEmbedding.baai_general_embedding.finetune.run \
--output_dir {path to save model} \
--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 {large batch size; set 1 for toy data} \
--dataloader_drop_last True \
--normlized True \
--temperature 0.02 \
--query_max_len 64 \
--passage_max_len 256 \
--train_group_size 2 \
--negatives_cross_device \
--logging_steps 10 \
--query_instruction_for_retrieval "" 

如果我想要在vscode调试这行代码,应该在config.json中如下设置:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "/opt/conda/envs/bge/lib/python3.9/site-packages/torch/distributed/launch.py",
            // "program": "run.py",
            "console": "integratedTerminal",
            "cwd": "/home/notebook/code/personal/aigc/bge/FlagEmbedding",
            "args": [
                "--nproc_per_node=2",
                "-m","FlagEmbedding.baai_general_embedding.finetune.run",
                "--output_dir","/home/notebook/code/personal/aigc/bge/FlagEmbedding/myresult",
                "--
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值