MarkupLM:用于视觉丰富文档理解的文本和标记语言预训练

news2025/2/9 9:16:19

摘要

结合文本、布局和图像的多模态预训练在视觉丰富文档理解(VRDU)领域取得了显著进展,尤其是对于固定布局文档(如扫描文档图像)。然而,仍然有大量的数字文档,其布局信息不是固定的,且需要通过交互和动态渲染来可视化,这使得现有的基于布局的预训练方法难以应用。本文提出了MarkupLM,旨在解决使用标记语言(如HTML/XML)进行文档理解任务的挑战,在该方法中,文本和标记信息共同进行预训练。实验结果表明,预训练的MarkupLM在多个文档理解任务上显著优于现有的强基线模型。预训练的模型和代码将公开发布,网址为:https://aka.ms/markuplm。

1 引言

最近,结合文本、布局和视觉信息的多模态预训练方法已成为视觉丰富文档理解(VRDU)任务中的标准方法(Xu 等,2020, 2021a,b; Pramanik 等,2020; Łukasz Garncarek 等,2021; Hong 等,2021; Powalski 等,2021; Wu 等,2021; Li 等,2021a,b; Appalaraju 等,2021)。这些多模态模型通常使用Transformer架构(Vaswani 等,2017)对大规模未标注的扫描文档图像(Lewis 等,2006)或数字原生PDF文件进行预训练,然后在相对较小的标注训练样本上进行特定任务的微调,从而在各种文档理解任务中达到最先进的性能,包括表单理解(Jaume 等,2019; Xu 等,2021b)、收据理解(Huang 等,2019; Park 等,2019)、复杂文档理解(Gralinski 等,2020)、文档类型分类(Harley 等,2015)和文档视觉问答(Mathew 等,2020)等。无论是在学术研究任务中,还是在金融、保险等多个现实世界的商业应用中,已经取得了显著进展。

视觉丰富文档大致可以分为两类。第一类是固定布局文档,如扫描文档图像和数字原生PDF文件,在这些文档中,布局和样式信息是预渲染的,并且独立于软件、硬件或操作系统。这一特点使得现有的基于布局的预训练方法能够轻松应用于文档理解任务。而第二类是基于标记语言的文档,如HTML/XML,在这些文档中,布局和样式信息需要根据软件、硬件或操作系统的不同,进行交互式和动态的渲染,如图1所示。对于基于标记语言的文档,2D布局信息并不存在显式格式,而通常需要为不同设备(例如手机/平板/桌面)动态渲染,这使得当前的基于布局的预训练模型难以应用。因此,必须将标记结构引入文档级的预训练,以便应用于下游的VRDU任务。

为此,本文提出了MarkupLM,它通过标记语言为骨架,联合预训练文本和标记语言,用于基于标记语言的VRDU任务。与固定布局文档不同,基于标记语言的文档通过标记结构提供了文档表示学习的另一种视角,因为在预训练过程中,不能直接使用2D位置信息和文档图像信息。
在这里插入图片描述

相反,MarkupLM利用基于树的标记结构来建模文档中不同单元之间的关系。与其他多模态预训练的基于布局的模型类似,MarkupLM有四个输入嵌入层:(1)文本嵌入层,表示令牌序列信息;(2)XPath嵌入层,表示从根节点到当前节点的标记标签序列信息;(3)1D位置嵌入层,表示序列顺序信息;(4)用于下游任务的段落嵌入层。MarkupLM的整体架构如图2所示。XPath嵌入层可以视为与LayoutLM系列模型(Xu 等,2020,2021a,b)相比,替代了2D位置嵌入。为了有效地预训练MarkupLM,我们使用了三种预训练策略。第一种是掩码标记语言建模(MMLM),用于联合学习文本和标记的上下文信息。第二种是节点关系预测(NRP),其中根据标记树的层次结构定义关系。第三种是标题-页面匹配(TPM),其中“ … ”中的内容会随机替换为另一个页面的标题,以便让模型学习它们是否相关。通过这种方式,MarkupLM可以通过语言和标记层级结构的角度更好地理解上下文信息。我们在Web-based结构化阅读理解(WebSRC)数据集(Chen 等,2021)和结构化Web数据提取(SWDE)数据集(Hao 等,2011)上评估了MarkupLM模型。实验结果表明,预训练的MarkupLM在这些任务上显著优于多个强基线模型。

