信息检索(34):Wikiformer: Pre-training with Structured Information of Wikipedia for Ad-Hoc Retrieval


原文链接:https://arxiv.org/abs/2312.10661
(2024)


标题

Wikipedia
结构化信息预训练

1 摘要

随着深度学习和自然语言处理技术的发展,预训练语言模型已被广泛用于解决信息检索(IR)问题。受益于预训练和微调范例,这些模型实现了最先进的性能。
在之前的工作中,维基百科中的纯文本已广泛用于预训练阶段。然而,维基百科中丰富的结构化信息,如标题、摘要、层次标题(多级标题)结构、文章之间的关系、参考文献、超链接结构以及写作组织等尚未得到充分挖掘。在本文中,我们根据维基百科的结构化知识设计了四个针对 IR 任务的预训练目标。与现有的预训练方法相比,我们的方法可以通过利用维基百科中人工编辑的结构化数据更好地捕获训练语料库中的语义知识。多个 IR 基准数据集的实验结果表明,与现有的强检索基线相比,我们的模型在零样本和微调设置中都具有卓越的性能。此外,生物医学和法律领域的实验结果表明,与之前的模型相比,我们的方法在垂直领域取得了更好的性能,特别是在需要长文本相似性匹配的场景中。该代码可在 https://github.com/oneal2000/Wikiformer 上获取。

2 引言

四个预训练目标:
1)SRR:Simulated Re-ranking
2)RWI:Representative Words Identification
3)ATI:Representative Words Identification
4)LTM: Long Texts Matching

预训练语言模型(PLM)在自然语言处理(NLP)领域取得了巨大成功(Devlin et al 2018; Vaswani et al 2017; Yang et al 2019; Liu et al 2019; Yasunaga, Leskovec, and Liang 2022 )。
这些模型首先在大规模未标记文本语料库上进行预训练,然后针对某些下游任务进行微调。预训练和微调范式在许多下游 NLP 任务中取得了最先进的性能。最近,它也引起了信息检索(IR)界的关注。除了直接应用 PLM 来解决下游 IR 任务(Nogueira 和 Cho 2019)之外,IR 研究人员还开发了几种针对 IR 任务的预训练方法,特别是即席搜索(Ma et al 2021a,d,b;Chang et al 2020)。这些研究在针对下游任务进行 IR 特定预训练模型方面显示出有希望的结果。

维基百科作为最大的在线知识库之一,被广泛用作预训练语料库。在之前的工作中,IR 研究人员利用维基百科中丰富的文本内容设计了几种预训练任务。例如,PROP(Ma et al 2021a)利用维基百科中的纯文本,而HARP(Ma et al 2021d)利用网页中的超链接和锚文本。然而,维基百科的结构化信息带来了更丰富的知识,据我们所知,现有研究尚未利用这些知识。例如,维基百科的摘要部分是一篇文章的摘要。当用户的查询是文章的标题时,与同一文章中的其他部分相比,摘要部分更有可能匹配用户的信息需求。此外,维基百科上的每一篇文章都有分层标题(多级标题)结构,副标题始终是相应部分的代表词或摘要。此外,同一节的不同小节也有相似的想法。不同文章之间的关系还包含丰富的信息,例如,“另请参阅”部分将一篇文章链接到包含附加或类似信息的其他文章。这种结构化知识是否有利于 IR 的预训练模型仍然未知。

为了更好地将维基百科的知识融入到预训练阶段,我们提出了一个名为 Wikiformer 的框架,在预训练阶段充分利用维基百科的结构化信息。 Wikiformer 主要包括四个预训练任务:1)模拟重排序(SRR)、2)代表词识别(RWI)、3)摘要文本识别(ATI)和4)长文本匹配(LTM)。这些任务使用标题、副标题、摘要、超链接和标题层次结构来构建伪查询文档对,用于检索模型的预训练。它们每个都从不同的角度捕捉了不同粒度的检索和排序的需求。
为了评估上述预训练任务的有效性,我们在零样本和微调设置的几个 IR 基准上测试了我们的模型的性能。在零样本设置中,不使用监督数据进行微调。由于微调过程逐渐更新 PLM 的参数,因此零样本性能是评估预训练方法有效性的更直接指标。实验结果表明,无论有或没有人工注释数据,Wikiformer 都可以显着优于传统方法、最先进的神经排序模型以及多个领域中现有的 IR 预训练模型。
总之,我们工作的贡献有三个方面:
• 我们提出了一种新颖的预训练框架,即 Wikiformer,它充分利用了维基百科的结构化知识。

