论文阅读:Making Large Language Models A Better Foundation For Dense Retrieval

news2024/11/21 2:35:20

论文链接

Abstract

密集检索需要学习区分性文本嵌入来表示查询和文档之间的语义关系。考虑到大型语言模型在语义理解方面的强大能力,它可能受益于大型语言模型的使用。然而,LLM是由文本生成任务预先训练的,其工作模式与将文本表示为嵌入完全不同。因此,必须研究如何正确地调整LLM,以便它们能够有效地初始化为密集检索的骨干编码器。
在本文中,我们提出了一种新的方法,称为LLaRA(适用于密集检索的LLM),它作为LLM的后验自适应,用于密集检索应用。LLaRA由两个前置任务组成:基于嵌入的自动编码(EBAE)和基于嵌入的自回归(EBAR),其中来自LLM的文本嵌入分别用于重构输入句子的标记和预测下一个句子的标记。LLaRA被证明是简单、轻便和高效的。它被应用于维基百科语料库上的LLaMA-2-7B(基础),在那里它大大提高了模型在各种密集检索基准上的微调性能,如MSMARCO和BEIR。我们的模型和代码将在BGE存储库中公开。

1. Introduction

密集检索是深度神经网络提出的一种新的检索范式。与传统的IR方法不同,密集检索学习将查询和文档表示为同一潜在空间内的嵌入,其中查询和文档之间的语义关系可以通过嵌入相似性来反映。如今,密集检索已经是许多现实应用中的重要组成部分,比如网页搜索和开放域问答。

密集检索的质量受到其骨干编码器容量的严重影响。在过去的几年里,预训练的语言模型,例如BERT、RoBERTa、T5,被广泛应用于查询和文档的表示。实验发现,模型大小和训练规模的扩展可以显著提高密集检索的准确性和通用性。

最近,大型语言模型(LLM)被作为许多经典NLP任务的通用解决方案进行了微调。考虑到LLM在语义理解方面的卓越能力,利用这种强大的模型进行密集检索也很有希望。事实上,在这个方向上已经有了开创性的努力,LLM被提示或微调以生成判别嵌入,从而促进密集检索。

尽管取得了初步进展,但要充分释放LLM在密集检索应用中的潜力仍然很困难。特别地,LLM通过文本生成进行预训练,学习文本生成的嵌入来预测下一个token。因此,LLM的输出嵌入将主要集中于捕获上下文的局部和未来的语义。然而,密集检索需要嵌入来表示整个上下文的全局语义。如此大的差异将严重限制LLM在密集检索中的直接应用。

为了解决上面提到的问题,我们提出了一个新的方法,名叫LLaRA(如Figure 1),它作为LLM的后验自适应,以提高它们的密集检索能力。LLaRA可以看作是无监督生成预训练的一个扩展训练阶段。通过适当设计的文本前置任务,它旨在增强LLM,使其能够生成用于全局上下文语义表示的文本嵌入。

在这里插入图片描述
特别是LLaRA引入了两个前置训练任务:EBAE(Embedding Based Auto Encoding)和EBAR(Embedding-Based Auto Regression)。在EBAE中,LLM被提示生成文本嵌入,该文本嵌入可用于预测输入句子本身的token。而使用EBAR时,LLM会被提示生成文本嵌入,该嵌入可用于预测下一个句子的token。通过从上述前置任务中学习,可以将LLM的文本嵌入从局部语义表示(即对下一个标记的预测)调整为全局语义表示(例如对句子级特征的预测)。有了这两个不同的提示模板,LLM的嵌入能力可以区分开来,以处理不同的语义匹配场景,例如相似性搜索(使用EBAE的提示)和问答(使用EBAR的提示)。

在LLaRA中,句子级特征的预测是通过LLM的输出嵌入的线性投影进行的,其中不需要额外的解码组件。因此,LLaRA可以直接在现有的生成预训练管道之上实现,并且它导致了极具竞争力的训练效率。此外,不需要收集任何被标记的数据,因为LLaRA完全基于普通语料库进行。

