LayoutLMv1

近年来,预训练技术在各种NLP任务中得到了成功的验证。尽管NLP应用程序广泛使用预训练模型,但它们几乎只关注文本级操作,而忽略了对文档图像理解至关重要的布局和样式信息。在本文中,我们提出了LayoutLM来联合建模文本和布局信息在扫描文档图像之间的交互,这有利于大量的现实世界的文档图像理解任务,如从扫描文档中提取信息。此外,我们还利用图像特征将单词的视觉信息合并到LayoutLM中。据我们所知,这是第一次在文档级预训练的单一框架中共同学习文本和布局。它在几个下游任务中实现了新的最先进的结果,包括表单理解(从70.72到79.27)、收据理解(从94.02到95.24)和文档图像分类

•信息系统→商业智能;•计算方法→信息提取;转让学习;•应用计算→文档分析。

1 INTRODUCTION

文档AI或文档智能是一个相对较新的研究主题,涉及自动阅读、理解和分析业务文档的技术。业务文档是提供与公司内部和外部事务相关的详细信息的文件,如图1所示。它们可能是数字化的,以电子文件的形式出现,也可能是书面或印刷在纸上的扫描形式。商业文档的一些常见示例包括采购订单、财务报告、商业电子邮件、销售协议、供应商合同、信件、发票、收据、简历等等。商业文件对公司的效率和生产力至关重要。业务文档的确切格式可能会有所不同,但信息通常以自然语言表示,并且可以以各种方式组织,从纯文本、多列布局到各种表格/表单/图形。由于布局和格式的多样性,扫描文档图像的质量差以及模板结构的复杂性,理解商业文档是一项非常具有挑战性的任务。

如今,许多公司通过手工从业务文档中提取数据,这既耗时又昂贵,同时还需要手工定制或配置。每种类型文档的规则和工作流通常都需要硬编码,并在更改特定格式或处理多种格式时进行更新。为了解决这些问题,文档人工智能模型和算法被设计为自动分类、提取和结构化业务文档中的信息,加速自动化文档处理工作流。当代的文档人工智能方法通常建立在深度神经网络上,从计算机视觉的角度或自然语言处理的角度,或两者的结合。早期的尝试通常集中在检测和分析文档的某些部分,例如表格区域。[7]首先提出了一种基于卷积神经网络(CNN)的PDF文档表检测方法。之后[21,24,29]还利用了更先进的Faster R-CNN模型[19]或Mask R-CNN模型[9],进一步提高了文档布局分析的准确性。此外,[28]提出了一个端到端、多模态、全卷积网络,利用预训练的NLP模型中的文本嵌入,从文档图像中提取语义结构。最近,[15]引入了一种基于图卷积网络(GCN)的模型,将文本信息和视觉信息结合起来,从商业文档中提取信息。尽管这些模型在深度神经网络的文档人工智能领域取得了重大进展,但这些方法大多面临两个局限性:(1)它们依赖于少数人类标记的训练样本,而没有充分探索使用大规模无标记训练样本的可能性。(2)他们通常利用预训练的CV模型或NLP模型,但不考虑文本和布局信息的联合训练。因此,研究文本和布局的自我监督预训练如何在文档人工智能领域有所帮助是很重要的。

为此,我们提出了LayoutLM,一种简单而有效的文本和布局预训练方法,用于文档图像理解任务。受BERT模型[4]的启发,输入文本信息主要由文本嵌入和位置嵌入表示,LayoutLM进一步增加了两种类型的输入嵌入:(1)二维位置嵌入,表示标记在文档中的相对位置;(2)在文档中嵌入扫描的令牌图像。LayoutLM的体系结构如图2所示。我们添加这两种输入嵌入是因为二维位置嵌入可以捕获文档中标记之间的关系,同时图像嵌入可以捕获一些外观特征,如字体方向、类型和颜色。此外,我们采用了LayoutLM的多任务学习目标,包括掩膜视觉语言模型(MVLM)损失和多标签文档分类(MDC)损失,这进一步加强了文本和布局的联合预训练。在这项工作中,我们的重点是基于扫描文档图像的文档预训练,而数字生成的文档挑战性较小,因为它们可以被认为是不需要OCR的特殊情况,因此不在本文的范围之内。具体来说,LayoutLM是在IIT-CDIP测试集1.02[14]上进行预训练的,该测试集包含超过600万个扫描文档和1100万个扫描文档图像。扫描的文件种类繁多,包括信件、备忘录、电子邮件、文件夹、表格、手写、发票、广告、预算、新闻文章、演示文稿、科学出版物、问卷调查、简历、科学报告、说明书等,是大规模自我监督预培训的理想选择。我们选择三个基准数据集作为下游任务来评估预训练的LayoutLM模型的性能。首先是用于空间布局分析和形式理解的fundd dataset3[10]。第二个是用于扫描收据信息提取的SROIE数据。第三种是用于文档图像分类的RVL-CDIP数据集5[8],由16类40万张灰度图像组成。实验表明,在这些基准数据集上,预训练的LayoutLM模型显著优于几种SOTA预训练模型,证明了在文档图像理解任务中对文本和布局信息进行预训练的巨大优势。