• 我们在预训练期间基于伪查询-文档对采样提出了四个学习目标。这些目标专为检索和文档重新排名等 IR 任务而定制,可以更好地帮助模型分析查询和文档之间的相关性。

• 我们在多个IR 基准数据集上评估Wikiformer,实验结果表明Wikiformer 在多个领域的零样本和微调设置方面均优于最先进的方法。

3 相关工作

预训练语言模型
预训练语言模型(PLM)近年来取得了巨大成功(Devlin et al 2018;Vaswani et al 2017年;杨等人2019;刘等人2019;安永、莱斯科维奇和梁 2022)。这些模型首先在大规模未标记文本语料库上进行训练,然后使用标记数据对某些下游任务进行微调。受益于大规模预训练语料库的自监督学习,这些模型拥有强大的上下文文本表示能力。
在这些 PLM 中,基于 Transformer 的模型(Vaswani et al 2017)在大多数下游 NLP 任务中表现出了出色的性能。其中一个引人注目的例子是 BERT 模型(Devlin et al 2018),这是一种基于双向 Transformer 的预训练语言模型。 BERT 在预训练阶段有两个自监督任务:Masked Language Modeling (MLM) 和 Next Sentence Prediction (NSP)。继 BERT 之后,研究人员重新设计并优化了 PLM 的预训练任务。例如,Roberta(Liu et al2019)使用动态屏蔽策略并在更大的文本语料库上进行训练。此外,一些研究人员探索将结构化信息集成到PLM中(Yasunaga、Leskovec和Liang 2022;Colon-Hernandez等人2021;Kaur等人2022;Zhang等人2019)。例如,LinkBERT(Yasunaga,Leskovec和Liang 2022)将BERT的NSP任务替换为文档关系预测(DRP)任务,使模型能够从网页之间的超链接中学习跨文档知识。ERNIE(Zhang et al 2019)利用文本语料库和知识图来训练增强型 PLM。

为 IR 量身定制的预训练方法

考虑到 PTM 在 NLP 任务中取得的巨大成功,IR 社区开始设计专门用于临时检索的预训练方法(Ma et al 2023、2021a、d、b;Chang et al 2020;Fan et al 2021;Guo et al 2022;Chen et al 2022;Su et al 2023a、b)。
例如,HARP(Ma et al 2021d)在预训练阶段利用超链接和锚文本。由于锚文本是由人编辑的,因此从中构建伪查询-文档对可能比算法更可靠。 Webformer(Guo et al 2022)是一种基于大规模网页、HTML 标签和网页的 DOM(文档对象模型)树结构的预训练语言模型。
Ma 等人 (Ma et al 2021a) 设计了一个基于查询似然模型的自监督学习任务代表性词预测 (ROP),并使用自监督对比学习策略训练 Transformer 编码器。
从另一个角度来看,ARES(Chen et al 2022) 提出了几个基于公理正则化的预训练目标。
在几个 IR 基准上的实验结果表明,ARES、PROP、Webformer 和 HARP 在微调后的表现明显优于 BM25 等传统方法。此外,一些研究人员探索将结构信息纳入实体检索(Gerritse、Hasibi 和 de Vries 2020;Nikolaev 和 Kotov 2020;Chatterjee 和 Dietz 2022;Gerritse、Hasibi 和 de Vries 2022)。
与上述方法不同,我们提出了四个新的预训练目标,使用维基百科的标题、摘要、分层标题(多级标题)结构、文章之间的关系、参考文献、超链接结构和写作组织来利用维基百科编辑带来的群体智慧。与以前的工作相比,Wikiformer 捕获了维基百科网页中段落结构之间的更多内部关系,这有助于它更好地模拟相关性匹配。

4 方法

在本节中,我们将介绍我们提出的模型 Wikiformer 的预训练任务的详细信息,包括模拟重排序(SRR)、代表词识别(RWI)、摘要文本识别(ATI)和长文本匹配(LTM)任务。

4.1 模拟重新排名 (SRR)