我们使用Wikipedia语料库,应用LLaRA对LLaMA-2-7B进行适应,从而显著提高了LLM的检索质量。在进行了常见的微调操作后,适应良好的模型在各种评估场景中恢复了最先进的性能,例如在MSMARCO上的文章和文档检索,以及在BEIR基准上的零样本检索。

总之,我们在这项工作中做出了以下技术贡献。1) 我们提出了LLaRA,这是第一项将LLM应用于密集检索应用的研究工作。2) LLaRA设计简单但有效。通过对未标记数据执行EBAE和EBAR这两个前置任务,LLaRA大大提高了LLM的检索能力。3) LLM的预训练和微调将花费巨大的成本。为了便于未来在这一领域的研究,我们的模型和源代码将公开。

2. Related Works

密集检索是将查询和文档表示为同一潜在空间内的嵌入,其中可以基于嵌入相似性为查询检索相关文档。如今,它被广泛应用于许多重要的现实世界应用中,如网页搜索、问答和会话系统。密集检索的准确性由其嵌入的质量决定,其中骨干编码器是学习有判别性嵌入的决定性因素。在过去的几年里,预训练语言模型(PLM),如BERT、RoBERTa和T5,被广泛用于查询和文档的编码。得益于大规模的预训练和基于transformer的架构,PLM能够为输入文本生成细粒度的语义表示。此外,研究还发现,随着模型和训练规模的扩大,以及预训练方法的改进,可以进一步提高基于PLM的密集检索的准确性和通用性。

遵循同样的精神,利用LLM不断扩大骨干编码器是一个自然的举措。LLM的使用在许多方面都是有前景的。值得注意的是,考虑到LLM强大的语义理解能力,它可以大大有助于复杂查询和文档的建模。此外,考虑到LLM的上下文长度大大扩展,它为构建文档级检索器提供了直接的基础。由于LLM具有前所未有的通用性和指令跟随能力,它也有利于多任务嵌入模型的学习。最近,已经有几项工作对应用LLM作为密集检索的骨干编码器进行了初步的努力。然而,现有的方法只是直接使用LLM。由于文本生成和文本嵌入任务之间的巨大差异,LLM可能还有许多未被发掘的潜力。事实上,如何将LLM作为密集检索应用的更好的基础模型,还有待研究。

3. Methodology

3.1 初步的

密集检索利用文本嵌入模型来生成查询和文档的嵌入: e q e_q eq e d e_d ed。查询和文档的相关性通过它们的嵌入相似性来反映: < e q , e d > <e_q, e_d> <eq,ed>。因此,可以通过embedding空间内的ANN搜索来检索查询( D q D_q Dq)的相关文档:

D q ← T o p − k ( { d : < e q , e d > ∣ D } ) D_q \gets Top-k(\{d:<e_q, e_d>|D\}) DqTopk({d:<eq,ed>D})

预训练语言模型曾经是嵌入模型的骨干编码器。以BERT为例。输入文本被标记为序列T: [ C L S ] , t 1 , … , t N , [ E O S ] [CLS],t1, \dots, tN,[EOS] [CLS]t1,,tN,[EOS]。然后,通过BERT对标记化序列(tokenized sequence)进行编码,其中输出嵌入被集成为文本嵌入。执行集成有两个常用选项:[CLS]或平均池化:

e t ← B E R T ( T ) [ C L S ] e_t \gets BERT(T)[CLS] etBERT(T)[CLS]

e t ← A V G ( B E R T ( T ) ) e_t \gets AVG(BERT(T)) etAVG(BERT(T))

当使用大型语言模型(LLM)作为骨干编码器时,文本嵌入需要以不同的方式生成。考虑到现有的LLM主要采用仅解码器的架构,全局上下文只能通过输入序列末尾的token来获取。因此,特殊标记 ⟨ ∖ s ⟩ ⟨\setminus s⟩ s或[EOS]的输出嵌入被用作文本嵌入。以LLaMA为例,我们有以下更新的文本嵌入形式:

e t ← L L a M A ( T ) [ < ∖ s > ] e_t \gets LLaMA(T)[<\setminus s>] etLLaMA(T)[<s>]

3.2 LLaRA

尽管LLM中的最后一个token可以在给定仅解码器的架构的情况下处理整个上下文,但其输出嵌入并不是输入文本的合适表示。这是因为LLM是通过文本生成进行预训练的,其中每个token的嵌入用于预测其下一个token。换句话说,LLM的输出嵌入侧重于捕获局部和不久的将来(near-future)的语义,而不是全局上下文的语义。

  • 目标: 为了解决上述问题,我们提出了LLaRA(适用于检索的LLM),用于LLM的面向检索的自适应。LLM的文本嵌入有望通过自适应过程实现两个特性。
    • 文本嵌入需要表示全局上下文的语义。
    • 全局上下文表示应该便于说明查询和文档之间的关联。
  • 前置文本任务: 基于以上两个目标,我们为LLaRA引入了两个前置任务。第一个叫做EBAE(Embedding-based Auto-Encoding),文本嵌入 e t e_t et 用于预测它自己的输入文本。特别地,如果原始输入文本可以由 e t e_t et 预测,那么输入文本的全局语义必须由 e t e_t et 完全编码。第二个是EBAR(基于嵌入的自回归),其中文本嵌入 e t e_t et 用于预测输入文本的下一个句子。已知相关文档是查询的合理的下一个句子,例如,问题和答案、对对话上下文的回应,可以通过对这种语义进行表示来建立查询和文档之间的关联。
  • 文本嵌入: LLM由两个不同的模板提示生成EBAE和EBAR的文本嵌入(图1)。对于EBAE,LLM通过这个模版生成prompt:
"[Place-holder for input] The original sentence: ⟨\s⟩"

文本embedding的生成方式为:

e t α ← L L a M A ( T , S E L F , ⟨ ∖ s ⟩ ) [ − 1 ] e_t^{\alpha} \gets LLaMA(T, SELF, \left\langle \setminus s \right\rangle)[-1] etαLLaMA(T,SELF,s)[1]

其中,“SELF” 表示EBAE的prompt:“The original sentence: ⟨\s⟩”。对于EBAR,LLM的prompt模版为:

"[Placeholder for input] The next sentence: ⟨\s⟩"

基于此,文本嵌入被生成为:

e t β ← L L a M A ( T , N E X T , ⟨ ∖ s ⟩ ) [ − 1 ] e_t^{\beta} \gets LLaMA(T, NEXT, \left\langle \setminus s \right\rangle)[-1] etβLLaMA(T,NEXT,s)[1]

其中"NEXT"表示EBAR的prompt:“The next sentence:”。

如果直接计算 e t α e_t^{\alpha} etα e t β e_t^{\beta} etβ 将会造成很大的运算开销的浪费,因为输入文本 T T T 将会被处理两次。为了解决这个问题,我们提出一次性计算 e t α e_t^{\alpha} etα e t β e_t^{\beta} etβ。特别地,EBAE和EBAR的prompts被合并到了LLM的一个prompt里面:

"[Placeholder for input] SELF ⟨\s⟩ NEXT ⟨\s⟩"

因为这两个文本嵌入需要被单独计算,我们修改了传统casual language modeling的注意力掩码,其中 “SELF ⟨ ∖ s ⟩ \left\langle \setminus s \right\rangle s” 和 “NEXT ⟨ ∖ s ⟩ \left\langle \setminus s \right\rangle s” 是相互不可见的(Figure2)。
在这里插入图片描述
现在,第一个和第二个 <\s> 的输出embedding分别被用作 e t α e_t^{\alpha} etα e t β e_t^{\beta} etβ。考虑到输入文本T将占据联合提示(joint prompt)的大部分长度,与直接计算相比,这种处理将节省几乎50%的成本。

  • 训练目标: 如前所述,LLaRA的文本嵌入是为了捕捉输入文本本身的全局语义和输入文本的下一个句子的语义。在这里,我们提出了一个简单但有效的训练目标,将文本嵌入转换为全局语义表示。理论上,我们认为,如果一个嵌入本身能够准确预测特定上下文的标记,那么该嵌入一定是相应上下文的全局语义的有力表示。

    基于这一基本原理,文本嵌入的训练被公式化为一个多类分类问题,其中文本嵌入是线性投影的,用于预测目标上下文中的tokens。上述问题的目标函数推导为:

