使用大型语言模型改进文本嵌入Improving Text Embeddings with Large Language Models

本文介绍了一种新颖的文本嵌入技术,通过使用大型语言模型生成合成数据,无需复杂多阶段训练,有效提高性能并扩大上下文长度。实验结果显示,该方法在无标记数据情况下也能在基准测试中取得竞争力,混合合成和标记数据后达到最先进的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Improving Text Embeddings with Large Language Models

https://arxiv.org/html/2401.00368v2

摘要

在本文中,我们介绍了一种新颖而简单的方法,该方法仅使用合成数据和少于 1111k 的训练步骤即可获得高质量的文本嵌入。与现有方法不同,现有方法通常依赖于数十亿个弱监督文本对的多阶段中间预训练,然后使用一些标记数据集进行微调,我们的方法不需要构建复杂的训练管道或依赖手动收集的数据集,这些数据集通常受到任务多样性和语言覆盖率的限制。我们利用专有的 LLM 为近 100 种语言的数十万个文本嵌入任务生成各种合成数据。然后,我们使用标准对比损失对合成数据上的开源解码器专用 LLM 进行微调。实验表明,我们的方法在不使用任何标记数据的情况下,在竞争激烈的文本嵌入基准测试中取得了强大的性能。此外,当使用合成和标记数据的混合进行微调时,我们的模型在 BEIR 和 MTEB 基准上设定了新的最先进的结果。

介绍

文本嵌入是自然语言的向量表示,用于编码其语义信息。它们广泛用于各种自然语言处理(NLP)任务,如信息检索(IR)、问答、语义文本相似性、双文本挖掘、项目推荐等。在IR领域,第一阶段检索通常依赖于文本嵌入,以使用近似最近邻搜索技术从大规模语料库中有效地调用一小组候选文档。基于嵌入的检索也是检索增强生成 (RAG) 的关键组成部分(Lewis 等人,2020 年),这是一种新兴范式,使大型语言模型 (LLM) 能够在不修改模型参数的情况下访问动态外部知识。生成文本的来源归属是文本嵌入的另一个重要应用(Gao et al., 2023),可以提高LLM的可解释性和可信度。

先前的研究表明,预训练词嵌入的加权平均值(Pennington等人,2014;Arora等人,2017)是衡量语义相似性的有力基线。然而,这些方法无法捕获自然语言的丰富上下文信息。随着预训练语言模型的出现(Devlin et al., 2019),Sentence-BERT (Reimers and Gurevych, 2019) 和 SimCSE (Gao et al., 2021) 被提出通过微调自然语言推理 (NLI) 数据集上的 BERT 来学习文本嵌入。为了进一步提高文本嵌入的性能和鲁棒性,E5 (Wang et al., 2022b) 和 BGE (Xiao et al., 2023) 等最先进的方法采用了更复杂的多阶段训练范式,首先在数十亿个弱监督文本对上进行预训练,然后在几个标记数据集上进行微调。

现有的多阶段方法存在一些缺点。首先,它们需要一个复杂的多阶段训练管道,需要大量的工程工作来管理大量的相关性对。其次,它们依赖于手动收集的数据集,这些数据集通常受到任务多样性和语言覆盖范围的限制。例如,Instructor (Su et al., 2023) 仅根据来自330330330330英语数据集的指令进行训练,而 BGE (Xiao et al., 2023) 仅关注英语和中文等高资源语言。此外,大多数现有方法都采用 BERT 风格的编码器作为骨干,忽略了训练更好的 LLM 和上下文长度扩展等相关技术的最新进展(Rozière 等人,2023 年)。

现有的多阶段方法存在一些缺点。首先,它们需要一个复杂的多阶段训练管道,需要大量的工程工作来策划大量的相关性对。其次,它们依赖于手动收集的数据集,这些数据集通常受到任务多样性和语言覆盖范围的限制。例如,Instructor (Su et al., 2023) 仅接受来自 330English 数据集的指令训练,而 BGE (Xiao et al., 2023) 仅关注英语和中文等高资源语言。此外,大多数现有方法都采用 BERT 风格的编码器作为骨干,忽略了训练更好的 LLM 和上下文长度扩展等相关技术的最新进展(Rozière 等人,2023 年)。