SRR 任务的灵感来自于一个重要的 IR 问题:文档重新排序。一般来说,文档重排序任务的目标是对一系列与查询高度相关的文档进行排序,然后选择与查询最相关的文档。根据该任务的特点,我们的目标是设计一个自监督学习任务,从一系列内容相似的文档中选择最相关的文档。在SRR任务中,我们充分利用维基百科的分层标题(多级标题)结构来实现上述目标。维基百科上的每一篇文章都是按层次标题(多级标题)结构组织的,某一部分对应的副标题往往是文本的代表词或摘要。此外,同一节的不同小节具有相似的语义。结果,通过这种结构,我们可以获得一系列高度相似但内容略有不同的文本,并通过多级标题生成查询,如图1所示。
具体来说,我们基于分层标题结构将每篇维基百科文章建模为树形结构,即维基结构树(WST)。它可以定义为:
W ST =< D, R >,其中 D 是包含 n 个节点的有限集,R 是 W ST 的根节点。 D中的每个节点由两部分组成:字幕及其对应的内容。根节点R包含本文的主标题和摘要。从根节点R开始,递归地将所有对应的下级节作为其子节点,直到将本文中的每个节都添加到W ST中。
构建 W ST 后,我们使用对比采样策略基于树构建伪查询文档对。对于W ST中的非叶节点F,我们将其所有子节点添加到集合S中。从S中随机选择一个节点di。从根节点遍历到节点di,将路径上的所有标题放在一起形成查询q。该过程如图1所示。定义节点di的内容为d+,S中其他节点的内容定义为d-。
我们使用基于 Transformer 的 PLM 来计算伪查询-文档对的相关性得分:
在这里插入图片描述
其中 Transformer(Input) 是“[CLS]”标记的向量表示。 MLP(·) 是一个多层感知器,它将 [CLS] 向量投影到相关性分数 s。对于损失函数,我们使用 Softmax Cross Entropy Loss(Cao et al 2007;Ai et al 2018;Gao,Dai,and Callan 2021)来优化基于 Transformer 的模型,其定义为:
在这里插入图片描述
其中 q 和 d + 是上面定义的,S 是从 W ST 生成的所有负段落的集合。

4.2 代表词识别(RWI)

RWI 任务受到 IR 公理的启发,该公理假设用户的查询是从相关文档中提取的代表性单词。根据维基百科的结构,我们将每个部分的副标题视为代表词,然后通过基于分层标题(多级标题)结构的简单策略对伪查询文档对进行采样,如图2所示。

具体来说,伪查询-文档对的组织方式如下:对于每一篇维基百科文章,我们首先将其建模为 W ST 结构。然后我们将W ST 中除了根节点之外的所有节点添加到集合S中。从S中随机选择一个节点di,我们定义该节点在W ST 中的深度为n。从根节点遍历到节点di,将路径上的所有标题放在一起形成查询q+。节点di的内容定义为D。对于否定查询,我们从S中随机选择n−1个节点,并将所选节点的主标题和副标题连接起来,将其定义为q−。相关性得分在公式 2 中定义。 RWI任务的损失函数定义为:
在这里插入图片描述
其中 q + 是标题,D 是该文章的内容,S 是该文章生成的所有否定查询的集合。
在此任务中,虽然正查询和负查询都包含文档的副标题,但正查询比负查询更具代表性。该模型通过对比学习给正查询赋予更高的分数,以便模型能够识别文本中的代表词,如果这些词与查询匹配,则为这些词分配更高的权重。因此,通过RWI任务,模型可以学习如何识别文本中的关键词,这进一步导致在IR下游任务中有更好的表现。

4.3 摘要文本识别 (ATI)

在 ATI 任务中,我们利用了维基百科的摘要和内部结构。维基百科的摘要(第一部分)被视为整篇文章的总结。与同一篇文章的其他部分相比,当查询为标题时,摘要更容易满足用户的信息需求。因此,我们从维基百科文章中提取标题作为查询(表示为 q)。那么同一篇文章的摘要就被视为正文献(记为d+)。对于负面的,我们使用同一篇文章的其他部分(表示为 d - )。伪查询-文档对的相关性得分在等式 2 中定义。ATI 任务的损失函数定义为:
在这里插入图片描述
其中 q 是文章的标题,d + 是文章的摘要,S 是从该文章生成的所有否定文档的集合。