在这里插入图片描述
在这个地方, W ∈ R ∣ V ∣ × d W \in R^{|V| \times d} WRV×d 是线性投影矩阵, V V V 是词汇空间。 T \mathcal{T} T代表输入文本本身或下一个句子的标记的集合,分别取决于 e t α e_t^{\alpha} etα e t β e_t^{\beta} etβ的处理。事实证明,上述训练目标简单而有效。它可以很容易地在现有的语言建模训练管道之上实现。

4. Experimental Study

4.1 设置

进行实验研究是为了验证LLaRA的有效性,特别是它对微调后检索准确性的影响,以及它在不同场景下的通用性。为了实现这些目标,我们使用MS MARCO(Nguyen et al.,2016)作为我们的微调数据集,对段落检索和文档检索任务进行评估。为了评估模型的通用性,我们还利用了BEIR基准涵盖了多种检索场景,如问答、事实验证、实体检索、重复检测等。将MS MARCO的微调模型直接移植到BEIR的zero-shot评价中。

  • 训练: LLaRA应用于LLaMA-2-7B(基础)模型。这是基于DPR策划的维基百科的未标记语料库进行的(Karpukhin等人,2020)。我们总共执行了10000个LLaRA自适应步骤,批量大小为256,序列长度为1024,学习率为1e-5。LLaRA按照RepLLaMA提出的过程进行微调:它利用LoRA进行LLM的参数有效训练,并简单地利用ANN hard negatives进行嵌入模型的对比学习。

4.2 分析

分别用Table 1、2和3给出了在MS MARCO上的文章和文献检索以及在BEIR基准上的零样本检索的评价结果。我们与各种各样的基线方法进行了比较,包括基于预训练的语言模型的具有代表性的密集检索器,例如 ANCE,RocketQA,GTR,RetroMAE ,SimLM以及传统的基于BM25的稀疏检索。我们还介绍了利用LLM作为骨干编码器的最新方法,包括CPT,SGPT和RepLLaMA。

主要观察结果如下。首先,LLaRA在每个评估场景中都实现了最高的重新评估性能。值得注意的是,LLaRA在MS MARCO 段落检索中MRR@10指标获得了43.1分,在文档检索中MRR@100指标获得了47.5分,且NDCG@10平均为55.1。这样的性能甚至高于交叉编码器的大多数re-ranking结果。此外与跟它最接近的baseline RepLLaMA相比较,LLaRA在MS MARCO段落检索上的MRR@10指标高出1.9%,在MS MARCO文档检索上的MRR@100指标也要高出1.9%,在BEIR上zero-shot检索的NDGC@10指标要高出1.0%。这种显著且一致的经验增益验证了LLM的文本嵌入能力由于LLaRA的自适应而得到了显著提高。

我们对每个特定场景都有以下观察结果。首先,MS MARCO段落检索(Table 1)曾经是信息检索中引用最广泛的基准。近几年,由于对预训练的语言模型和微调方法的重大改进,一系列具有竞争力的基线极大地提高了SOTA。随着LLM的使用,新提出的稠密检索又向前迈出了一大步。需要注意的是,LLaRA只是通过hard negative采样进行了微调。如果未来可以使用更先进的微调方法,那么报告的性能很可能会得到进一步改进。与基于BERT的模型(比如RetroMAE和SimLM)相比,骨干编码器的变化在MRR@10指标上带来了将近4%的增益。这种巨大的进步表明LLM在密集检索中的巨大潜力。

在这里插入图片描述

对MS MARCO的文档检索任务也进行了同样的观察(Table 2)。基于LLM的检索器带来了优越的经验性能,其中LLaRA的结果相较于以前基于BERT的方法在MRR@100上有了超过+5%的改进。事实上,考虑到LLM的文本长度显著扩展,例如LLaMA-2的4K,文档检索是使用基于LLM的作为骨干编码器的直接优势。