本文的贡献总结如下:

•首次在单一框架中对扫描文档图像中的文本和布局信息进行预训练。图像功能也被用来实现新的最先进的结果。
•LayoutLM使用遮罩视觉语言模型和多标签文档分类作为训练目标,在文档图像理解任务中显著优于几种SOTA预训练模型。
•代码和预训练模型可在https://aka.ms/layoutlm公开获取更多下游任务。

2 LAYOUTLM

在本节中,我们将简要回顾BERT模型,并介绍如何在LAYOUTLM框架中扩展以联合建模文本和布局信息。

图1:不同布局和格式的业务文档扫描图像


图2:flayoutlm的示例,其中二维布局和图像嵌入集成到原始BERT架构中。LayoutLM嵌入和Faster R-CNN的图像嵌入一起完成下游任务。

2.1 BERT模型

BERT模型是一种基于注意力的双向语言建模方法。实验证明,BERT模型能够有效地从具有大规模训练数据的自监督任务中转移知识。BERT的架构基本上是一个多层双向变压器编码器。它接受一系列令牌并堆叠多层以生成最终表示。详细地说,给定一组使用wordpiece处理的标记,输入嵌入通过将相应的词嵌入、位置嵌入和段嵌入相加来计算。然后,这些输入嵌入通过多层双向Transformer传递,该Transformer可以通过自适应注意机制生成上下文化表示。在BERT框架中有两个步骤:预训练和微调。在预训练过程中,模型使用两个目标来学习语言表示:掩模语言建模(mask language Modeling, MLM)和下一个句子预测(Next Sentence Prediction, NSP),其中MLM随机屏蔽一些输入标记,目标是恢复这些被屏蔽的标记,NSP是一个以一对句子作为输入并分类它们是否为两个连续句子的二元分类任务。在微调中,使用特定于任务的数据集以端到端方式更新所有参数。BERT模型已成功应用于一组NLP任务中。

2.2 The LayoutLM Model

尽管类bert模型在一些具有挑战性的NLP任务中成为了最先进的技术,但它们通常只对任何类型的输入利用文本信息。当涉及到视觉丰富的文档时,有更多的信息可以编码到预训练的模型中。因此,我们建议利用文档布局中视觉上丰富的信息,并将它们与输入文本对齐。基本上,有两种类型的特性可以大大改善视觉丰富的文档中的语言表示,它们是:

文档布局信息。很明显,单词在文档中的相对位置对语义表示有很大的影响。以表单理解为例,给定表单中的一个键(例如,“Passport ID:”),其对应的值更可能在其右侧或下方,而不是在左侧或上方。因此,我们可以将这些相对位置信息嵌入到二维位置表示中。基于Transformer内部的自关注机制,将2-D位置特征嵌入到语言表示中将更好地使布局信息与语义表示保持一致。

视觉信息。与文本信息相比,视觉信息是文档表示的另一个重要特征。通常,文档包含一些可视信号来显示文档段的重要性和优先级。视觉信息可以用图像特征表示,并有效地用于文档表示。对于文档级视觉特征,整个图像可以表示文档的布局,这是文档图像分类的基本特征。对于单词级视觉特征,粗体、下划线和斜体等样式也是序列标记任务的重要提示。因此,我们认为将图像特征与传统的文本表示相结合可以为文档带来更丰富的语义表示。

