[大语言模型-论文精读] 阿里巴巴-通过多阶段对比学习实现通用文本嵌入

embedded/2024/12/22 18:56:01/

[大语言模型-论文精读] 阿里巴巴达摩院-GTE-通过多阶段对比学习实现通用文本嵌入

1. 论文信息

在这里插入图片描述
这篇论文《Towards General Text Embeddings with Multi-stage Contrastive Learning》介绍了一种新的文本嵌入模型,名为GTE(General-purpose Text Embedding Model),它通过多阶段对比学习进行训练。
在这里插入图片描述

2. 研究背景与动机:

  • 文本嵌入在自然语言处理(NLP)任务中非常重要,例如文本分类、检索、问答和对话系统。
  • 近年来,大型语言模型(LLMs)的出现推动了对文本表示的进一步研究。
  • 现有的文本嵌入模型通常专注于特定任务,缺乏通用性。

3. 技术挑战:

  • 如何构建一个能够处理多种下游任务的统一文本表示模型。
  • 以往的训练策略或模型可能不适用于其他任务。
  • 现有的研究依赖于内部数据进行预训练,限制了模型的通用性和可访问性。

4. 解决方案:

  • 提出了一种新的文本嵌入模型GTE,通过多阶段对比学习进行训练。
  • 在无监督预训练阶段,使用从多个数据源收集的大规模文本对进行训练。
  • 在有监督微调阶段,使用人工标注的高质量文本对进行训练。

论文中的"Approach"部分详细介绍了GTE模型的训练过程和架构。以下是对这一部分的详细解析:

4.1 Model Architecture(模型架构)

GTE模型的骨干网络是一个深度的Transformer编码器,可以初始化为像BERT这样的预训练语言模型。模型采用的是传统的双编码器架构,并且在语言模型产生的上下文化token表示之上应用了均值池化。具体步骤如下:

  1. 文本表示:给定一段文本,模型首先使用预训练的语言模型获取深度上下文化的token表示。
  2. 均值池化:然后应用轻量级的均值池化来获取文本的总体表示。
    h = L M ( x ) ∈ R n × d x = 1 n ∑ i = 1 n h i ∈ R d \mathbf{h} = LM(x) \in R^{n \times d} \\ \mathbf{x} = \frac{1}{n} \sum_{i=1}^{n}\mathbf{h}_{i} \in R^{d} h=LM(x)Rn×dx=n1i=1nhiRd

4.2 Unsupervised Pre-training Data(无监督预训练数据)

在无监督预训练阶段,GTE模型使用从多个数据源提取的大规模文本对进行训练。这些数据源包括网页、学术论文、社区问答、社交媒体、知识库和代码库等。无监督预训练的目的是让模型学会区分语义相关的文本对和无关的文本对。

4.3 Supervised Fine-tuning Data(有监督微调数据)

在有监督微调阶段,GTE模型使用人工标注的文本对进行训练。这些数据涵盖了多种任务和领域,如网页搜索、开放域问答、自然语言推理、事实验证和释义等。微调的目的是进一步提升模型在特定任务上的性能。

4.4 Training Details(训练细节)

  • 数据采样:为了处理不同数据源之间的不平衡,论文中采用了多项式分布来从不同的数据源中采样数据批次。
  • 改进的对比损失:论文提出了一种改进的对比学习目标,它不仅使用了批次内的文档作为负样本,还结合了批次内的查询和文档。
  • 训练和评估:模型的训练包括两个阶段,分别是无监督对比预训练和有监督对比微调。在预训练阶段,使用大批量大小和多种优化技术来提高模型性能。在微调阶段,使用较小的批量大小和较长的序列长度来处理更长的文本。

关键点总结:

  • 双编码器架构:GTE模型使用传统的双编码器架构,通过均值池化获取文本表示。
  • 多阶段训练:包括无监督预训练和有监督微调两个阶段,利用了大规模的文本对数据。
  • 改进的对比学习:提出了一种改进的对比学习目标,扩大了负样本池。
  • 大规模数据采样:使用多项式分布进行数据采样,以处理数据不平衡问题。

5. 实验设置:

  • 在多个文本嵌入基准上评估GTE模型,包括MS MARCO、Natural Questions、TriviaQA等。
  • 还评估了模型在CodeSearchNet基准上的代码搜索能力,涵盖六种编程语言。

6. 结果:

  • GTE模型在多个基准测试中取得了优异的性能,即使在相对较少的参数(110M)下也超过了现有的嵌入模型。
  • 在没有针对每种编程语言进行单独微调的情况下,GTE模型在代码搜索任务上也表现出色。

7. 潜在应用:

  • 提升信息检索系统、问答系统、文本分类和文本聚类等任务的性能。
  • 作为研究社区在文本和代码嵌入方面的强大基准。

8. GTE与BERT的对比