4.4 长文本匹配 (LTM)

经过 RWI、ATI 和 SRR 任务的预训练后,Wikiformer 获得了衡量短文本(查询)和长文本之间相关性的能力。这可以帮助模型更好地处理绝大多数临时检索任务。但也有涉及“长查询”的场景,例如法律案例检索、文档到文档搜索。在这些场景中,模型需要匹配两个长文本之间的相关性。幸运的是,利用维基百科的结构化信息,尤其是超链接,我们可以构建一系列信息丰富的伪长查询文档对。具体来说,我们利用维基百科的“另请参阅”部分,其中包含链接到与本文相关或类似的其他文章的超链接。另请参阅部分主要是根据作者和编辑的判断和常识手动编写的。这样,我们就可以获得一系列与该页面内容高度相关的可靠网页。
为此,我们设计了长文本匹配(LTM)任务来鼓励 Wikiformer 学习两个长文档之间的相关性匹配能力。最初,我们利用“另请参阅”链接提供的互连,将完整的维基百科语料库转换为图形结构。该图被指定为“另请参阅图”(SAG)。 “另请参阅”部分中的每个超链接可以正式表示为 (vi , vj ),这意味着 vj 出现在 vi 的“另请参阅”部分中。因此,SAG 可以定义为有向图:SAG = (V, E),其中 E 是上述有序对 (vi , vj ) 的集合,V 是维基百科文章的集合。边的顺序指示超链接的方向。构建 SAG 后,我们使用基于图的对比采样策略。对于SAG中的每个节点,我们将其内容定义为查询D,并将其所有相邻节点定义为正文档d+。我们随机选择其他文档作为 d − 。伪查询-文档对的相关性得分在等式 2 中定义。LTM 任务的损失函数定义为:
在这里插入图片描述

其中d+是相邻文章,D是原始文章的内容,S是所有负文章的集合。

4.5 最终训练目标

我们将提出的四个任务的损失加在一起作为模型的整体损失:
在这里插入图片描述

5 实验

5.1 数据集描述

对于预训练数据集,我们使用英文维基百科(版本 20220101)。对于下游数据集,我们在五个 IR 基准上评估了 Wikiformer 的性能。 基本统计数据如表 1 所示。MS MARCO Document Re-ranking(Nguyen et al 2016)是一个大规模的临时检索数据集,包含 0.37M 个查询和 3.2M 个文档。TREC DL 2019(Craswell et al 2020)与 MS MARCO 共享相同的文档集合,但为测试集中的 43 个查询收集了更细粒度的人工标签。 TREC Covid Round2(Roberts et al 2021)是一个由生物医学文章组成的临时检索数据集。它包含 2020 年 5 月 1 日版本的 CORD-19(Wang et al 2020)文档集和 35 个由生物医学专业人士编写的查询。 LeCaRD (Ma et al 2021c) 是一个法律案例检索数据集,包含 107 个查询案例和 10700 个候选案例。LeCaRD 数据集中的查询是法律案例的事实描述部分,而候选文档是完整的法律案例。CAIL-LCR(Ma 2022) 是 CAIL 2022 提供的案例检索数据集(文档到文档搜索),包含 130 个查询案例和每个查询案例的 100 个候选案例。

在这里插入图片描述

5.2 对比 baselines

我们考虑三种类型的 IR 基线进行比较,包括传统 IR 方法、神经 IR 模型和预训练语言模型:
QL查询似然(Zhai 2008)是一种基于狄利克雷平滑的语言模型。
BM25 (Robertson, Zaragoza et al 2009) 是一种基于词汇匹配的高效检索模型。
KNRM(Xiong et al 2017)是一种基于交互的神经排序模型,它使用内核池为每个查询-文档对提供匹配信号。
Conv-KNRM(Dai et al 2018)是一种基于卷积核的神经排序模型,它融合周围单词的上下文信息以进行相关性匹配。
BERT(Devlin et al 2018)是一种基于双向 Transformer 的预训练语言模型,在上下文文本表示方面具有强大的能力。
PROP MS(Ma et al 2021a)采用代表性词预测(ROP)任务来从伪查询-文档对中学习相关性匹配。它在 MS MARCO.1 PROP WIKI (Ma et al 2021a) 上进行预训练,采用与 PROP MS 相同的预训练任务。唯一的区别是 PROP WIKI 是在 Wikipedia 上预先训练的。
HARP(Ma et al 2021d)利用超链接和锚文本生成伪查询文档对,并在即席检索方面实现了最先进的性能。
ARES(Chen et al 2022)是一种经过预训练的语言模型,具有用于即席搜索的 Axiomatic 正则化。
Webformer(Guo et al 2022)是一种基于大规模网页及其 DOM(文档对象模型)树结构的预训练语言模型。

