论文回顾:NeoBERT:新一代 BERT

NeoBERT:新一代编码器,具有 4K 标记上下文长度,在 MTEB 上优于 RoBERTa 等更大的模型!

论文链接:https://arxiv.org/pdf/2502.19587

摘要

NeoBERT 是下一代双向编码器;它融合了最先进的架构、现代数据和优化的预训练,在编码器和强大的自回归语言模型之间架起了一座桥梁。NeoBERT 支持 4096 个词块的上下文长度,并保持 250M 的紧凑参数大小。尽管体积很小,但它在 MTEB 基准测试中取得了最先进的结果,在相同的微调条件下超过了更大的模型。

架构

NeoBERT 在架构上进行了多项改进,以提高效率和性能:

  • 研究表明,大多数早期语言模型都存在 "深度低效 "问题,而 BERT 和 RoBERTa 等较小的模型则面临 "宽度低效 "问题。NeoBERT 保留了 BERTbase 的 768 宽度,但增加了深度。
  • 传统的绝对位置嵌入法难以处理长序列。NeoBERT 使用旋转位置嵌入法来实现更好的外推,并支持RoPE Extension,以有效处理扩展上下文。
  • NeoBERT 使用 RMSNorm 对残差连接进行层前归一化。
  • NeoBERT 用 SwiGLU 取代了 GELU,这是一种更高效的激活函数,可用于 LLaMA 等模型。

 

数据

  • NeoBERT 在 RefinedWeb 上进行了预训练,这是一个拥有 600B 标记的海量数据集,比 RoBERTa 的语料库大 18 倍。
  • NeoBERT 有两个阶段的预训练:首先,对序列长度为 1024 个标记的 100 万步(2T 个标记)进行训练,然后再对 50K 步(100B 个标记)进行训练,将最大序列长度增加到 4096 个标记。
  • 额外的子数据集用于让 NeoBERT 接触更长的序列,确保在训练过程中序列长度的混合。

Pre-training

以 RoBERTa 为例,NeoBERT 只对掩码语言建模进行预训练,掩码率为 20%。它在 2.1T 标记上进行了预训练。为了提高效率,它使用了 DeepSpeed ZeRO、FlashAttention 和融合运算符(xFormers),确保维度与 GPU 架构一致(64 的倍数),并消除偏差以简化计算。

消融

最大的改进包括替换数据集(+3.6% GLUE)和扩大模型规模(+2.0% GLUE)。

实验

 尽管与同类大型模型相比,NeoBERT 的参数少了 1 亿到 1.5 亿个,但得分率却达到了 89.0%,与之前最先进模型的性能不相上下。GLUE 基准虽然已经过时,但为了便于与之前的编码器进行比较,还是进行了报告。

MTEB 基准是一个更现代、更具挑战性的基准,涵盖 7 个任务和 56 个英语数据集。传统的掩码语言模型在直接嵌入评估时会遇到困难,而 NeoBERT 则不同,它采用了与模型无关的对比微调策略,以确保比较的公平性。NeoBERT 在包含 900 万个查询-文档对的数据集上进行对比学习训练,其中包括硬否定和批内否定。训练步数超过 2,000 步后,效果微乎其微。

NeoBERT 在 MTEB-English 上的表现优于所有大型基线模型,尽管参数较少,但比第二好的模型相对提高了 4.5%。

Q&A

Q: 这篇论文试图解决什么问题?

A: 这篇论文试图解决的问题是:尽管自回归语言模型(如LLaMA和DeepSeek)在架构、预训练和微调方面取得了显著进展,展现出强大的上下文学习和推理能力,但编码器模型(如BERT和RoBERTa)作为许多下游自然语言处理(NLP)应用的基础,却没有取得同等水平的进步。BERT和RoBERTa尽管已有五年历史,但由于其知识逐渐过时,且在架构和预训练方法上存在局限性,因此需要一种新型的编码器模型来弥补这一差距,以更好地支持下游任务。