在本文中,我们提出了一种新的文本嵌入方法,该方法利用LLM来克服现有方法的局限性。我们使用专有的 LLM 为 93 种语言的各种文本嵌入任务生成合成数据,涵盖数十万个嵌入任务。具体来说,我们使用两步提示策略,首先提示 LLM 集思广益候选任务池,然后提示 LLM 从池中生成以给定任务为条件的数据。为了覆盖各种应用场景,我们针对每种任务类型设计了多个提示模板,并将不同模板生成的数据组合在一起,以提高多样性。对于文本嵌入模型,我们选择微调强大的开源 LLM,而不是小型 BERT 风格的模型。由于像Mistral(江等人,2023)这样的LLM已经在网络尺度数据上进行了广泛的预训练,因此对比预训练几乎没有额外的好处。

我们证明,当仅对合成数据进行微调时,Mistral-7B 在 BEIR (Thakur et al., 2021) 和 MTEB (Muennighoff et al., 2023) 基准测试上具有竞争力。考虑到此设置不涉及任何标记数据,这一点特别有趣。当对合成和标记数据的混合进行微调时,我们的模型获得了新的最先进的结果,大大超过了以前的方法(+2%)。整个训练过程需要不到 1111k 步。

此外,我们通过经验验证,我们的模型可以通过改变位置嵌入的旋转基数,将上下文长度扩展到传统的 512 个令牌限制之外,有效地对高达 32k 个令牌的输入执行个性化的密钥检索。关于其多语言性,我们的模型在高资源语言方面表现出色。然而,对于资源匮乏的语言,仍有改进的余地,因为当前的开源 LLM 没有充分地预先训练它们。

相关工作

