LLM-Embedder

2023-10-28 04:12
文章标签 llm embedder

本文主要是介绍LLM-Embedder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 目标

训出一个统一的embedding模型LLM-Embedder,旨在全面支持LLM在各种场景中的检索增强

2. 模型的四个关键检索能力

  • knowledge:解决knowledge-intensive任务
  • memory:解决long-context modeling
  • example:解决in-context learning(上下文学习)
  • tool:解决tool learning

3. 要解决的问题

  • 嵌入模型必须优化其对LLM的最终检索增强影响,而不是仅仅关注中间检索结果
  • 不同的检索任务旨在捕捉不同的语义关系,它们的影响可能受到相互干扰

4. base model

是在BAAI/bge-base-en的基础上训练的

5. 训练数据

  • Question Answering
    • MSMARCO(labeled)
    • Natural Questions(labeled)
  • Conversational Search
    • QReCC(labeled)
  • Tool Learning
    • ToolLLM(labeled)
  • Instruction Tuning
    • FLAN(Non-labeled)
    • UPRISE(Non-labeled)
  • Generation
    • Multi-Session Chat(Non-labeled)
    • Books3(Non-labeled)
    • ArXiv(Non-labeled)
    • CodeParrot(Non-labeled)

6. 数据格式

training

{"query": str,"pos": List[str],"neg": List[str],"pos_index": Optional[List[int]],         # 正样本在语料库里面的索引,如果没有全局语料库,则忽略"neg_index": Optional[List[int]],         # 负样本在语料库里面的索引,如果没有全局语料库,则忽略 "teacher_scores": Optional[List[float]],  # 一个LM或者一个reranker的分数,被用来进行蒸馏"answers": Optional[List[str]],           # List of answers for the query, used for LM scoring.
}

evaluation

{"query": str,"pos_index": Optional[List[int]],         # Indices of the positives w.r.t. corpus (retrieval) / w.r.t. keys (rerank). When there is no positives pre-defined (e.g. NQ), just ignore this field."answers": Optional[List[str]],           # List of answers for computing NQ metrics."key": Optional[List[str]],               # Collated retrieval results for the query / candidates to rank when there are no positives and negatives."key_index": Optional[List[int]],         # Key indices w.r.t. the corpus when reranking and no positives & negatives.
}

7. 训练方法