本文的贡献总结如下:

  • 我们提出了MarkupLM,以解决文档表示学习中布局信息不是固定、需要动态渲染的问题。首次在单一框架中对文本和标记信息进行预训练,用于VRDU任务。

  • MarkupLM集成了新的输入嵌入层和预训练策略,已在基于HTML的下游任务中取得了良好的效果。

  • 预训练的MarkupLM模型和代码将公开发布,网址为:https://aka.ms/markuplm。

    2 MarkupLM

    MarkupLM 利用标记语言中的 DOM 树和 XPath 查询语言,获取基于标记语言的文档中的标记流以及自然语言文本(第 2.1 节)。我们提出了一个基于 Transformer 的模型,新增了一个 XPath 嵌入层,用于接收标记序列输入(第 2.2 节),并通过三种不同层次的目标进行预训练,包括掩码标记语言建模(MMLM)、节点关系预测(NRP)和标题-页面匹配(TPM)(第 2.3 节)。

在这里插入图片描述

2.1 DOM 树与 XPath

DOM(文档对象模型)树是标记语言文档(如 HTML 或 XML)在 DOM 视图中的树形结构对象,其中每个节点是一个表示文档部分的对象。

XPath(XML 路径语言)是一种查询语言,用于从基于标记语言的文档中选择节点,它基于 DOM 树,可以方便地定位文档中的节点。在典型的 XPath 表达式中,例如 /html/body/div/li[1]/div/span[2],文本表示节点的标签名称,而下标表示当多个节点具有相同标签名称并且属于同一父节点时,该节点的序号。

我们在图 3 中展示了一个 DOM 树和 XPath 示例,并附有相应的源代码,通过它我们可以清晰地识别文档中所有节点的关系,并且可以看到它们的 XPath 表达式。

2.2 模型架构

为了利用现有的预训练模型并适应基于标记语言的任务(如网页任务),我们使用 BERT(Devlin 等,2019)架构作为编码器骨架,并在原始嵌入层中添加了一个新的输入嵌入层,称为 XPath 嵌入层。MarkupLM 的总体结构和新提出的 XPath 嵌入层如图 2 和图 4 所示。

XPath 嵌入层

对于第 i 个输入标记 x i x_i xi,我们获取其对应的 XPath 表达式,并通过 “/” 将其拆分,得到 XPath 各级节点信息的列表:
x p i = [ ( t 0 i , s 0 i ) , ( t 1 i , s 1 i ) , ⋯   , ( t d i , s d i ) ] x p i = [ ( t 0 i , s 0 i ) , ( t 1 i , s 1 i ) , ⋯   , ( t d i , s d i ) ] xpi=[(t0i,s0i),(t1i,s1i),⋯ ,(tdi,sdi)]xp_i = [(t_0^i, s_0^i), (t_1^i, s_1^i), \cdots, (t_d^i, s_d^i)] xpi=[(t0i,s0i),(t1i,s1i),,(tdi,sdi)]xpi=[(t0i,s0i),(t1i,s1i),,(tdi,sdi)]
其中 d 是该 XPath 的深度,$(t_j^i, s_j^i) $表示 XPath 单元在第 j 层的标签名称和下标。需要注意的是,对于没有下标的单元,我们将 s j i s_j^i sji 设为 0。为了便于进一步处理,我们对 $xp_i $进行截断和填充,使其统一长度为 L。
在这里插入图片描述