具体来说,论文指出以下几点问题:

  1. 编码器的局限性:BERT和RoBERTa等编码器在架构和预训练方法上存在局限性,导致它们在处理长文本和复杂任务时表现不佳。

  2. 预训练数据的过时:现有的编码器预训练数据集相对较小且过时,无法充分利用最新的大规模数据集来提升模型性能。

  3. 微调阶段的复杂性:尽管在微调阶段取得了一些进展,但这些方法通常依赖于复杂的对比学习策略,难以复现且计算成本高昂。

  4. 模型规模与效率的平衡:现有的大型编码器模型虽然性能较好,但参数过多,导致计算效率低下,难以在实际应用中广泛采用。

为了解决这些问题,论文提出了NeoBERT,这是一个新一代的编码器模型,它集成了最新的架构改进、现代数据集和优化的预训练方法,旨在提升编码器的性能和效率,同时保持与现有模型的兼容性。

Q: 有哪些相关研究?

A: 论文中提到了以下相关研究:

架构改进

  • Transformer架构的优化:Levine等人(2020)提出了Transformer的最优深度与宽度比,指出大多数语言模型处于“深度效率低下”的状态,而小型语言模型如BERT、RoBERTa和NomicBERT则处于“宽度效率低下”的状态。因此,NeoBERT通过增加深度来实现最优的深度与宽度比。

  • 位置编码的改进:Su等人(2023)提出了旋转位置编码(RoPE),将相对位置信息直接集成到自注意力机制中,改善了模型对长序列的泛化能力。NeoBERT采用了RoPE来替代传统的绝对位置编码。

  • 层归一化的改进:Xiong等人(2020)发现预归一化(Pre-LN)可以提高模型的稳定性,允许使用更大的学习率,并加速模型收敛。NeoBERT采用了预归一化,并用RMSNorm替代了传统的LayerNorm,以进一步提高计算效率。

  • 激活函数的改进:Shazeer(2020)展示了在Transformer架构中使用门控线性单元(GLU)的好处。NeoBERT采用了SwiGLU激活函数,并相应地调整了隐藏单元的数量以保持参数数量不变。

数据集的改进

  • 数据集规模和多样性的提升:Baevski等人(2019)表明,增加数据量可以提高下游任务的性能。RoBERTa(Liu等人,2019)通过在更大的数据集上进行预训练,显著提升了性能。NeoBERT进一步扩展了数据集规模,使用了包含6000亿个标记的RefinedWeb数据集。

  • 数据集的时效性:NomicBERT(Nussbaum等人,2024)使用了2023年的数据集,而NeoBERT也采用了2023年的数据集,以确保模型能够学习到最新的知识。

预训练方法的改进

  • 预训练目标的简化:RoBERTa(Liu等人,2019)发现去掉下一句预测(NSP)任务并不会损害性能。因此,NeoBERT仅使用掩码语言建模(MLM)作为预训练目标。

  • 掩码率的优化:Wettig等人(2023)挑战了BERT和RoBERTa中15%掩码率的普遍假设,发现对于基础模型,20%的掩码率更为合适。NeoBERT采用了20%的掩码率。

  • 优化器和学习率调度器的选择:NeoBERT采用了AdamW优化器(Loshchilov和Hutter,2019)和余弦衰减学习率调度器,这些方法在现代语言模型中已被广泛采用。

  • 预训练规模的扩大:LLaMA家族(Touvron等人,2023;Dubey等人,2024)表明,语言模型可以从在更多标记上进行训练中受益。NeoBERT在2万亿个标记上进行了预训练,显著超过了RoBERTa和NomicBERT。

微调方法的改进

  • 对比学习的发展:SimCSE(Gao等人,2022)提出了一种简单的对比学习方法,通过引入噪声来生成正样本对。GTE(Li等人,2023b)进一步引入了更复杂的对比学习技术,包括弱监督阶段和半监督阶段。CDE(Morris和Rush,2024)通过将具有相关上下文的样本分组到同一批次中,并为整个语料库提供上下文嵌入,进一步提升了性能。

  • 任务特定的适配器:Jina-embeddings(Sturua等人,2024)引入了任务特定的低秩适配器(LoRA),以更好地适应特定任务。

这些相关研究为NeoBERT的设计和改进提供了理论基础和实践指导,使其能够在架构、数据和预训练方法上进行全面的优化。

Q: 论文如何解决这个问题?

A: 论文通过提出 **NeoBERT**,一个新一代的编码器模型,来解决现有编码器在架构、数据和预训练方法上的局限性。NeoBERT 的设计和实现主要从以下几个方面解决问题:

1. 架构改进

  • 深度与宽度的优化:NeoBERT 采用了最优的深度与宽度比,通过增加模型的深度而不是宽度来提升性能,同时保持与现有基础模型的兼容性。具体来说,NeoBERT 将层数从 12 层增加到 28 层,而隐藏层大小保持为 768,从而在不改变模型宽度的情况下提升性能。

  • 位置编码的改进:NeoBERT 采用了旋转位置编码(RoPE),这种编码方式能够更好地处理长序列,并且在扩展到更长的上下文时表现出色。此外,NeoBERT 还兼容 Yet Another RoPE Extension (YaRN),进一步提升了对长序列的支持。

  • 层归一化的改进:NeoBERT 采用了预归一化(Pre-LN)和 Root Mean Square Layer Normalization (RMSNorm),这些改进提高了模型的稳定性和训练效率。

  • 激活函数的改进:NeoBERT 使用了 SwiGLU 激活函数,并相应地调整了隐藏单元的数量,以保持参数数量不变,同时提升模型的表达能力。

2. 数据集的改进

  • 大规模数据集的使用:NeoBERT 使用了 RefinedWeb 数据集,这是一个包含 6000 亿个标记的大型数据集,远大于 RoBERTa 使用的数据集。这使得 NeoBERT 能够学习到更广泛的知识和语言模式。

  • 数据集的时效性:NeoBERT 使用了 2023 年的数据集,确保模型能够学习到最新的知识,从而更好地适应现代语言和任务的需求。

3. 预训练方法的改进

  • 预训练目标的简化:NeoBERT 仅使用掩码语言建模(MLM)作为预训练目标,去掉了下一句预测(NSP)任务,这与 RoBERTa 的改进一致。

  • 掩码率的优化:NeoBERT 将掩码率从 15% 提高到 20%,这一调整基于最新的研究发现,更高的掩码率可以更好地训练模型。

  • 优化器和学习率调度器的选择:NeoBERT 使用了 AdamW 优化器和余弦衰减学习率调度器,这些方法在现代语言模型中已被广泛采用,能够提高训练的稳定性和效率。

  • 预训练规模的扩大:NeoBERT 在 2 万亿个标记上进行了预训练,显著超过了 RoBERTa 和 NomicBERT。这使得 NeoBERT 能够学习到更丰富的语言模式和知识。

4. 微调方法的改进

  • 标准化的微调策略:为了公平地评估预训练的效果,NeoBERT 采用了标准化的对比学习微调策略。所有模型都使用相同的微调方法和超参数进行训练,从而确保了在 MTEB 基准测试中的公平比较。

  • 两阶段训练策略:NeoBERT 采用了两阶段训练策略,首先在 1024 个标记的序列长度上进行训练,然后扩展到 4096 个标记的序列长度。这种策略不仅提高了模型对长序列的处理能力,还保持了训练的高效性。

5. 实验验证

  • GLUE 基准测试:NeoBERT 在 GLUE 基准测试中取得了与大型模型相当的性能,同时模型参数更少,支持的序列长度更长。

  • MTEB 基准测试:NeoBERT 在 MTEB 基准测试中表现优异,超过了所有现有的预训练模型,证明了其在多种任务上的强大性能。

  • 效率评估:NeoBERT 在处理长序列时的效率显著高于其他模型,如 ModernBERT,这使得其在实际应用中更具优势。

通过这些改进,NeoBERT 不仅在性能上达到了新的高度,还在效率和兼容性方面表现出色,为自然语言处理领域提供了一个强大的新一代编码器模型。

Q: 论文做了哪些实验?

A: 论文中进行了以下实验:

1. GLUE基准测试

  • 目的:评估NeoBERT在自然语言理解任务上的性能,并与现有的编码器模型(如BERT、RoBERTa等)进行比较。

  • 方法:在GLUE基准测试的开发集上对NeoBERT进行微调,并使用标准的超参数搜索方法来优化性能。

  • 结果:NeoBERT在GLUE基准测试中取得了89.0%的平均分数,与大型模型(如RoBERTa-large和DeBERTa-v3)相当,但参数更少(250M参数),且支持的序列长度更长(4096个标记)。