2.3模型架构

为了利用现有的预训练模型并适应文档图像理解任务,我们使用BERT架构作为主干,并添加两个新的输入嵌入:二维位置嵌入和图像嵌入。

二维位置嵌入。与位置嵌入在序列中模拟单词位置不同,二维位置嵌入旨在模拟文档中的相对空间位置。为了表示扫描文档图像中元素的空间位置,我们将文档页面视为具有顶左原点的坐标系统。在此设置中,边界框可以精确定义为(x0, y0, x1, y1),其中(x0, y0)对应于边界框中左上角的位置,(x1, y1)代表右下角的位置。我们增加了四个位置嵌入层和两个嵌入表,其中表示相同维度的嵌入层共享相同的嵌入表。这意味着我们在嵌入表X中查找x0和x1的位置嵌入,并在表Y中查找y0和y1。

ImageEmbedding。为了利用文档的图像特征并使图像特征与文本对齐,我们在语言表示中添加了图像嵌入层来表示图像特征。更详细地说,使用OCR结果中每个单词的边界框,我们将图像分成几个部分,它们与单词具有一对一的对应关系。我们使用Faster R-CNN[19]模型中的这些图像片段作为标记图像嵌入来生成图像区域特征。对于[CLS]令牌,我们还使用Faster R-CNN模型使用整个扫描文档图像作为感兴趣区域(ROI)来生成嵌入,以使需要[CLS]令牌表示的下游任务受益。

2.4预训练LayoutLM任务

任务#1:屏蔽视觉语言模型。受mask语言模型的启发,我们提出了以二维位置嵌入和文本嵌入为线索学习语言表示的蒙面视觉语言模型(MVLM)。在预训练过程中,我们随机屏蔽一些输入标记,但保留相应的二维位置嵌入,然后训练模型来预测给定上下文的被屏蔽标记。这样,LayoutLM模型不仅可以理解语言上下文,还可以利用相应的二维位置信息,从而弥合了视觉和语言模式之间的差距。

任务#2:多标签文档分类。对于文档图像理解,许多任务需要模型生成高质量的文档级表示。由于IIT-CDIP测试集包括每个文档图像的多个标签,我们还在预训练阶段使用多标签文档分类(MDC)损失。给定一组扫描的文档,我们使用文档标签来监督预训练过程,以便模型可以聚类来自不同领域的知识并生成更好的文档级表示。由于MDC损失需要每个文档图像的标签,而这些标签对于较大的数据集可能不存在,因此在预训练期间它是可选的,将来可能不会用于预训练较大的模型。我们将在第3节中比较MVLM和MVLM MDC的性能。

2.5 Fine-tuning LayoutLM

预先训练的LayoutLM模型在三个文档图像理解任务上进行了微调,包括表单理解任务、收据理解任务和文档图像分类任务。对于表单和收据理解任务,LayoutLM预测每个令牌的{B, I, E, S, O}标记,并使用顺序标记来检测数据集中的每种类型的实体。对于文档图像分类任务,LayoutLM使用[CLS]令牌的表示来预测类标签。

3 EXPERIMENTS

3.1 Pre-training Dataset

预训练模型的性能在很大程度上取决于数据集的规模和质量。因此,我们需要一个大规模的扫描文档图像数据集来预训练LayoutLM模型。我们的模型是在IIT-CDIP测试集1.0上进行预训练的,该测试集包含超过600万个文档,其中包含超过1100万个扫描文档图像。此外,每个文档都有存储在XML文件中的相应文本和元数据。文本是通过对文档图像应用OCR产生的内容。元数据描述文档的属性,例如唯一标识和文档标签。虽然元数据包含错误和不一致的标签,但这个大规模数据集中扫描的文档图像非常适合用于预训练我们的模型。

3.2微调数据集