5.3 实现细节

为了实现 KNRM 和 Conv-KNRM,我们使用 OpenMatch2 工具包,并使用 300d GloVe(Pennington、Socher 和 Manning 2014)向量来初始化词嵌入。对于BM25和QL的实现,我们使用pyserini工具包3。对于BM25的超参数,我们设置k1 = 3.8和b = 0.874。请注意,在我们的实验中,我们使用 BM25 和 QL 模型的分数对候选文档重新排名,而不是对整个语料库重新排名。对于BERT的实现,我们使用Google5发布的Pytorch版本BERT-base。对于ARES、PROP MS和PROP WIKI的实现,我们直接使用原始论文发布的检查点。由于 Webformer 和 HARP 的原始论文没有发布任何检查点,因此我们根据他们的代码和论文中提供的详细信息在同一数据集上重现它们。

为了便于与之前的基线进行比较,我们采用了与 BERT-base 相同的架构。这与 ARES、HARP、PROP、B-PROP 和 Webformer 等之前作品的设置一致。为了在训练期间节省计算资源,我们使用 BERT-base 初始化模型,遵循与 ARES 和 HARP 等之前作品相同的设置。我们使用 AdamW 优化器,在前 50k 步中学习率为 1e-5,在后续步骤中学习率为 5e-6。我们将预热比率设置为 0.1。在 RWI、ATI 和 SRR 任务中,我们将查询的最大长度设置为 30,将文档的最大长度设置为 480。在 LTM 任务中,我们将两个文档的最大长度设置为 255。我们训练了我们的模型在四块 Nvidia GeForce RTX 3090 GPU 上运行 60 小时。训练 50k 步后,我们每 5k 步保存一次检查点,并在与我们的测试集没有重叠的 MS MARCO 训练集子集上评估每个检查点的零样本性能。我们选择最佳的零样本性能检查点作为最终模型。

5.4 评价方法

对于两个大型数据集 MS MARCO 和 TREC DL 2019,我们对 MS MARCO 使用 10 和 100 处的平均倒数排名(MRR@10 和 MRR@100),并使用 10 和 100 处的标准化贴现累积增益(nDCG@10 和 nDCG) @100)用于 TREC DL 2019 作为评估指标。
对于 TREC Covid,我们遵循 OpenMatch 的设置,对 BM25 融合方法提供的前 60 名候选者进行重新排名。我们使用 5 级精度 (P@50) 和 nDCG@10 作为 TREC Covid 的评估指标。
对于LeCaRD和CAIL-LCR数据集,我们对原始数据集提供的候选文档进行重新排序,并使用nDCG@5和nDCG@15作为评估指标。
对于显着性检验,我们采用Fisher随机化检验(Fisher 1936;Cohen 1995;Box et al 1978),这是以前的工作推荐用于IR评估的方法(Smucker、Allan和Carterette 2007)。

5.5 实验结果

零样本性能
零样本性能是指没有任何监督数据进行微调的模型的性能。因此,它直接反映了预训练任务的有效性。实验结果如表2所示。我们可以看到,Wikiformer在所有评估指标上都优于所有基线,这表明了Wikiformer在零样本设置中的优越性。根据结果​​,我们还得出以下结论:
为 IR 定制的预训练模型(例如 PROP、ARES 和 Wikiformer)在零样本设置中的表现明显优于 BERT。这表明了为 IR 量身定制的预训练任务的有效性,并且这些模型确实学到了用于相关性匹配的有用知识。在零样本设置的两个基准测试中,Wikiformer 在所有基线中表现最好。由于 Wikiformer 的模型架构和参数大小与其他预训练模型相同,这表明了我们预训练方法的有效性。此外,Wikiformer、Webformer 和 PROP-Wiki 都是在维基百科语料库上进行预训练的。 Wikiformer的优越性能表明它更好地利用了维基百科,通过维基百科上的结构化信息学习到了有助于解决IR问题的丰富知识。