2. MTEB基准测试

  • 目的:评估NeoBERT在文本嵌入任务上的性能,并与现有的最佳开放源代码嵌入模型进行比较。

  • 方法:采用统一的对比学习微调策略,对所有模型进行相同的微调处理,然后在MTEB基准测试的英语子集上进行评估。

  • 结果:NeoBERT在MTEB基准测试中表现最佳,平均分数为51.3%,比第二好的模型(ModernBERT)高出4.5%。尽管NeoBERT的参数比大型基线模型少100M,但它在所有任务类型中都表现优异。

3. 长序列建模能力评估

  • 目的:验证NeoBERT在处理长序列时的性能,特别是经过额外的预训练步骤后。

  • 方法:从英语维基百科的子集中随机抽取2,467个长序列,并计算每个序列的伪困惑度(pseudo-perplexity)。

  • 结果:NeoBERT1024(仅在长度为1024的序列上训练)能够有效地泛化到接近3000个标记的上下文长度。经过额外的50k训练步骤后,NeoBERT4096能够成功地建模更长的序列,证明了两阶段训练策略的有效性。

4. 模型效率评估

  • 目的:评估NeoBERT在不同序列长度下的推理效率,并与现有模型(如BERT、RoBERTa和ModernBERT)进行比较。

  • 方法:构建一个包含最大长度序列(512、1024、2048、4096和8192)的合成数据集,并在单个A100 GPU上进行推理,报告每个模型在不同序列长度下的最高吞吐量。

  • 结果:对于长度超过1024的序列,NeoBERT显著优于ModernBERT-base,尽管NeoBERT的参数更多(250M参数),但其在4096个标记的序列上实现了46.7%的速度提升。

5. 架构改进的消融研究

  • 目的:验证NeoBERT中各项改进对性能的影响,并选择最优的模型配置。

  • 方法:从一个类似BERT-base的基础模型(M0)开始,逐步引入改进(如RoPE、SwiGLU、RMSNorm等),并训练10个不同的模型。每个模型都在GLUE基准测试上进行评估,以确定每项改进的效果。

  • 结果:在GLUE基准测试中,数据集规模的增加(M2)和模型参数的增加(M7)对性能提升最为显著,分别带来了3.6%和2.9%的相对改进。其他改进(如RoPE、SwiGLU和RMSNorm)也对性能有积极影响,尽管某些改进(如使用LLaMA BPE分词器)导致了性能下降。

这些实验全面评估了NeoBERT在不同任务和条件下的性能,证明了其在自然语言处理任务中的优越性和效率。

Q: 有什么可以进一步探索的点?

A: 尽管NeoBERT在多个方面取得了显著的进展,但仍有一些可以进一步探索的点,以进一步提升其性能和适用性:

1. 预训练数据集的进一步优化

  • 数据质量和多样性:尽管NeoBERT使用了大规模的RefinedWeb数据集,但数据质量的进一步提升可能有助于提高模型性能。例如,可以探索更精细的数据清洗和去重策略,以减少噪声和重复数据。

  • 多语言数据集:目前NeoBERT主要使用英语数据集进行预训练。扩展到多语言数据集可以提高模型在跨语言任务中的表现,尤其是在低资源语言上的应用。

  • 领域特定数据集:针对特定领域的数据集(如医学、法律、金融等)进行预训练,可以提高模型在这些领域的专业性和准确性。

2. 架构的进一步改进

  • 注意力机制的优化:尽管NeoBERT已经采用了RoPE和FlashAttention等技术,但可以进一步探索更高效的注意力机制,如稀疏注意力(Sparse Attention)或分层注意力(Hierarchical Attention)。

  • 混合专家模型(Mixture of Experts, MoE):引入MoE架构可以提高模型的表达能力和效率,尤其是在处理大规模数据集时。

  • 模型压缩和量化:探索模型压缩和量化技术,以进一步提高模型的推理效率,同时保持或提高性能。

3. 预训练任务的多样化

  • 多任务预训练:除了掩码语言建模(MLM),可以探索更多预训练任务的组合,如下一句预测(NSP)、对比学习任务等,以提高模型的泛化能力。

  • 自监督学习任务的创新:开发新的自监督学习任务,如基于图的预训练任务或基于语义角色标注的预训练任务,可以进一步提升模型对语言结构的理解。