将 XPath 表达式转换为 XPath 嵌入的过程如图 4 所示。对于每个$ (t_ji,s_ji)$,我们将其分别输入到第 j 层标签单元嵌入表和第 j 层下标单元嵌入表中,并将两者相加得到第 j 层的单元嵌入 u e j i ue_j^i ueji。我们将这两个嵌入的维度设为 d u d_u du
u e j i = T a g U n i t E m b j ( t j i ) + S u b s U n i t E m b j ( s j i ) u e j i = TagUnitEmb j ( t j i ) + SubsUnitEmb j ( s j i ) ue_j^i=TagUnitEmb_j(t_j^i)+SubsUnitEmb_j(sji)ue_j^i = \text{TagUnitEmb}_j(t_j^i) + \text{SubsUnitEmb}_j(s_j^i) ueji=TagUnitEmbj(tji)+SubsUnitEmbj(sji)ueji=TagUnitEmbj(tji)+SubsUnitEmbj(sji)
我们将所有单元嵌入连接起来,以获得 $x_i $完整 XPath 的中间表示 r i r_i ri
r i = [ u e 0 i ; u e 1 i ; ⋯   ; u e L i ] r i = [ u e 0 i ; u e 1 i ; ⋯   ; u e L i ] ri=[ue0i;ue1i;⋯ ;ueLi]r_i = [ue_0^i; ue_1^i; \cdots; ue_L^i] ri=[ue0i;ue1i;;ueLi]ri=[ue0i;ue1i;;ueLi]
在这里插入图片描述

最后,为了匹配其他嵌入的维度,我们将中间表示 $r_i 输入到一个前馈神经网络( F F N )层,以得到最终的 X P a t h 嵌入 输入到一个前馈神经网络(FFN)层,以得到最终的 XPath 嵌入 输入到一个前馈神经网络(FFN)层,以得到最终的XPath嵌入xe_i$。
x e i = W 2 [ R e L U ( W 1 r i + b 1 ) ] + b 2 , x e i = W 2 [ ReLU ( W 1 r i + b 1 ) ] + b 2 xe_i=W_2[ReLU(W1ri+b1)]+b_2,xe_i = W_2 \left[ \text{ReLU}(W_1ri + b_1) \right] + b_2 xei=W2[ReLU(W1ri+b1)]+b2,xei=W2[ReLU(W1ri+b1)]+b2
其中,
W 1 ∈ R 4 d h × L d u , b 1 ∈ R 4 d h , W_1∈R^{4d_h×Ld_u},b_1∈R^{4d_h}, W1R4dh×Ldu,b1R4dh,

W 2 ∈ R d h × 4 d h , b 2 ∈ R d h , W_2∈R^{d_h×4d_h},b_2∈R^{d_h}, W2Rdh×4dh,b2Rdh,

其中 d h d_h dh 是 MarkupLM 的隐藏层大小。为了简化转换过程,我们也尝试用一个线性变换替代 FFN 层。然而,这一微小的修改使得训练过程变得更加不稳定,并稍微影响了性能,因此我们保留了原始设计。

2.3 预训练目标

为了有效捕捉基于标记语言文档的复杂结构,我们提出了三个不同层次的预训练目标,包括标记级别(MMLM)、节点级别(NRP)和页面级别(TPM)。

掩码标记语言建模
受之前工作(Devlin 等,2019;Xu 等,2020,2021a)的启发,我们提出了一种标记级别的预训练目标——掩码标记语言建模(MMLM),旨在通过标记线索增强语言建模能力。基本上,给定文本和标记输入序列,我们随机选择并替换一些标记为 [MASK],该任务要求模型通过所有标记线索恢复被掩盖的标记。