GTE模型(General-purpose Text Embedding model)与BERT(Bidirectional Encoder Representations from Transformers)在设计和训练目标上有一些关键的差异:

  1. 训练目标和方法

    • BERT:BERT是一种基于Transformer的预训练语言模型,它通过masked language modeling(MLM)和next sentence prediction(NSP)任务进行训练。BERT的目标是学习文本的深层双向表示。
    • GTE:GTE模型专门针对文本嵌入进行训练,使用多阶段对比学习的方法。在无监督预训练阶段,GTE使用从网络上挖掘的大量文本对进行训练;在有监督微调阶段,使用人工标注的文本对进行训练,以提高嵌入的质量。
  2. 应用焦点

    • BERT:BERT旨在提供一个通用的文本表示,适用于各种下游NLP任务,如文本分类、命名实体识别、问答等。
    • GTE:GTE专注于生成高质量的文本嵌入,特别适用于需要文本相似性或检索任务的场景,如信息检索、文本聚类和代码搜索。
  3. 训练数据

    • BERT:BERT通常在大型的多领域文本数据集上进行预训练,如BookCorpus和English Wikipedia。
    • GTE:GTE在预训练阶段使用了更多样化的数据源,包括来自网页、学术论文、社交媒体、问答论坛等多种类型的文本对。
  4. 模型规模和效率

    • BERT:BERT有多种规模的模型,从较小的BERT-Mini到较大的BERT-Large,参数数量可以从1亿到3亿不等。
    • GTE:GTE模型虽然参数数量相对较少(例如110M参数的GTEbase版本),但通过多阶段对比学习,实现了与更大模型相媲美的性能。
  5. 微调策略

    • BERT:BERT模型通常在特定任务的数据集上进行微调,以适应该任务的需求。
    • GTE:GTE模型在有监督的微调阶段,使用了人工标注的高质量文本对,这些文本对来自多个不同的任务和领域。

总的来说,GTE模型在设计上更注重生成用于检索和相似性比较的高质量文本嵌入,而BERT则提供了一个通用的文本表示学习框架,适用于广泛的NLP任务。GTE通过特定的多阶段对比学习方法,在文本嵌入的质量上取得了显著的改进。


http://www.ppmy.cn/embedded/121204.html

相关文章

过滤器 Filter 详解

想象一下,你正在搭建一个网站,用户需要登录才能访问某些页面。你肯定不希望未经授权的用户能够随意浏览或修改重要信息,这时,你就需要一个“安全门”来保护你的网站,而 Java Filter 就是扮演这个角色的最佳人选&#x…

MFC工控项目实例二十一型号选择界面删除参数按钮禁用切换

承接专栏《MFC工控项目实例二十手动测试界面模拟量输入实时显示》 对于禁止使用的删除、参数按钮,在选中列表控件选项时切换为能够使用。 1、在TypDlg.h文件中添加代码 #include "ShadeButtonST.h" #include "BtnST.h" class CTypDlg : publi…

RabbitMQ 实验入门

使用 spring-amqp 实验 发布订阅模型 fanoutExchange 实验 实验步骤: 编写定义 队列 和 交换机 绑定关系的代码创建接口,模拟生产者,方便调试(接受参数 队列名、路由键、[消息])定义消费者 代码示例: C…

[leetcode刷题]面试经典150题之9python哈希表详解(知识点+题合集)

为了方便理解哈希表,我们先从python中的字典讲起。 字典 (Dictionary) 字典是 Python 中一种内置的数据结构,它是一种 键值对(key-value pair)存储形式。每个键(key)都有一个对应的值(value&a…

XPath基础知识点讲解——用于在XML中查找信息的语言

1. 什么是XPath? XPath(XML Path Language)是用于在XML(Extensible Markup Language)文档中查找信息的语言。它可以通过路径表达式来选择XML文档中的节点,类似于如何在文件系统中使用路径查找文件。XPath是…

C语言、Eazy_x——井字棋

#include<graphics.h>char board_data[3][3] { { -,-,-},{ -,-,-},{ -,-,-}, };char current_piece o;//检测指定棋子玩家是否获胜 bool CheckWin(char c) {if (board_data[0][0] c && board_data[0][1] c && board_data[0][2] c)return true;if (…

【Kubernetes】常见面试题汇总(四十三)

目录 98. kube-apiserver 和 kube-scheduler 的作用是什么&#xff1f; 99.您对云控制器管理器了解多少&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;…

【MAUI】CommunityToolkit社区工具包介绍

一、为什么需要声明式开发 .NET的MVVM,始于WPF,很古典,它甚至可能是现代前端框架“声明式开发”的鼻祖。声明式开发,之所以出现,是因为命令式开发在UI层和代码层上无法解耦的问题。如下图所示: 1、命令式开发:后台代码需要调用UI层的控件(label.Text),如果更新UI层…