(主要是Reward from LLM,Instruction-based Fine-Tuning,Homogeneous In-Batch Negative Sampling和Stabilized Distillation四个关键技术)

  • Reward from LLM

    • 除了数据集中的hard labels,这里还将LLM的输出作为reward,这些reward可以作为soft labels

    • (1)式中C为一个检索到的候选,也就是一个中间结果,O是期望的LLM的输出,一个候选的reward被表示为 r C ∣ O r_{C|O} rCO o i o_i oi表示期望输出的第i个token, O : i − 1 O_{:i-1} O:i1表示期望输出的前i-1个token

    • LLM reward的使用范围:问答(Question Answering),指令调整(Instruction Tuning),生成(Generation);在会话搜索(conversational search) 和 工具学习数据集(tool learning datasets)上不适用,因为在这些情况下对LLM的输出没有明确的期望

    • 使用对比学习(contrastive learning)的方法去抓取hard labels所反应的语义关系,用知识蒸馏(knowledge distillation)的方法从LLM生成的soft reward中学习

  • 对比学习

    • 与一般的对比学习差不多,但为了提高embedding在不同应用场景中的辨别能力在对比学习框架中采用了几个关键设计:
      • Instruction-based Fine-Tuning:给每一个任务设计了一个对应的instruction,计算embedding的时候将instruction和query合在一起计算: e q ← e n c o d e ( [ I t , q ] ) e_q\gets encode([I_t, q]) eqencode([It,q])
      • Homogeneous In-Batch Negative Sampling:使用了cross-device sharing,在这个方法里负样本一共有 B × K × N − 1 B\times K\times N-1 B×K×N1个负样本,B是batch_size,K是GPU的数量,N是所有正样本和hard negative样本的数量。但是不同任务的数据会互相影响导致模型分辨能力下降,所以为了解决这一限制,引入了一种用于组织训练数据的正则化策略,其中来自同一任务的数据实例被分组为连续的小批量,该策略使大多数批内负样本来自同一数据集(即同质负样本),从而增强嵌入对每个特定任务的判别能力
  • 知识蒸馏

    • 使用KL散度来最小化使用LLM奖励计算的候选分布与嵌入模型预测的候选分布之间的差距。对于每个query q q q都有一个候选列表 P : [ p 1 , ⋯ , p N ] \mathcal P:[p_1,\cdots,p_N] P:[p1,,pN],然后通过公式(1)获得大模型对候选的奖励,表示为 R : [ r 1 , ⋯ , r N ] R:[r_1,\cdots,r_N] R:[r1,,rN],为了使得大模型的rewards适合蒸馏,将每个reward转化为标准化的权重: w i ← s o f t m a x R ( r i / α ) w_i\gets softmax_R(r_i/\alpha) wisoftmaxR(ri/α),其中 α \alpha α表示温度系数

    • 简单理解就是rewards越大( w i w_i wi越大)越好,query和正样本的相似度越大越好( e x p ( ⟨ e q , e p ⟩ ) / τ exp(\big\langle e_q, e_p \rangle\big)/\tau exp(eq,ep)/τ越大),query和负样本的相似度越小越好( ∑ p ′ ∈ P e x p ( ⟨ e q , e p ′ ⟩ ) / τ \sum_{p\prime \in \mathcal P} exp(\big\langle e_q, e_p\prime \rangle\big)/\tau pPexp(eq,ep)/τ越小)

    • 由于来自不同任务的不同训练样本,LLM的奖励幅度可能表现出高度波动,导致训练效果不好

    • 为了解决多任务场景下reward的波动问题,提出Stabilized Distillation

      • 基于LLM的rewards R : [ r 1 , ⋯ , r N ] R:[r_1,\cdots,r_N] R:[r1,,rN],我们将候选从高到低排序,这样就生成了一个新的候选集,定义为 P : [ p 1 , ⋯ , p N ] \mathbb P:[p_1,\cdots,p_N] P:[p1,,pN],其中 r i ≥ r i + 1 r_i\ge r_{i+1} riri+1。在上面的式子中 P \mathbb P P由两部分组成:排名比 p i p_i pi低的候选 [ p i + 1 , ⋯ , p N ] [p_{i+1},\cdots,p_N] [pi+1,,pN]以及in-batch negative samples
      • 这个调整过的公式从两方面来稳定波动的rewards:一方面,该模型经过持续的训练以促进 p i p_i pi 与排名较低的同一个候选集的item [ p i + 1 , ⋯ , p N ] [p_{i+1},\cdots,p_N] [pi+1,,pN]进行比较, 这意味着,无论rewards的绝对价值如何,模型都能够从LLM的偏好中学习;另一方面,当排名第一的候选比其他候选获得明显更高的reward时,权重将变成one-hot,在这种情况下,提取过程将简化为对比学习的形式,排名第一的候选将被视为正样本。
      • 简单理解就是:一方面我们拿到的负样本中的 [ p i + 1 , ⋯ , p N ] [p_{i+1},\cdots,p_N] [pi+1,,pN]部分都是在LLM给出的reward比正样本低的,这样避免了出现负样本reward比正样本要高的情况,减少了波动;另一方面当排名第一的候选比其他候选获得明显更高的reward时,式子就变成了:
        m i n − l o g e x p ( ⟨ e q , e i ⟩ ) / τ ∑ p ′ ∈ P e x p ( ⟨ e q , e p ′ ⟩ ) / τ min -log \frac{exp(\big\langle e_q, e_i \rangle\big)/\tau}{\sum_{p\prime \in \mathbb P} exp(\big\langle e_q, e_p\prime \rangle\big)/\tau} minlogpPexp(eq,ep)/τexp(eq,ei)/τ

8. LLMs的检索增强

  • Knowledge Enhancement:将知识语料库里面的文档进行编码并存入向量数据库中,在许多情况下对于用户提出的问题可以直接查用于查询向量数据库,在其他情况下生成过程中的上下文可以用作查询,然后在大模型里用[knowledge, query] → answer方式得到答案

  • Long-Context Modeling:当处理长上下文时,可以对整个历史进行分块、编码,并将其加载到向量数据库中,生成过程中的上下文可用于查询向量数据库中的相关chunk。在很多情况下查询到的相关chunk比如chunk_i以及其后面的chunk_i+1都会被用来增强记忆,因为后续的chunk对生成下文来说可能更为关键。[retrieved chunks, current context] → new generation.

  • In-context Learning(上下文学习):演示示例以“((task instruction, expected output)”的形式组织,可以在向量数据库中进行编码和预存。当给出一个新任务时,该任务的指令(instruction)用于查询向量数据库,检索到的示例与任务的指令相连接,在此基础上可以进行上下文学习。[retrieved examples, instruction] → response.

    In-context Learning的示例:

    • Few shot(示例出现多个)):6+7=13,6+6=12,5+5=10,8+9=?
    • One shot(示例出现一个)): 5+5=10,8+9=?
    • Zero shot(示例没有出现)): 8+9=?
  • Tool Learning:该工具的功能可以用语言描述,并与其API配对:“(description,API)”,这样向量数据库就可以根据被编码的description来管理一个庞大的工具包,考虑到涉及工具使用的用户请求,可以对该用户请求进行编码并用于查询向量DB。[user request, tool’s execution result] → generation