节点关系预测
虽然 MMLM 任务可以帮助模型提升标记语言建模能力,但模型仍然无法理解由 XPath 嵌入提供的 XPath 信息的语义。利用自然结构的 DOM 树,我们提出了一种节点级别的预训练目标——节点关系预测(NRP),以显式建模一对节点之间的关系。我们首先定义了一组有向节点关系 R∈{self,parent,child,sibling,ancestor,descendent,others}R \in {\text{self}, \text{parent}, \text{child}, \text{sibling}, \text{ancestor}, \text{descendent}, \text{others}}。然后,我们结合每个节点,获取节点对。对于每一对节点,根据节点关系集分配相应的标签,模型需要预测分配的关系标签,使用来自每个节点第一个标记的特征。

标题-页面匹配
除了标记提供的细粒度信息外,句子级别或主题级别的信息也可以在基于标记语言的文档中得到利用。对于基于 HTML 的文档,元素 <title> 可以很好地总结 <body>,这为高级语义提供了监督。为了有效利用这些自监督信息,我们提出了页面级别的预训练目标——标题-页面匹配(TPM)。给定一个基于标记语言的文档的 <body> 元素,我们随机替换 <title> 元素中的文本,并要求模型预测该标题是否被替换,使用 [CLS] 标记的表示进行二分类。

2.4 微调

我们遵循常见预训练语言模型(Devlin 等,2019;Liu 等,2019)的方案,并介绍了两个下游任务的微调方法,包括阅读理解和信息抽取。

对于阅读理解任务,我们将其建模为提取式 QA 任务。问题和上下文被连接在一起作为输入序列,当长度超过阈值时需要进行切片。对于问题中的标记,对应的 XPath 嵌入与 [PAD] 标记相同。我们将每个标记的最后隐藏状态输入到一个二分类线性分类层,以获取起始和结束位置的两个分数,并根据这些分数进行跨度预测,遵循 SQuAD(Rajpurkar 等,2016)中的常规做法。

对于信息抽取任务,我们将其建模为标记分类任务。我们将每个标记的最后隐藏状态输入到一个线性分类层,该层具有 n+1n + 1 个类别,其中 nn 是我们需要抽取的属性数量,额外的类别用于标记那些不属于这些属性的标记。

3 实验

在本工作中,我们将 MarkupLM 框架应用于基于 HTML 的网页,这是最常见的标记语言场景之一。我们使用现有的网页数据集 Common Crawl(CC)进行大规模无标注 HTML 数据的预训练,并在基于网页的结构化阅读理解和信息抽取任务上评估预训练模型。

3.1 数据

Common Crawl
Common Crawl(CC)数据集包含以原始网页数据、元数据提取和文本提取形式存储的数PB网页数据。我们选择了其一个快照,并使用 fasttext(Joulin 等,2017)提供的预训练语言检测模型来筛选非英语页面。具体来说,当模型预测为英语且分类器得分大于 0.6 时,我们才保留页面,其他页面则丢弃。此外,我们仅保留可能包含文本的标签(如 <div><span><li><a> 等),删除那些不包含文本的标签(如 <script><style> 等)以节省存储空间。经过预处理后,我们从 CC 中提取了 2400 万个英文网页作为 MarkupLM 的预训练数据。

WebSRC
Web-based Structural Reading Comprehension(WebSRC)数据集(Chen 等,2021)包含 44万个问答对,这些问答对来自 6500 个网页及其相应的 HTML 源代码、截图和元数据。WebSRC 中的每个问题都需要对网页进行一定的结构化理解才能回答,答案要么是网页上的文本片段,要么是“是/否”类型的回答。在向文本输入中添加额外的“是/否”标记后,WebSRC 可以建模为典型的提取式阅读理解任务。按照原论文(Chen 等,2021),我们选择该数据集的评估指标为精确匹配(EM)、F1 得分(F1)和路径重叠得分(POS)。我们使用官方拆分获取训练集和开发集。需要注意的是,WebSRC 的作者并未公开他们的测试集,因此我们所有的结果都是从开发集获得的。