4. 微调策略的优化

  • 自动化超参数调整:目前的微调策略依赖于手动调整超参数。可以探索自动化超参数调整方法,如贝叶斯优化或基于强化学习的超参数调整,以进一步提高微调效果。

  • 任务特定的微调策略:针对不同任务开发更精细的微调策略,如使用任务特定的适配器(Adapters)或低秩适配器(LoRA),可以提高模型在特定任务上的表现。

  • 零样本和少样本学习:探索零样本和少样本学习策略,以提高模型在数据稀缺任务中的表现。

5. 模型评估和基准测试

  • 更全面的基准测试:除了GLUE和MTEB,可以探索更多基准测试,如SuperGLUE、XGLUE等,以更全面地评估模型的性能。

  • 跨领域和跨语言评估:评估模型在跨领域和跨语言任务中的表现,以验证其泛化能力和适应性。

  • 长期上下文任务的评估:开发更多需要处理长序列的任务,以进一步验证NeoBERT在长序列建模方面的优势。

6. 模型的可解释性和公平性

  • 可解释性研究:探索模型的可解释性,如通过注意力可视化、特征重要性分析等方法,以更好地理解模型的决策过程。

  • 公平性和偏见研究:评估模型在不同群体和背景下的表现,以确保其公平性和减少偏见。可以开发新的数据集和评估方法,以系统地研究和改进模型的公平性。

7. 模型的部署和应用

  • 实时推理优化:探索实时推理优化技术,如模型蒸馏、模型剪枝等,以提高模型在实际应用中的效率。

  • 多模态任务的探索:将NeoBERT与其他模态(如图像、语音)结合,开发多模态模型,以处理更复杂的任务,如视觉问答(VQA)和语音识别。

  • 行业应用的开发:探索NeoBERT在特定行业(如医疗、金融、教育)中的应用,开发定制化的解决方案,以满足行业需求。

这些进一步探索的方向不仅可以帮助NeoBERT在现有任务上取得更好的性能,还可以拓展其在新任务和新领域的应用,推动自然语言处理技术的发展。

Q: 总结一下论文的主要内容

A: 论文介绍了一种新型的编码器模型 **NeoBERT**,旨在通过集成最新的架构改进、预训练方法和数据集,提升编码器在自然语言处理任务中的性能和效率。以下是论文的主要内容总结:

研究背景

  • 自回归语言模型的进步:近年来,自回归语言模型(如LLaMA和DeepSeek)在架构、预训练和微调方面取得了显著进展,展现出强大的上下文学习和推理能力。

  • 编码器模型的局限性:尽管编码器模型(如BERT和RoBERTa)是许多下游自然语言处理(NLP)应用的基础,但它们在架构和预训练方法上存在局限性,导致性能提升缓慢。

  • 需求:需要一种新型的编码器模型,集成最新的架构和预训练方法,以提升性能和效率。

NeoBERT的提出

  • 目标:NeoBERT旨在通过集成最新的架构改进、现代数据集和优化的预训练方法,提升编码器的性能和效率。

  • 设计:NeoBERT保持与现有基础模型的兼容性,支持扩展的上下文长度(4096个标记),并且具有紧凑的参数规模(250M参数)。

架构改进

  • 深度与宽度的优化:NeoBERT采用最优的深度与宽度比,增加模型深度以提升性能。

  • 位置编码的改进:采用旋转位置编码(RoPE)和Yet Another RoPE Extension (YaRN),提升对长序列的支持。

  • 层归一化的改进:采用预归一化(Pre-LN)和Root Mean Square Layer Normalization (RMSNorm),提高训练稳定性和效率。

  • 激活函数的改进:采用SwiGLU激活函数,提升模型的表达能力。

数据集的改进

  • 大规模数据集:使用包含6000亿个标记的RefinedWeb数据集,显著扩大了预训练数据的规模。

  • 数据集的时效性:使用2023年的数据集,确保模型能够学习到最新的知识。