微调性能
表 2 报告了微调后 Wikiformer 和其他基线的性能。通过实验结果,我们得到以下发现:(1)尽管大多数预训练语言模型(PLM)在零样本设置下的性能不如BM25和QL等传统方法,经过微调后,它们显着超过了 BM25 和 QL。然而,即使经过微调,神经 IR 模型的性能仍然低于 BM25 和 QL。 (2) 在 MS MARCO 数据集上,IR PLM 在微调设置下始终优于 BERT。这表明 IR PLM 在预训练阶段获得的知识即使在微调之后仍然很有价值。
HARP和Webformer由于结合了超链接、DOM树和HTML标签等外部知识,表现出比PROP-WIKI和PROPMS更好​​的性能。 (3) Wikiformer 在两个数据集上都显着优于其他基线。请注意,Wikiformer 的模型结构和微调数据集与其他基线相同。因此,这些实验结果表明,与其他基线相比,Wikiformer 在预训练阶段获得了更多的信息检索知识。这证明了我们预训练任务的价值。

垂直领域的表现
我们在法律领域数据集LeCaRD和CAILSCR以及生物医学领域数据集TREC Covid上进行了实验,以探索Wikiformer在垂直领域的表现。实验结果如表4和表3所示。实验结果表明,Wikiformer 在法律和生物医学领域均显着优于之前的预训练模型。这表明 Wikiformer 拥有特定领域的适应性和有效性,使其能够在这些专业领域内的信息检索任务中表现出色。其优势凸显了利用 Wikiformer 改进跨不同领域的搜索和检索任务的潜力。
在这里插入图片描述
在这里插入图片描述
长文本匹配性能
Wikiformer 和其他基线在 LeCaRD 和 CAILLCR 上的性能如表 4 所示。LeCaRD 和 CAIL-LCR 是具有相对较长查询和候选文档的中国法律案例检索任务。因此,对这些数据集的实验可以评估 Wikiformer 和基线的长文本匹配性能。由于到目前为止还没有针对 IR 量身定制的以中国为中心的预训练模型,因此我们仅使用传统方法和中国版本的 BERT 模型(Cui et al 2021)作为基线。实验结果表明,Wikiformer 在长文本匹配任务中比传统统计方法 BM25 和 QL 以及预训练语言模型 BERT 取得了更好的性能。这些实验结果凸显了 Wikiformer 在有效评估长文本相似性方面的潜力,也强调了所提出的长文本匹配(LTM)任务的有效性。

5.5 训练数据量的影响

为了研究更大的训练数据集是否可以增强预训练阶段的性能,我们评估了 Wikiformer 在 100 到 1,000,000 个伪查询文档对之间不同大小的训练数据上的性能。如图 3 所示,Wikiformer 在 SRR 任务中仅使用 100 个伪查询-文档对进行预训练,从而超越了查询似然模型。该实验结果表明了我们的预训练任务和我们提出的伪查询-文档对采样策略的有效性

5.6 消融研究

为了进一步分析每个预训练任务的有效性,我们在 MS MARCO(零样本)和 LeCaRD(微调)上进行了消融实验。表5中的实验结果表明,删除任何预训练任务都会导致性能下降,表明每个预训练任务对下游IR任务的有效性。在 MS MARCO 上,在这四个任务中,删除 SRR 任务导致的性能下降最大,这表明维基百科的分层标题结构和写作组织包含对即席检索有价值的知识,这有助于 Wikiformer 更好地处理相关性匹配。在 LeCaRD 上,删除 LTM 任务会导致最大的性能下降,这表明 LTM 任务对于提高模型在长文本匹配任务上的能力至关重要。
在这里插入图片描述

6 结论

在本文中,我们提出了 Wikiformer,这是一种专为 IR 量身定制的预训练语言模型,可实现最先进的性能。我们基于维基百科上的结构化信息提出了几种伪查询-文档对采样策略,以利用维基百科编辑带来的群体智慧。大量的实验结果和案例研究验证了我们预训练方法的有效性。
消融研究的结果也暗示了所有预训练任务的有效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值