SWDE
Structured Web Data Extraction(SWDE)数据集(Hao 等,2011)是一个真实世界的网页集合,用于从网页中自动抽取结构化数据。它涉及 8 个垂直领域,80 个网站(每个垂直领域 10 个网站),共计 124,291 个网页(每个网站 200 - 2000 个网页)。任务是从网页中提取与一组给定属性(取决于网页所属的垂直领域)对应的值,比如在图书页面中提取作者的值。遵循之前的工作(Hao 等,2011;Lin 等,2020;Zhou 等,2021),我们选择页面级别的 F1 得分作为该数据集的评估指标。

由于没有官方的训练-测试拆分,我们遵循之前的工作(Hao 等,2011;Lin 等,2020;Zhou 等,2021)对每个垂直领域独立进行训练和评估。在每个垂直领域,我们选择 kk 个连续的种子网站作为训练数据,剩余的 10 - k 个网站作为测试集。需要注意的是,在这个少样本抽取任务中,测试阶段的 10 - k 个网站的页面在训练阶段没有被访问过。这个设置抽象了真实应用场景,其中仅为特定网站提供少量标注数据,我们的目标是在更大规模的未见网站集上推断出属性。最终结果是通过对每个垂直领域的 8 个垂直领域和每个垂直领域的 10 个种子网站排列进行平均得到的,共进行 80 次实验。对于数据的预处理和后处理,我们遵循 Zhou 等(2021)的方法以进行公平比较。
在这里插入图片描述
在这里插入图片描述

3.2 设置

预训练 XPath 嵌入中选择的标签和下标的大小分别为 216 和 1,001,XPath 表达式的最大深度( L L L)为 50,标签单元和下标单元嵌入的维度( d u d_u du)为 32。MMLM 中的标记掩蔽概率和 TPM 中的标题替换概率均为 15%,并且我们不会掩蔽输入序列中与网页标题对应的标记。在 NRP 中,每个样本选择的最大节点对数为 1,000,并且我们将带有非“其他”(例如:self, parent 等)标签的节点对比例限制为 80%,以保持平衡。我们从 RoBERTa 初始化 MarkupLM,并在 8 个 NVIDIA A100 GPU 上训练 30 万步。我们将总批次大小设置为 256,学习率为 5e-5,预热比例为 0.06。选择的优化器是 AdamW(Loshchilov 和 Hutter,2019),其中 ϵ \epsilon ϵ= 1 e − 6 , β 1 = 0.9 , β 2 = 0.98 1e-6,\beta_1=0.9,\beta_2=0.98 1e6,β1=0.9,β2=0.98,权重衰减为 0.01,使用 6% 预热步骤的线性衰减学习率调度器。我们还应用了 FP16、梯度检查点(Chen 等,2016)和 deepspeed(Rasley 等,2020)来减少 GPU 内存消耗并加速训练。

在这里插入图片描述

微调
对于 WebSRC,我们对 MarkupLM 进行了 5 轮微调,批次大小为 64,学习率为 1e-5,预热比例为 0.1。对于 SWDE,我们对 MarkupLM 进行了 10 轮微调,批次大小为 64,学习率为 2e-5,预热比例为 0.1。两项任务中的最大序列长度均设置为 384,其他超参数保持默认。

3.3 结果

WebSRC 的结果如表 1 所示。选择的基线模型包括 Chen 等人(2021)中的 T-PLM、H-PLM 和 V-PLM,具体细节请参考该论文。为了公平比较,我们使用 RoBERTa 重新运行了发布的基线实验。我们观察到,MarkupLM 显著超越了使用相同信息模态的 H-PLM。这强烈表明,与仅仅将更多标签标记添加到输入序列中的 H-PLM 相比,MarkupLM 更好地利用了 XPath 特征,得益于特别设计的嵌入层和预训练目标。此外,MarkupLM 还超过了之前的最先进的 V-PLM 模型,后者需要大量外部资源来渲染 HTML 源代码,并使用来自 Faster R-CNN(Ren 等,2015)的附加视觉特征,表明我们不依赖渲染的 MarkupLM 更加轻量,并且即使没有任何视觉信息,也能更好地学习结构信息。值得注意的是,向 H-PLM 和 V-PLM 中添加 HTML 标签作为输入标记会大大增加输入字符串的长度,因此需要更多的切片操作来满足语言模型的长度限制,这导致了更多的训练样本(约 860k)和更长的训练时间,而 MarkupLM 不会遇到这个问题(只有约 470k 训练样本),因此可以大大减少训练时间。