预训练方法的改进

  • 预训练目标的简化:仅使用掩码语言建模(MLM)作为预训练目标,去掉了下一句预测(NSP)任务。

  • 掩码率的优化:将掩码率从15%提高到20%,以更好地训练模型。

  • 优化器和学习率调度器的选择:采用AdamW优化器和余弦衰减学习率调度器,提高训练的稳定性和效率。

  • 预训练规模的扩大:在2万亿个标记上进行预训练,显著超过了现有的预训练模型。

微调方法的改进

  • 标准化的微调策略:采用统一的对比学习微调策略,确保在MTEB基准测试中的公平比较。

  • 两阶段训练策略:采用两阶段训练策略,首先在1024个标记的序列长度上进行训练,然后扩展到4096个标记的序列长度,提高模型对长序列的处理能力。

实验验证

  • GLUE基准测试:NeoBERT在GLUE基准测试中取得了89.0%的平均分数,与大型模型相当,但参数更少,支持的序列长度更长。

  • MTEB基准测试:NeoBERT在MTEB基准测试中表现最佳,平均分数为51.3%,超过了所有现有的预训练模型。

  • 长序列建模能力评估:NeoBERT能够有效地泛化到接近3000个标记的上下文长度,并在经过额外训练后成功建模更长的序列。

  • 模型效率评估:NeoBERT在处理长序列时的效率显著高于其他模型,如ModernBERT,具有更高的吞吐量。

结论

NeoBERT通过集成最新的架构改进、现代数据集和优化的预训练方法,显著提升了编码器的性能和效率。它在GLUE和MTEB基准测试中表现出色,同时保持了紧凑的参数规模和高效的推理能力。NeoBERT的开源代码和模型检查点为研究者和实践者提供了强大的工具,推动自然语言处理技术的发展。

未来工作

  • 数据集的进一步优化:探索更高质量和多样化的数据集,以进一步提升模型性能。

  • 架构的进一步改进:探索更高效的注意力机制和模型压缩技术。

  • 预训练任务的多样化:开发更多预训练任务的组合,以提高模型的泛化能力。

  • 微调策略的优化:探索自动化超参数调整和任务特定的微调策略。

  • 模型评估和基准测试:开发更全面的基准测试,以更全面地评估模型的性能。

  • 模型的可解释性和公平性:研究模型的可解释性和公平性,以确保其在不同群体中的表现。

  • 模型的部署和应用:探索模型在特定行业和多模态任务中的应用,开发定制化的解决方案。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】

目录 引言前期准备Step1 设计可序列化的输入输出集合【不支持多线程】Step2 设计程序框架1、抽象层【IProcess】2、父类【HAlgorithm】3、子类【HFindModelTool】 Step3 设计UI结果展示 引言 通过仿照VisionPro软件二次开发Halcon的模板匹配工具,便于在客户端软件中…

一、OpenGL的原理解析

文章目录 OpenGL到底实现的是什么?OpenGL内模型数据的本质是什么?为什么三角形是 3D 渲染的最基本单元?MVP 变换(Model-View-Projection 变换)OpenGL渲染流程-摄像机变换OpenGL渲染流程-投影变换OpenGL渲染管线概述 Op…

大模型——CogView4:生成中英双语高清图片的开源文生图模型综合介绍

CogView4:生成中英双语高清图片的开源文生图模型综合介绍 CogView4 是由清华大学 KEG 实验室(THUDM)开发的一款开源文生图模型,专注于将文本描述转化为高质量图像。它支持中英双语提示词输入,尤其擅长理解中文提示并生成带有汉字的图像,非常适合广告设计、短视频创作等场…

网络安全法与等级保护 PPT 精华汇总

资源描述 本资源文件为《网络安全法与等级保护》的PPT精华汇总,内容涵盖了网络安全法与等级保护的总体框架及相关标准规范。该PPT详细介绍了网络安全法与等级保护的各个章节和条款,并提供了基础类和应用类的相关标准文件,帮助读者全面了解和…

前端知识一

(ref函数)1.为什么vue3中使用ref来创建响应式数据,而不是直接声明一个变量 import { ref } from "vue";const count ref(0); // 创建一个响应式的计数器,初始值为0function increment() {count.value; // 增加计数器的…

国产免费AI的IDE-TRAE