在这里插入图片描述

根据BEIR基准零样本评估结果,检索器的通用性是使用基于LLM的骨干编码器的另一个明显优势。此前,人们普遍观察到,密集型检索很难处理zero-shot场景,尽管它们在监督数据集中表现出了竞争性。对于BEIR基准中的许多评估任务,基于BERT的方法甚至比基于BM25的稀疏检索器差得多。然而,通过切换到基于LLM的骨干编码器,密集检索器的zero-shot性能可以得到很大的改善。值得注意的是,随着模型尺寸的大幅扩大,所有大型基线,如GTR-XXL、CPT-XL、Ada-002、SGPT、RepLLaMA,在大多数情况下都能够优于BM25。从侧面来看,与BERT基线相比,LLaRA在每个单独任务中都取得了更好的性能,最终NDCG@10指标平均提高了+16%。

在这里插入图片描述

5. Conclusion

在本文中,我们提出了LLaRA,这是一种新的方法,旨在通过提高LLM的文本嵌入能力,使其成为密集检索的更好基础。LLaRA由两个前置任务组成,即EBAE和EBAR。这两个任务协作将LLM的文本嵌入转换为全局上下文的表示,从而促进查询与其相关目标之间的语义匹配。作为对预训练良好的LLM的后验自适应,LLaRA不仅有效而且实现简单。它可以完全基于未标记的语料库进行,并与现有的语言建模训练管道完全兼容。基于全面的实验研究验证了LLaRA的有效性,其中基于LLM的检索器的准确性和通用性可以显著提高,从而在有监督和zero-shot评估场景中实现最先进的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1370727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存&#xff0c;并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器&#xff0c; JVM类加载机制类加载…

5分钟搭建开源运维监控工具Uptime Kuma并实现无公网IP远程访问

文章目录 **主要功能**一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址访问…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本&#xff0c;提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

中国IT产经新闻:新能源汽车发展前景与燃油车的利弊之争

随着科技的进步和环保意识的提高&#xff0c;新能源汽车在全球范围内逐渐受到重视。然而&#xff0c;在新能源汽车迅速发展的同时&#xff0c;燃油车仍然占据着主导地位。本文将从新能源与燃油车的利弊、新能源汽车的发展前景两个方面进行分析&#xff0c;以期为读者提供全面的…

【原生部署】SpringBoot+Vue前后端分离项目

本次主要讲解SpringBootVue前后端完全分离项目在CentOS云服务器上的环境搭建与部署过程&#xff0c;我们主要讲解原生部署。 一.原生部署概念 原生部署是指将应用程序&#xff08;一般是指软件、应用或服务&#xff09;在底层的操作系统环境中直接运行和部署&#xff0c;而不…

SAP CO11N报工批次分割(拆分)

CO11N做报工的时候&#xff0c;下阶料启用了批次&#xff0c;比如需要过账4166个&#xff0c;但是每一批次的库存都不满足4166个&#xff0c;所以需要拆分&#xff08;分割&#xff09;处理 这个时候我们就需要对这一行做分割处理 选中这一行&#xff0c;点击‘分割’按钮 弹…

认识Linux指令之 “ head tail ” 命令

01.head指令 head 与 tail 就像它的名字一样的浅显易懂&#xff0c;它是用来显示开头或结尾某个数量的文字区块&#xff0c;head 用来显示档案的开头至标准输出中&#xff0c;而 tail 想当然尔就是看档案的结尾。 语法&#xff1a; head [参数]... [文件]... 功能&#…

thinkphp学习06-连接数据库与模型初探