文本嵌入是文本的连续低维表示,已广泛应用于各种下游任务,例如信息检索、问答和检索增强生成 (RAG)。关于文本嵌入的早期工作包括潜在语义索引(Deerwester et al., 1990)和词嵌入的加权平均值(Mikolov et al., 2013)。最近的方法利用自然语言推理(Bowman等人,2015)和标记的查询文档对(例如MS-MARCO段落排名数据集(Campos等人,2016)来训练文本嵌入(Reimers和Gurevych,2019;Conneau 等人,2017 年;Gao 等人,2021 年)。然而,标记数据在任务多样性和语言覆盖率方面往往受到限制。为了应对这一挑战,Contriever (Izacard et al., 2021)、OpenAI Embeddings (Neelakantan et al., 2022)、E5 (Wang et al., 2022b) 和 BGE (Xiao et al., 2023) 等方法采用了多阶段训练范式。他们首先使用对比损失对大规模弱监督文本对进行预训练,然后在小规模但高质量的数据集上进行微调。在本文中,我们证明了通过单阶段训练可以获得最先进的文本嵌入。

合成数据 合成数据生成是信息检索研究中一个广泛研究的话题,提出了各种方法,以使用人工创建的数据来增强检索系统。例如,Doc2query (Nogueira et al., 2019)、InPars (Bonifacio et al., 2022) 和 Promptagator (Dai et al., 2022) 为未标记的文档生成合成查询,然后将其用于文档扩展或模型训练。GPL (Wang et al., 2022a) 使用交叉编码器为查询文档对生成伪标签。类似地,Query2doc (Wang et al., 2023) 通过小样本提示 LLM 生成用于查询扩展的伪文档。与这些方法不同,我们的方法不依赖于任何未标记的文档或查询,因此可以生成更多样化的合成数据。

另一个相关的工作重点是通过训练从黑盒LLM生成的合成数据来提炼知识。DINO(Schick 和 Schütze,2021 年)为语义文本相似性生成合成文本对。非自然指令 (Honovich et al., 2022) 是通过提示现有 LLM 来遵循数据集的合成指令。 Orca (Mukherjee et al., 2023) 和 Phi (Gunasekar et al., 2023) 建议通过使用来自 GPT-3.5/4 (OpenAI, 2023) 的高质量合成数据来训练更好的小型语言模型。

大型语言模型 随着 ChatGPT 的普及,大型语言模型 (LLM) 在指令跟随和少量上下文学习方面表现出了非凡的能力(Brown 等人,2020 年)。然而,最先进的 LLM 如 GPT-4(OpenAI,2023 年)是专有的,几乎没有披露技术细节。为了弥合专有和开源 LLM 之间的差距,已经做出了一些值得注意的努力,例如 LLaMA-2(Touvron 等人,2023 年)和 Mistral(江 等人,2023 年)模型。LLMs的一个主要局限性是他们缺乏对最近事件和私人知识的认识。这个问题可以通过使用从外部源检索到的信息来增强 LLM,这种技术称为检索增强生成 (RAG)。另一方面,LLM 也可以作为增强文本嵌入的基础模型。RepLLaMA(马等人,2023)建议使用双编码器架构微调LLaMA-2以进行临时检索。SGPT (Muennighoff, 2022)、GTR (Ni et al., 2022b) 和 Udever (Zhang et al., 2023a) 根据经验证明了文本嵌入的缩放定律,但它们的性能仍然落后于 E5 (Wang et al., 2022b) 和 BGE (Xiao et al., 2023) 等小型双向编码器。在本文中,我们提出了一种新的方法,通过利用LLM和合成数据的最新进展来训练最先进的文本嵌入。

图 1:使用 GPT-4 生成合成数据的两步提示模板示例。我们首先提示 GPT-4 集思广益,列出潜在的检索任务,然后为每个任务生成(查询、正、硬负)三元组。“{...}” 表示一个占位符,该占位符将被一组预定义的值的采样所取代。附录 C 中提供了完整的提示。

方法

3.1 合成数据生成

利用 GPT-4 等高级 LLM 生成的合成数据提供了一个令人信服的机会,尤其是在增强多种任务和语言的多样性方面。这种多样性对于开发强大的文本嵌入至关重要,这些嵌入可以在不同的任务中表现出色,无论是语义检索、文本相似性还是聚类。

为了生成多样化的合成数据,我们提出了一种简单的分类法,将嵌入任务分类为几组,然后对每个组应用不同的提示模板。

非对称任务 此类别包括查询和文档在语义上相关但不是彼此释义的任务。根据查询和文档的长度,我们进一步将非对称任务分为四个子组:短-长匹配、长-短匹配、短-短匹配和长-长匹配。例如,短长匹配任务涉及一个短查询和一个长文档,这是商业搜索引擎中的典型场景。对于每个子组,我们设计了一个两步提示模板,首先提示 LLM 集思广益,列出任务列表,然后生成一个以任务定义为条件的具体示例。在图 1 中,我们显示了短-长匹配子组的示例提示。GPT-4 的输出大多是连贯且高质量的。在我们的初步实验中,我们还尝试使用单个提示生成任务定义和查询文档对,但数据多样性不如所提出的两步法令人满意。

对称任务 对称任务涉及具有相似语义但表面形式不同的查询和文档。我们研究了两种应用场景:单语语义文本相似性(STS)和双文本检索。我们为每个场景设计了两个不同的提示模板,根据其特定目标量身定制。由于任务定义简单明了,因此我们省略了对称任务的头脑风暴步骤。

为了进一步提高提示的多样性,从而提高合成数据的多样性,我们在每个提示模板中合并了几个占位符,其值在运行时随机采样。例如,在图 1 中,“{query_length}”的值是从集合“{少于 5 个单词,5-10 个单词,至少 10 个单词}”中采样的。

为了生成多语言数据,我们从 XLM-R 的语言列表中抽取了“{language}”的值(Conneau et al., 2020),赋予高资源语言更多的权重。在解析过程中,任何不符合预定义 JSON 格式的生成数据都将被丢弃。我们还会根据精确的字符串匹配来删除重复项。

3.2 训练

未完待续!

### Chain-of-Thought Prompting Mechanism in Large Language Models In large language models, chain-of-thought prompting serves as a method to enhance reasoning capabilities by guiding the model through structured thought processes. This approach involves breaking down complex problems into simpler components and providing step-by-step guidance that mirrors human cognitive processing. The creation of these prompts typically includes selecting examples from training datasets where each example represents part of an overall problem-solving process[^2]. By decomposing tasks into multiple steps, this technique encourages deeper understanding and more accurate predictions compared to traditional methods. For instance, when faced with multi-hop question answering or logical deduction challenges, using such chains allows models not only to generate correct answers but also articulate intermediate thoughts leading up to those conclusions. Such transparency facilitates better interpretability while improving performance on various NLP benchmarks. ```python def create_chain_of_thought_prompt(task_description, examples): """ Creates a chain-of-thought prompt based on given task description and examples. Args: task_description (str): Description of the task at hand. examples (list): List containing tuples of input-output pairs used for demonstration purposes. Returns: str: Formatted string representing the final prompt including both instructions and sample cases. """ formatted_examples = "\n".join([f"Input: {ex[0]}, Output: {ex[1]}" for ex in examples]) return f""" Task: {task_description} Examples: {formatted_examples} Now try solving similar questions following above pattern. """ # Example usage examples = [ ("What color do you get mixing red and blue?", "Purple"), ("If it rains tomorrow, will we have our picnic?", "No") ] print(create_chain_of_thought_prompt("Solve logic puzzles", examples)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值