还是在AI的加持下的新的工具 在上周一次偶然的机会看到了这样的标题–用上Claude的AI编程工具Trae。 AI我还没入门,编程也是小白级别。Claude是什么不知道。Trae这是什么也不知道。为什么起这个名字?都不知道含义。 先下载吧。(这里要说一…

解决中文乱码:字符编码全攻略 - ASCII、Unicode、UTF-8、GB2312详解

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

【Linux】进程信号——信号保存和信号捕捉

文章目录 信号保存信号相关的概念信号是如何保存的呢?有关信号保存的系统调用sigprocmask信号的增删查改查看pending表验证接口 信号捕捉用户态与内核态信号捕捉流程 总结 信号保存 信号相关的概念 信号递达:指 操作系统 将一个信号(Signal…

计算机网络数据传输探秘:包裹如何在数字世界旅行?

计算机网络数据传输探秘:包裹如何在数字世界旅行? 一、从快递网络看数据传输本质 想象你网购了一件商品: 打包:商家用纸箱包装,贴上地址标签(数据封装)运输:包裹经过网点→分拣中心→运输车(网络节点与链路)签收:快递员核对信息后交付(数据校验与接收)数据的网络…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义,cyberrt中timer模块用于设置定时器任务,字面意思,设置设置定时周期及出发频次(周期 or oneshot),到达指定时间时间触发callback time wheel 时钟节拍轮,常见的定时器设计&#x…

使用ast获取py文件中所有函数与类名

当我们在创建python项目,经常需要遍历和分析代码文件,特别是当我们想要自动化地获取某些信息,比如所有的函数和类名。Python的ast(Abstract Syntax Trees,抽象语法树)模块为我们提供了一个强大的工具,可以方…

【C语言5】函数:库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、声明和定义

文章目录 一、函数的概念二、库函数2.1 标准库和头文件2.2 库函数的使用方法 三、自定义函数3.1 函数的语法形式 四、形参和实参4.1 实参4.2 形参4.2 实参和形参的关系 五、return 语句六、数组做函数参数七、嵌套调用和链式访问7.1 嵌套调用7.2 链式访问 八、函数的声明和定义…

【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)

基于 C 语言的 QQ 聊天室(TCP + 多线程 + SQLite3) 项目功能基础功能: 登录、注册、添加好友、私聊、创建群聊、群聊扩展功能: 删除好友、注销账号、好友在线状态、群管理(拉人/踢人)、VIP 特权、邮件通知等 功能介绍:模拟QQ聊天客户端:登录界面:1、登录2、注册 //将用…

vscode 都有哪些大模型编程插件

VSCode 中有许多基于大模型的编程插件,这些插件通过集成人工智能技术,显著提升了开发者的编程效率和体验。以下是一些主要的大模型编程插件及其功能: GitHub Copilot GitHub Copilot 是由 OpenAI 开发的插件,能够根据代码上下文自…

每日一题洛谷普及/提高-P1154 奶牛分厩c++

无注释版 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; bool ju(int n, int s[], int len, bool a[]) {memset(a, 0, n * sizeof(bool));for (int j 0; j < len; j) {if (a[s[j] % n]) {return false;}a[s[j] % n] t…

[liorf_localization_imuPreintegration-2] process has died

使用liorf&#xff0c;编译没报错&#xff0c;但是roslaunch报错如下&#xff1a; 解决方法&#xff1a; step1: 如果你之前没有安装 GTSAM&#xff0c;可以尝试安装它 step2: 检查是否缺少依赖库 ldd /home/zz/1210/devel/lib/liorf_localization/liorf_localization_imuPr…

Jmeter+ant+jenkins接口自动化测试

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter 支持接口的测试&#xff0c;Ant 支持自动构建&#xff0c;而 Jenkins 支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动…

springboot425-基于SpringBoot的BUG管理系统(源码+数据库+纯前后端分离+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档

将飞书的多维表格与DeepSeek R1结合使用&#xff0c;就像为你的数据管理和分析之旅装上一台涡轮增压器。两者的合作&#xff0c;不仅仅在速度上让人耳目一新&#xff0c;更是将智能化分析带入了日常的工作场景。以下是它们如何相辅相成并改变我们工作方式的一些分享。 --- 在…

leetcode 148. 排序链表

题目如下 数据范围 通过代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : va…