9. 论文中四个关键技术的工程实现

  • Reward from LLM
    • 通过给case选择正负样本实现,因为正负样本都通过计算LLMs的输出logits和label的交叉熵给出了分数,所以根据分数选择更好的正负样本就实现了Reward from LLM
  • Instruction-based Fine-Tuning
    • 通过给query和正负样本添加instruction实现
  • Homogeneous In-Batch Negative Sampling
    • 记录每种task数据的index范围,然后只在每种task的index范围内进行shuffle,然后在训练的时候将相同task的数据分到一个batch里面
  • Stabilized Distillatio
    • 跟据teacher_scores(即LLM给样本的打分)对负样本进行排序,选择分数较低的一部分样本作为负样本

论文链接
项目的github地址

这篇关于LLM-Embedder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

LLM应用实战: 产业治理多标签分类

数据介绍 标签体系 产业治理方面的标签体系共计200+个,每个标签共有4个层级,且第3、4层级有标签含义的概括信息。 原始数据 企业官网介绍数据,包括基本介绍、主要产品等 企业专利数据,包括专利名称和专利摘要信息,且专利的数据量大。 LLM选型 经调研,采用Qwen2-72B-Instruct-GPTQ-Int4量化版本,占用显存更少,且效果与非量化相当,

LLM大模型教程:langchain 教程

软件安装 pip install pymupdfpip install langchainpip install langchain-cliconda install -c pytorch -c nvidia faiss-gpu=1.7.4 mkl=2021 blas=1.0=mkl 由于langchain不支持qwen模型,我们需要自定义模型 from typing import A

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torchimport tiktokenfrom wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果可用),否则使用CPU#

[论文笔记] LLM大模型剪枝篇——2、剪枝总体方案

https://github.com/sramshetty/ShortGPT/tree/main My剪枝方案(暂定):         剪枝目标:1.5B —> 100~600M         剪枝方法:                 层粒度剪枝                 1、基于BI分数选择P%的冗余层,P=60~80                 2、对前N%冗余层,

jmeter压力测试,通过LLM利用RAG实现知识库问答,NEO4J部署,GraphRAG以知识图谱在查询时增强提示实现更准确的知识库问答(9/7)

前言         这周也是杂七杂八的一天(高情商:我是一块砖,哪里需要往哪里搬),首先是接触了jemter这个压力测试工具,然后帮公司的AIGC项目编写使用手册和问答手册的第一版,并通过这个平台的智能体实现知识库问答的功能展示,以及部分个人扩展和思考(NEO4J创建知识图谱的GraphRAG)。 Jmeter         Jmeter是一个压力测试工具,一开始导师叫我熟悉的时候我还说

下载量10w+!LLM经典《大型语言模型:语言理解和生成》pdf分享

介绍 近年来,人工智能在新语言能力方面取得了显著进展,深度学习技术的快速发展推动了语言AI系统在文本编写和理解方面的表现。这一趋势催生了许多新功能、产品和整个行业的兴起。 本书旨在为Python开发者提供实用工具和概念,帮助他们利用预训练的大型语言模型的能力,如拷贝写作、摘要等用例;构建高级的LLM流水线来聚类文本文档并探索主题;创建超越关键词搜索的语义搜索引擎;深入了解基础Transfo

深入解析五大 LLM 可视化工具:Langflow、Flowise、Dify、AutoGPT UI 和 AgentGPT

近年来,大语言模型(LLM)技术的迅猛发展推动了智能代理(Agent)应用的广泛应用。从任务自动化到智能对话系统,LLM 代理可以极大简化复杂任务的执行。为了帮助开发者更快地构建和部署这些智能代理,多个开源工具应运而生,尤其是那些提供可视化界面的工具,让开发者通过简单的图形界面设计、调试和管理智能代理。 本文将详细介绍五款热门的 LLM 可视化工具,分别是 Langflow、Flowise、Di

基于LangChain+LLM的相关技术研究及初步实践

01 概述 大模型概述 大模型是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能,能够处理更加复杂的任务和数据。大模型在各种领域都有广泛的应用,包括自然语言处理、计算机视觉、语音识别和推荐系统等。大模型通过训练海量数据来学习复杂的模式和特征,具有更强大的泛化能力,可以对未见过的数据