fundd数据集。我们在fundd数据集上评估了我们的方法,用于在噪声扫描文档中进行表单理解。这个数据集包括199个真实的、完全注释的、扫描的表单,有9707个语义实体和31485个单词。这些形式被组织成一个相互连接的语义实体列表。每个语义实体包括一个唯一标识符、一个标签(即问题、答案、标题或其他)、一个边界框、一个与其他实体的链接列表和一个单词列表。数据集分为149个训练样本和50个测试样本。我们采用单词级F1分数作为评价指标。SROIE数据集。我们还在SROIE数据集上评估了我们的模型,用于收据信息提取(任务3)。该数据集包含626个用于训练的收据和347个用于测试的收据。每个收据都组织为带有边界框的文本行列表。每张收据都标有四种类型的实体:{公司、日期、地址、总数}。评估指标是F1分数中实体识别结果的精确匹配。TheRVL-CDIPDataset。RVL-CDIP数据集由16类400,000张灰度图像组成,每类25,000张图像。有32万张训练图像,4万张验证图像和4万张测试图像。图像被调整大小,因此它们的最大尺寸不超过1000像素。这16个类包括{信件、表格、电子邮件、手写、广告、科学报告、科学出版物、说明书、文件夹、新闻文章、预算、发票、演示文稿、问卷、简历、备忘录}。评估指标是总体分类精度。

3.3 Document Pre-processing

为了利用每个文档的布局信息,我们需要获得每个令牌的位置。然而,预训练数据集(IIT-CDIP测试集)只包含纯文本,而缺少相应的边界框。在这种情况下,我们重新处理扫描的文档图像以获得必要的布局信息。与IIT-CDIP Test Collection中的原始预处理一样,我们通过对文档图像应用OCR来处理数据集。不同之处在于,我们既获得了被识别的单词,也获得了它们在文档图像中的对应位置。借助开源OCR引擎Tesseract6,我们可以轻松地获得识别和二维位置。我们以hOCR格式存储OCR结果,这是一种标准规范格式,它使用分层表示清晰地定义了单个文档图像的OCR结果。

3.4 Model Pre-training

我们用预训练的BERT基模型初始化LayoutLM模型的权重。具体来说,我们的BASE模型具有相同的架构:一个具有768个隐藏尺寸的12层Transformer和12个注意头,其中包含大约113M个参数。因此,我们使用BERT基模型初始化模型中除了二维位置嵌入层之外的所有模块。对于LARGE设置,我们的模型有一个24层的Transformer,包含1,024个隐藏大小和16个注意头,它由预训练的BERT LARGE(lager)模型初始化,包含大约343M个参数。根据[4],我们选择15%的输入令牌(token)进行预测。我们在80%的时间里用[MASK]代币替换这些被屏蔽的代币,在10%的时间里用随机代币替换,在10%的时间里用不变的代币替换。然后,利用交叉熵损失预测相应的令牌。

此外,我们还添加了具有四个嵌入表示(x0, y0, x1, y1)的二维位置嵌入层,其中(x0, y0)对应于边界框中左上角的位置,(x1, y1)代表右下角的位置。考虑到文档布局在不同的页面大小中可能会有所不同,我们将实际坐标缩放为“虚拟”坐标:将实际坐标缩放为从0到1000的值。此外,我们还使用ResNet-101模型作为Faster R-CNN模型的骨干网络,该模型在Visual Genome数据集上进行预训练[12]。我们在8个NVIDIA Tesla V100 32GB gpu上训练我们的模型,总批量大小为80个。Adam优化器使用初始学习率为5e-5和线性衰减学习率调度。BASE模型在11M个文档上完成一个历元(epoch)需要80小时,而LARGE模型完成一个历元需要近170小时。

3.5针对任务的微调

我们在三个文档图像理解任务上评估LayoutLM模型:表单理解、收据理解和文档图像分类。我们遵循典型的调优策略,并在特定于任务的数据集上以端到端方式更新所有参数。

形式的理解。这项任务需要提取和构建表单的文本内容。它旨在从扫描的表单图像中提取键值对。更详细地说,该任务包括两个子任务:语义标记和语义链接。语义标注是将词聚合为语义实体并为其分配预定义标签的任务。语义连接是预测语义实体之间关系的任务。在这项工作中,我们关注的是语义标注任务,而语义链接不在研究范围之内。为了在这个任务上对LayoutLM进行微调,我们将语义标记视为一个序列标记问题。我们将最终的表示传递到一个线性层,然后是一个softmax层来预测每个令牌的标签。该模型训练100个epoch, batch size为16,学习率为5e-5。