SWDE 的结果见表 2 和表 3。可以观察到,我们的 MarkupLM 也大幅超越了强基线。与之前的最先进模型 SimpDOM 不同,SimpDOM 明确地将 DOM 树节点之间的关系传入其模型,并添加了大量额外的离散特征(例如,节点是否包含数字或日期),而 MarkupLM 更加简洁,无需耗时的额外网页注释。我们还在表 3 中报告了不同垂直领域的详细统计数据。随着 k 的增长,MarkupLM 获得更多网页作为训练集,因此在得分上有明显的上升趋势。我们还可以看到不同垂直领域之间的方差,因为每个垂直领域的网页数量和类型不同。

3.4 消融研究

为了研究每个预训练目标如何影响 MarkupLM,我们在 WebSRC 上进行了一个消融研究,使用包含 100 万网页的小型训练集。在这个子实验中,我们从 BERT-base-uncased 初始化模型,其他设置保持不变。结果如表 4 所示。根据 #1 中的四个结果,我们看到新提出的训练目标都显著提升了模型的性能,其中提出的 TPM(+4.6% EM)对模型的益处大于 NRP(+2.4% EM)。同时使用这两个目标比单独使用其中任何一个都更有效,EM 提升了 5.3%。我们还可以看到,在将 BERT 替换为更强大的初始模型 RoBERTa 时,性能有所提升(+1.9% EM),从 #1d 到 #2a。最终,我们通过结合所有三个目标并在更大的数据集上进行更好的初始化,得到了最佳模型,如 #2a 和 #2b 之间的对比所示。
在这里插入图片描述

4 相关工作

结合文本、布局和图像信息的多模态预训练在文档AI研究中取得了显著进展,并且已经成为多种VRDU任务中的事实标准方法。尽管在固定布局文档理解任务中取得了巨大进展,但现有的多模态预训练方法无法直接应用于基于标记语言的文档理解,因为基于标记语言的文档的布局信息需要动态渲染,并且可能因软件和硬件的不同而有所不同。因此,标记信息对文档理解至关重要。Ashby 和 Weir(2020)比较了 Text+Tags 方法与其 Text-Only 等效方法在五个基于网页的命名实体识别(NER)数据集上的表现,结果表明深度语言模型的标记增强是必要的。Lin 等人(2020)提出了一种新的两阶段神经方法,称为 FreeDOM。第一阶段通过结合文本和标记信息,为页面中的每个 DOM 节点学习表示。第二阶段使用关系神经网络捕捉较长距离的语义相关性。实验表明,FreeDOM 在不需要通过渲染页面或昂贵的手工特征的情况下,超越了之前的最先进的结果。Zhou 等人(2021)提出了一种新颖的可转移方法 SimpDOM,利用树结构高效地检索每个节点的有用上下文,以解决这一问题。Xie 等人(2021)介绍了一个名为 WebKE 的框架,通过扩展预训练语言模型到标记语言并编码布局语义,从半结构化网页中提取知识三元组。

然而,这些方法并没有充分利用大规模无标签数据和自监督预训练技术来丰富文档表示学习。尽我们所知,MarkupLM 是第一个在一个框架中联合学习文本和标记语言的超大规模预训练模型,用于 VRDU 任务。

5 结论与未来工作