新建数据库 CREATE DATABASE tp6stu01 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;创建表和数据 DROP TABLE IF EXISTS tp_user; CREATE TABLE tp_user (id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 自动编号,username varchar(20) CHARACTER SET utf8 COLL…

删除的文件如何恢复? 9 个简单的数据恢复软件方法分享

无论是由于软件或硬件故障、网络犯罪还是意外删除&#xff0c;数据丢失都会让人感到压力和不快。 数据丢失的主要原因是意外删除&#xff0c;任何人都可能随时发生这种情况&#xff0c;尽管他们知道应该备份数据。毕竟&#xff0c;犯错是人之常情&#xff01; 如果是&#xf…

7 集中式日志和分布式跟踪

文章目录 日志聚合模式日志集中化的简单解决方案使用日志并输出分布式跟踪Spring Cloud Sleuth实现分布式跟踪 小结 前面的文章&#xff1a; 1、 1 一个测试驱动的Spring Boot应用程序开发 2、 2 使用React构造前端应用 3、 3 试驱动的Spring Boot应用程序开发数据层示例 4、…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案&#xff0c;用于录制、转换和流式传输音频和视频。 EasyDarwin软件&#xff1a;Download Easy…

【链表】力扣206反转链表

题目 力扣206反转链表 思路图解 代码实现 双指针代码实现 public static ListNode reverseList(ListNode head) {// 初始化pre&#xff0c;curListNode pre null;ListNode cur head;// 当cur为null时&#xff0c;说明反转结束while(cur ! null) {// 临时保存cur.next节点…

目标检测-One Stage-YOLOx

文章目录 前言一、YOLOx的网络结构和流程1.YOLOx的不同版本2.Yolox-Darknet53YOLOv3 baselineYolox-Darknet53 3.Yolox-s/Yolox-m/Yolox-l/Yolox-x4.Yolox-Nano/Yolox-Tiny 二、YOLOx的创新点总结 前言 根据前文CenterNet、YOLOv4等可以看出学界和工业界都在积极探索使用各种t…

解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题

1.环境场景 组件版本mysql5.7.44mysql-connector-java80.18 2. 问题描述 报mysql-connector-java 驱动连不上mysql数据库。 3. 可能的原因分析 查看数据库连接句柄是否对 如果数据库连接句柄中没有 useSSLfalse 的话可能会导致这样的问题。 就像下面这样&#xff1a; jdb…

认识Linux指令之 “more less” 命令

01.more命令 语法&#xff1a;more [选项][文件] 功能&#xff1a;more命令&#xff0c;功能类似 cat 常用选项&#xff1a; -n 对输出的所有行编号 q 退出more cat适合打开查看一些小文件 当遇到大文本文件的时候&#xff0c;使用more命令&#xff0c;more可以打满一屏…

GPT大模型在生物、地球、农业、气象、生态、环境科学可以应用?

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

银河麒麟服务器系统安装KVM和创建KVM虚拟机

银河麒麟服务器系统安装KVM和创建KVM虚拟机 一 KVM概念二 安装KVM组件2.1 安装KVM前提2.2 KVM管理工具2.3 KVM安装2.3.1 安装kvm组件2.3.2 启动服务并设置开机自启 三 创建&管理虚拟机3.1 创建虚拟机3.2 安装过程3.2.1 选择安装方式3.2.2 选择安装ISO文件3.2.3选择内存和CP…

微信扫码进入小程序特定页面

小程序配置 开发 - 开发管理 - 开发设置-普通链接二维码打开小程序 配置好的截图 如下&#xff1a;二维码规则建议是自己的域名 /mini/ 功能页面 pages/index/index 是为了方便跳转其他页面 记得把校验文件发给后端 web 端处理 二维码格式为&#xff1a;二维码规则/功能页…

单调栈练习(二)— 柱状图中最大的矩形

题目&#xff1a; 这是一道LeetCode上的原题&#xff1a;链接地址 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 思路 因为是力扣原题&#xff0c;所…

怎样在Anaconda下安装pytorch(conda安装和pip安装)

前言 文字说明 本文中标红的&#xff0c;代表的是我认为比较重要的。 版本说明 python环境配置&#xff1a;jupyter的base环境下的python是3.10版本。CUDA配置是&#xff1a;CUDA11.6。目前pytorch官网提示支持的版本是3.7-3.9 本文主要用来记录自己在安装pytorch中出现的问…