收据的理解。该任务需要根据扫描的收据图像填充几个预定义的语义槽。例如,给定一组收据,我们需要填写特定的栏位(例如,公司、地址、日期和总数)。与需要标记所有匹配实体和键值对的表单理解任务不同,语义槽的数量是用预定义的键固定的。因此,模型只需使用序列标记方法预测相应的值即可。

文档图像分类。给定一个视觉丰富的文档,此任务旨在预测每个文档图像的相应类别。与现有的基于图像的方法不同,我们的模型不仅包括图像表示,还包括使用LayoutLM中的多模态架构的文本和布局信息。因此,我们的模型可以更有效地结合文本、布局和图像信息。为了在这个任务上微调我们的模型,我们将LayoutLM模型的输出和整个图像嵌入连接起来,然后是一个用于类别预测的softmax层。我们对模型进行了30个epoch的微调,批量大小为40,学习率为25 -5。

3.6结果

形式的理解。我们在fundd数据集上评估表单理解任务。实验结果如表1所示。我们将LayoutLM模型与两个SOTA预训练的NLP模型:BERT和RoBERTa[16]进行比较。BERT BASE模型在F1中达到0.603,而LARGE模型达到0.656。与BERT相比,RoBERTa在这个数据集上的表现要好得多,因为它是使用更大的数据和更多的epoch进行训练的。由于时间限制,我们对LayoutLM给出了4种设置,分别是500K文档页6页、1M 6页、2M 6页和11M 2页。可以观察到,LayoutLM模型实质上优于现有的SOTA预训练基线。在BASE架构下,使用11M训练数据的LayoutLM模型在F1中达到了0.7866,远远高于参数大小相似的BERT和RoBERTa。此外,我们还在预训练步骤中添加了MDC损失,它确实对fundd数据集带来了实质性的改进。最后,LayoutLM模型在同时使用文本、布局和图像信息时达到了0.7927的最佳性能。此外,我们还在fundd数据集上对不同数据和时代的LayoutLM模型进行了评估,结果如表2所示。对于不同的数据设置,我们可以看到,随着预训练步骤中训练的epoch越多,整体精度单调增加。此外,随着更多的数据被输入LayoutLM模型,准确性也得到了提高。由于fundd数据集只包含149张用于微调的图像,结果证实文本和布局的预训练对于扫描文档的理解是有效的,特别是在资源设置较低的情况下。

 

此外,我们比较了LayoutLM模型的不同初始化方法,包括从头开始,BERT和RoBERTa。表3中的结果显示,用RoBERTaBASE初始化的LayoutLMBASE模型在F1中比BERTBASE高出2.1点。对于LARGE设置,使用RoBERTaLARGE初始化的layoutllarge模型比BERTLARGE模型进一步提高了1.3个点。未来我们会用RoBERTa作为初始化来预训练更多的模型,特别是LARGE的设置。

收据的理解。我们使用SROIE数据集评估收据理解任务。结果如表4所示。由于我们在SROIE中只测试关键信息提取任务的性能,因此我们希望消除错误OCR结果的影响。因此,我们使用ground truth OCR对训练数据进行预处理,并使用基线模型(BERT & RoBERTa)和LayoutLM模型运行一组实验。结果表明,使用11M张文档图像训练的layoutllarge模型F1得分为0.9524,明显优于竞赛排行榜第一名。该结果还验证了预训练的LayoutLM不仅在域内数据集(FUNSD)上表现良好,而且在域外数据集(如SROIE)上表现优于几个强基线。

文档图像分类。最后,我们使用RVL-CDIP数据集评估文档图像分类任务。文档图像不同于其他自然图像,因为文档图像中的大部分内容都是各种样式和布局的文本。传统上,经过预训练的基于图像的分类模型比基于文本的模型表现得更好,如表5所示。我们可以看到BERT或RoBERTa的表现都不如基于图像的方法,说明文本信息不足以完成这项任务,它仍然需要布局和图像特征。我们通过使用LayoutLM模型来解决这个问题。结果表明,即使没有图像特征,LayoutLM仍然优于基于图像的单一模型方法。在整合图像嵌入后,LayoutLM的准确率达到了94.42%,明显优于几种SOTA基线的文档图像分类。可以观察到,我们的模型在“电子邮件”类别中表现最好,而在“表单”类别中表现最差。我们将进一步研究如何利用预训练的LayoutLM和图像模型,以及在LayoutLM模型的预训练步骤中涉及图像信息。