本文提出了 MarkupLM,一种简单而有效的文本和标记语言预训练方法。通过 Transformer 架构,MarkupLM 集成了包括文本嵌入、位置嵌入和 XPath 嵌入在内的不同输入嵌入。此外,我们还提出了专门为理解标记语言设计的新预训练目标。我们在 WebSRC 和 SWDE 数据集上评估了预训练的 MarkupLM 模型。实验结果表明,MarkupLM 在这些任务中显著超越了几个最先进的基线模型。

对于未来的研究,我们将探索在更多数据和计算资源下进行 MarkupLM 的预训练,并扩展其语言能力。此外,我们还将对 MarkupLM 模型进行预训练,针对使用 XML DOM 作为骨架的数字原生 PDF 和 Office 文档进行研究。我们还将探讨 MarkupLM 与基于布局的模型(如 LayoutLM)之间的关系,以深入理解这两种模型是否可以在统一的多视图和多任务设置下进行预训练,并且这些模型之间的知识是否可以相互迁移,从而更好地理解结构信息。

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

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

相关文章

了解AI绘图,Stable Diffusion的使用

AI绘图对GPU算力要求较高。 个人电脑配置可参考&#xff1a; CPU&#xff1a;14600kf 盒装 显卡&#xff1a;RTX 4080金属大师 OC&#xff0c;16G显存 主板&#xff1a;z790吹雪d4 内存&#xff1a;芝奇皇家戟4000c18,162G 硬盘&#xff1a;宏基gm7000 1T 散热&#xff1a;追风…

Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行

Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…

DeepSeek LLM 论文解读:相信长期主义开源理念可扩展大语言模型(DeepSeek 吹响通用人工智能的号角)

论文链接&#xff1a;DeepSeek LLM: Scaling Open-Source Language Models with Longtermism&#xff08;相信长期主义开源理念可扩展大语言模型&#xff09; 目录 摘要一、数据处理&#xff08;一&#xff09;数据清洗与丰富&#xff08;二&#xff09;分词器与词汇设置 二、模…

fastchat 部署大模型

大模型实战--Llama3.1大模型部署及启动Web UI、OpenAI API实操 - 简书一、背景 随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;已成为自然语言处理领域的核心工具。这些模型以其强大的语言理解和生成能力&#xff0c;...ht…

【安当产品应用案例100集】037-强化OpenVPN安全防线的卓越之选——安当ASP身份认证系统

在当前数字化时代&#xff0c;网络安全已成为企业发展的重要组成部分。对于使用OpenVPN的企业而言&#xff0c;确保远程访问的安全性尤为重要。安当ASP身份认证系统凭借其强大的功能和便捷的集成方式&#xff0c;为OpenVPN的二次登录认证提供了理想的解决方案&#xff0c;特别是…

协议-ACLLite-ffmpeg

是什么&#xff1f; FFmpeg是一个开源的多媒体处理工具包&#xff0c;它集成了多种功能&#xff0c;包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成&#xff0c;其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…

树和二叉树_7

树和二叉树_7 一、leetcode-102二、题解1.引库2.代码 一、leetcode-102 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 样例输入&#xff1a;root [3,9,20,null,nu…

Rocky Linux9安装Zabbix7.0(精简版)

Linux 系统版本 Rocky Linux release 9.3 (Blue Onyx) 注意&#xff1a;zabbix 7以上版本不支持CentOS 7系统&#xff0c;需要CentOS 8以上&#xff0c; 本教程支持CentOS9及Rocky Linux 9 在Rocky Linux release 9.3测试通过 Linux环境准备 关闭防火墙和selinux #关闭防…

网络分析工具—WireShark的安装及使用

Wireshark 是一个广泛使用的网络协议分析工具&#xff0c;常被网络管理员、开发人员和安全专家用来捕获和分析网络数据包。它支持多种网络协议&#xff0c;能够帮助用户深入理解网络流量、诊断网络问题以及进行安全分析。 Wireshark 的主要功能 数据包捕获与分析&#xff1a; …