4.相关工作

文献分析与识别(DAR)的研究可以追溯到20世纪90年代初。主流的方法可以分为三类:基于规则的方法、传统的机器学习方法和深度学习方法。

4.1基于规则的方法

基于规则的方法[6,13,18,23]包含两种分析方法:自底向上和自顶向下。自下而上的方法[5,13,23]通常检测黑色像素的连通分量作为文档图像中的基本计算单元,文档分割过程是通过不同的启发式方法将它们组合成更高层次的结构,并根据不同的结构特征对其进行标记。Docstrum算法[18]是最早成功的基于连通成分分析的自下而上算法之一。它将连接的组件分组在一个极性结构上,从而得出最终的分割。[23]使用不同组件之间的特殊距离度量来构建物理页面结构。他们通过使用启发式算法和路径压缩算法进一步降低了时间复杂度。自顶向下的方法通常递归地将页面拆分为列、块、文本行和标记。[6]提出用所有像素中的黑色像素替换基本单元,该方法使用递归的X-Y切割算法对文档进行分解,建立X-Y树,使复杂的文档更容易分解。尽管这些方法在某些文档上表现良好,但它们需要大量的人力来找出更好的规则,而且有时无法推广到来自其他来源的文档。因此,在DAR研究中利用机器学习方法是必然的。

4.2机器学习方法

随着传统机器学习的发展,统计机器学习方法[17,22]在过去十年已经成为文档分割任务的主流。[22]将文档的布局信息视为解析问题,基于基于语法的损失函数全局搜索最优解析树。他们利用机器学习方法来选择特征,并在解析过程中训练所有参数。同时,人工神经网络[17]已被广泛应用于文献分析和识别。大部分的努力都致力于识别孤立的手写和印刷字符,并取得了广泛认可的成功成果。除了人工神经网络模型,支持向量机和GMM[27]也被用于文档布局分析任务。对于机器学习方法来说,设计手工制作的特征通常很耗时,而且很难获得高度抽象的语义上下文。此外,这些方法通常依赖于视觉线索,而忽略了文本信息。

4.3深度学习方法

最近,深度学习方法已经成为许多机器学习问题的主流和事实上的标准。从理论上讲,它可以通过多层神经网络的叠加来拟合任意函数,并在许多研究领域得到了验证。[28]将文档语义结构提取任务视为逐像素分类问题。他们提出了一个考虑视觉和文本信息的多模态神经网络,而这项工作的局限性在于他们只使用网络来辅助启发式算法对候选边界框进行分类,而不是端到端方法。[26]提出了一种用于移动和云服务的轻量级文档布局分析模型。该模型使用图像的一维信息作为参考,并将其与使用二维信息的模型进行比较,在实验中达到了相当的精度。[11]使用了一个完全卷积的编码器-解码器网络来预测分割掩码和边界框,该模型明显优于基于顺序文本或文档图像的方法。[24]将上下文信息纳入Faster R-CNN模型,该模型涉及文章内容的固有局域性,以提高区域检测性能。现有的深度学习方法通常面临两个局限性:(1)模型通常依赖于有限的标记数据,而留下大量未标记的数据。(2)目前的深度学习模型通常利用预训练的CV模型或NLP模型,但没有考虑文本和布局的联合预训练。LayoutLM解决了这两个限制,与以前的基线相比,实现了更好的性能。

5结论及未来工作

我们提出了LayoutLM,一个简单而有效的预训练技术,在一个框架中包含文本和布局信息。LayoutLM以Transformer体系结构为主干,利用多模态输入,包括令牌嵌入、布局嵌入和图像嵌入。同时,该模型可以很容易地基于大规模未标记的扫描文档图像进行自监督训练。我们在三个任务上评估LayoutLM模型:表单理解、收据理解和扫描文档图像分类。实验表明,LayoutLM在这些任务中大大优于几个SOTA预训练模型。对于未来的研究,我们将研究具有更多数据和更多计算资源的预训练模型。此外,我们还将使用带有文本和布局的LARGE架构来训练LayoutLM,并在预训练步骤中涉及图像嵌入。此外,我们将探索新的网络架构和其他自我监督的训练目标,这可能会进一步释放LayoutLM的力量。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值