C++开发(软件开发)常见面试题

目录 1、C里指针和数组的区别 2、C中空指针请使用nullptr不要使用NULL 3、http/https区别和头部结构&#xff1f; 4、有了mac地址为什么还要ip地址&#xff1f;ip地址的作用 5、有了路由器为什么还要交换机&#xff1f; 6、面向对象三大特性 7、友元函数 8、大端小端 …

WEB攻防-文件下载文件读取文件删除目录遍历目录穿越

目录 一、文件下载漏洞 1.1 文件下载案例&#xff08;黑盒角度&#xff09; 1.2 文件读取案例&#xff08;黑盒角度&#xff09; 二、文件删除 三、目录遍历与目录穿越 四、审计分析-文件下载漏洞-XHCMS 五、审计分析-文件读取漏洞-MetInfo-函数搜索 六、审计分析-…

MySQL数据库(七)SQL 优化

一 插入数据 采用方法 1 批量插入 2 手动提交事务 3 主键顺序插入 4* 使用load插入指令数据 二 主键优化 1 数据组织方式 在InnoDB存储引擎中&#xff0c;表中的数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表 2 页分裂 页可以为空也可…

使用EVE-NG实现单臂路由

一、基础知识 1.三层vlan vlan在三层环境中通常用作网关vlan配上ip网关内部接口ip 2.vlan创建步骤 创建vlan将接口划分到不同的vlan给vlan配置ip地址 二、项目案例 1、项目拓扑 2、项目实现 PC1配置 配置PC1IP地址为192.168.1.10/24网关地址为192.168.1.1 ip 192.168.1…

本地部署DeepSeek(Mac版本,带图形化操作界面)

一、下载安装&#xff1a;Ollama 官网下载&#xff1a;Download Ollama on macOS 二、安装Ollama 1、直接解压zip压缩包&#xff0c;解压出来就是应用程序 2、直接将Ollama拖到应用程序中即可 3、启动终端命令验证 # 输入 ollama 代表已经安装成功。 4、下载模型 点击模型…

Linux LED 实验

一、Linux 下 LED 灯驱动原理 其实跟裸机实验很相似&#xff0c;只不过要编写符合 Linux 的驱动框架。 1. 地址映射 MMU全称 Memory Manage Unit&#xff0c;即内存存储单元。 MMU主要功能为&#xff1a; 1&#xff09;完成虚拟空间到物理空间的映射&#xff1b; 2&#x…

【Redis】redis 存储的列表如何分页和检索

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血

本次更新重新梳理了回复逻辑规则&#xff0c;无任何工作流&#xff0c;一共3.2k字细节描述。具体效果可以看视频&#xff0c;同时也比对了gpt-o1、gpt-o3mini、deepseek-r1-67BI&#xff0c;从数学建模题目解答上来看&#xff0c;目前我的数模AI智能体具有明显优势。 AI智能体优…

cursor指令工具

Cursor 工具使用指南与实例 工具概览 Cursor 提供了一系列强大的工具来帮助开发者提高工作效率。本指南将通过具体实例来展示这些工具的使用方法。 1. 目录文件操作 1.1 查看目录内容 (list_dir) 使用 list_dir 命令可以查看指定目录下的文件结构: 示例: list_dir log…

【玩转全栈】----Django模板语法、请求与响应

目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言 像之前那个页面&#xff0c;太过简陋&#xff0c;而且一个完整…

C++,设计模式,【单例模式】

文章目录 一、模式定义与核心价值二、模式结构解析三、关键实现技术演进1. 基础版(非线程安全)2. 线程安全版(双重检查锁)3. 现代C++实现(C++11起)四、实战案例:全局日志管理器五、模式优缺点深度分析✅ 核心优势⚠️ 潜在缺陷六、典型应用场景七、高级实现技巧1. 模板化…