解读:Few-shot classification in Named Entity Recognition Task


摘要:对于许多自然语言处理(NLP)任务,带注释的数据量是有限的。这就迫切需要应用半监督学习技术,例如迁移学习或元学习。在这项工作中,作者使用原型网络(一种度量学习技术)处理命名实体识别(NER)任务。它学习单词的中间表示形式,这些单词很好地聚集到命名实体类中。该模型的特性允许使用数量非常有限的训练示例对单词进行分类,并且有可能被用作零样本学习方法。通过将该技术与迁移学习相结合,作者获得了仅在目标类别的20个实例上训练的性能良好的分类器。

1 介绍

命名实体识别(NER)是在非结构化文本中查找实体的任务,例如人员名称,组织,位置等。这些名称可以是句子中的单个单词或短语。因此,NER通常被解释为序列标记任务。这项任务在各种信息提取框架中得到广泛使用,并且是面向目标的对话系统的核心组件之一。
当有大量标记数据集可用时,可以非常高质量地解决NER的任务。测试新的NER方法的常见基准是CoNLL-2003和Ontonotes 数据集。它们都包含足够的数据,可以在有监督的学习环境中训练神经体系结构。但是,在实际应用中,通常无法获得如此丰富的数据集,尤其是对于资源匮乏的语言。即使有一个标注大的语料库,它也不可避免地会有罕见的实体,它们出现的次数不足以训练神经网络以准确地在文本中识别它们。
因此,迫切需要开发基于少量标注信息的NER方法。一种解决方案是半监督学习方法,即可以通过组合在任何语言中的一小组标记数据和大量未标记数据中的信息来产生良好模型表现的方法。另一种预训练方式以无监督训练的单词嵌入在大多数NLP任务中用作神经网络的输入,但是,这些输入仅提供有关单词含义的常规语义(并非总是合适的)信息,而作者认为无监督数据可用于提取有关数据结构的更多特定于任务的信息。
从少量标注数据中学习任务的一种有效方法是度量学习。该术语代表的是一种学习度量标准以测量对象是否适合某类的技术。度量学习方法,例如匹配网络和原型网络,在针对图像分类的小样本学习中显示出良好的效果。这些方法也可以视为半监督学习方法,因为它们使用常见对象的结构信息来标记不常见的对象。该方法甚至可以用作零样本学习,即不需要在训练时呈现目标类的实例。因此,这种模型不需要重新训练就可以处理新的类,这个特性对于实际任务非常有吸引力。
尽管度量学习在图像处理方面取得了成功,但尚未在NLP任务中广泛使用。尤其在资源贫乏的地区,研究人员更经常求助于迁移学习(使用来自不同领域或语言的知识)。作者将原型网络应用于NER任务,并将其与常用基准进行比较。作者在通常出现在现实环境中识别带有极少数标记示例的任务中测试了一种度量学习技术(原型网络),结论表明,尽管原型网络在零样本学习的NER任务中没有成功,但在少数标记样本情况下它们的性能优于其他模型。
论文的主要贡献如下:
(1) 将小样本ner任务作为半监督学习任务。
(2) 修改了原型网络模型以使其能够解决NER任务,结果表明它在资源匮乏的情况下优于最新模型。
文章的结构如下。第2节作者回顾了完成少量NER任务的现有方法。第3节作者描述了原型网络模型及其对NER任务的适应性。第4节定义了任务,并描述了作者为解决该问题而测试的模型。第5节包含对本文的实验设置的说明。作者在第6节中报告并分析了实验的结果,在第7节中作者总结并提供了未来工作的方向。

2 相关工作

NER是一项成熟的任务,已通过多种方式解决。如今,与大多数其他NLP任务一样,最新技术是使用循环神经网络进行序列标记。但是,神经体系结构对训练数据的大小非常敏感,小型数据集上的表现极度容易过拟合。因此,对ner的最新研究集中于处理资源贫乏情况,这些研究通常着眼于在细分领域或资源贫乏的语言应用中。
文献【21】的作者描述了一种域之间特征迁移的工作可以应用到具有大量的域外数据NER任务。许多著作描述了语言之间的相似过渡:Dandapat和Way [5]使用机器翻译系统,Xie等人将两种语言的同义词映射到同一空间。这些方法都允许将大型数据集“翻译”为新语言。Cotterell和Duh [4]通过与资源丰富的同类的NER模型联合训练,可以提高资源较少的语言的NER模型的性能。
除了具有不同域或语言的标记数据外,其他来源(例如本体,知识库或启发式方法)也可以用于有限的数据配置中。类似地,Tsai和Salakhutdinov使用辅助信息提高了图像分类的准确性。
主动学习也是减少训练数据量的普遍选择。在文献[17]中,尽管神经体系结构通常需要大量的训练实例,但作者还是将主动学习应用于很少的NER任务并成功地提高了性能。自学习是一种类似的方法,即对模型本身标记的示例进行训练,虽然在许多情况下无效,但文献[3]表明,自学习和强化学习结合使用时,它可以改善小样本情况下NER任务的效果。
与作者最相关的工作是Ma等人的研究。文献[9]从细粒度多层级标签中进行嵌入学习。该文献的作者训练一个模型将词的手工和其他特征映射到嵌入空间中,并使用交互信息量度从单词集中选择原型。和这项工作类似,本文作者旨在提高NER模型在稀有类上的性能,值得一提的是,本文模型不限制类是否分层,这使得模型更加灵活,适用于“冷启动”问题(使用新类扩展数据的问题)。
除NLP之外,还存在多种用于少量学习样本的方法。已经提到的度量学习技术受益于任务中所有对象共享的结构,并创建了一种表示形式,以显示它们与任务相关的差异。元学习方法在两个层面上起作用:它从少量示例中学习解决任务并学习有关跨任务数据的更一般更高层的规律性。在文献【16】中,作者证明了带有记忆增强的神经网络(如神经图灵机)具有可以在很少有标记示例上执行元学习的能力。
在此之前,原型网络尚未应用于任何NLP任务。他们具有将新标签引入模型而无需重新训练的极具吸引力的能力。上述模型均无法执行此类零样本学习任务。尽管自然语言任务确实与最初建议使用原型网络的图像领域任务有所不同,但作者还是决定在NLP任务上测试该模型,以查看是否有可能将此将该方法应用到文本领域。

3 原型网络

3.1 模型

文献【18】中引入了原型网络,该模型用于在缺乏标记样本的任务中进行样本分类。该模型训练目标为使最后一层返回的对象的表示形式对于属于同一类的对象相似,而对于不同类的对象则不同。换句话说,该网络将对象映射到向量空间,该向量空间可轻松将对象分离为有意义的特定于任务的类集。该模型的特性可以将一个类精确判断为在训练时几乎会忽略的类别,即使该类的带标签示例的数量非常有限。
原型网络在两个实例集上进行训练:支持集和查询集。支持集由N个带标签的实例组成:S = {(x1,y1),…,(xN,yN)},其中每个xi∈RD是物体的D维表示,yi∈{1,2,…,K}是对象的标签集合(注意K不等于N)。查询集包含N’个标记对象:Q = {(x1,y1),…,(xN’,yN’)}。请注意,上述集合中的数据在训练步骤中不固定,在每个步骤中都从训练数据中随机抽取支持集和查询集。
以如下两个阶段进行训练:
(1) 对于每个类别k,定义Sk 为S中属于该类别的对象的集合。使用这些集合来计算原型:
在这里插入图片描述
其中函数fθ:R D→R M将输入对象映射到M维空间,该维应该满足类别之间的距离要求。通常将fθ实现为神经网络。它的体系结构取决于对象的属性。原型是特定类别中对象的平均表示,或者是M维空间中与此类别相对应的类集的中心。
(2) 在查询集中对对象进行分类。为了对未登录示例x进行分类,使用fθ将其映射到M维空间,然后将其分配给原型更接近x表示形式的类。使用欧几里得距离,为每个原型类别计算距离d(fθ(x),ck)。将x与k的相似度表示为li = -d(fθ(x),ck)。最后,使用softmax函数将这些相似性转换为类的分布:softmax(l1,…,lK)。该模型与距离函数无关。
通过优化交叉熵损失来训练模型:在这里插入图片描述

3.2 适配NER

为了将原型网络应用于NER任务,对上述基准模型进行了以下更改:
序列对象与独立对象:图像数据集包含彼此不相关的单独图像。相反,在NLP任务中,经常需要对序列组成方式的单词集中的每一个单词进行分类。句子中的单词会相互影响,在标记单词时,应考虑相邻单词的标记。在这种情况下,孤立地考虑一个单词是没有意义的。但是,在NER任务中,需要对单独的单词进行分类,因此,按照上一节中对模型的描述,应该从(wi,yi)中组合支持集S,其中wi是一个单词,yi是其标签。但是,如果将句子中的某些单词分配给支持集而将其他单词分配给查询集,则这种划分会破坏句子的结构。为了防止这种情况,支持集和查询集均包含整个句子。
“非实体”类:在NER任务中,作者使用O类来表示不是实体的单词。不能以与其他类相同的方式来解释它,因为类O的对象不需要(也不应该)在向量空间中彼此靠近。为了减轻这个问题,作者修改了预测函数softmax(l1,…,lK),即用标量bO代替了O类的相似度得分lO,并使用以下softmax形式:softtmax(l1,…,lK-1,bO)。bO与模型的参数θ一起训练。bO的初始值为超参数。
域内和域外训练:在描述原型网络的原始论文中,模型被应用于零样本学习。在训练阶段会更新模型的权重,但是一旦训练结束,来自测试类的实例将仅用于计算原型。鉴于通常很容易获得带有标记的实例,因此作者将原始的“零样本”设置修改为“小样本” 的设置,在训练阶段使用了少数可用的带标记的目标类别实例,并将该类别数据表示为域内训练集,而其他类别的数据称为域外训练集。在这里,传统的NLP意义上的域是相同的(文本来自相同的来源,并且单词分布相似),在这里指的是它们使用的命名实体类集之间的差异。

4 小样本实体识别

4.1 形式化任务

NER是序列标记任务,其中将句子中的每个单词分配给实体类之一(“人”,“位置”,“组织”等),或者分配给O类(如果不是所需实体)。尽管通常可以通过现有方法正确识别通用类,但本文针对稀有类别,而这些稀有类别仅带有有限数量的标记实例。为了提高识别的质量,作者使用了其他类别的信息。因此,作者为每个类训练一个单独的模型,以便单独测试每个类的性能。这样的设置也可以被认为是解决“冷启动”问题的一种方法-调整NER模型用很少的实体标记新类别的实体。
如上所述,有两个训练集:域外和域内。由于作者在实验中模拟了“冷启动”问题,因此这些数据集具有以下特征。域外数据非常大,并用除目标类C之外的许多命名实体类标记。领域内数据集非常小,仅包含C类的标签,将其注入模型中。
为了训练一个真实的模型,需要使域内训练数据中的C类别频率与一般分布中此类别的频率相似。因此,如果该类别的实例平均在三个句子之中出现一次,则域内训练数据必须包含不含C类实例的句子(“空”句子),并且其数量应为出现类别的句子数量的两倍。在实践中,这可以通过从未标记的数据中抽取句子来实现,直到获得所需数量的C类实例为止。

4.2 基本模型

作者使用两种主要架构:常用的RNN基线和适用于NER任务的原型网络。测试的其他模型使用这两个模型作为基础模块进行构建。
RNN + CRF模型:作为基线模型,使用在AllenNLP开源库中实现的NER模型。该模型以如下方式处理句子:
(1) 将单词映射到预训练的嵌入空间中(可以使用任何嵌入,例如GloVe,ELMo等),
(2) 使用具有LSTM单元的字符级可训练循环神经网络(RNN)可以产生其他单词嵌入,
(3) 将阶段(1)和(2)中生成的嵌入连接起来,并用作具有LSTM单元的双向RNN的输入。该网络处理整个句子并创建每个单词的上下文的嵌入表示,
(4) 前馈层将RNN的隐藏状态从阶段(3)转换为与每个标签相对应的logit,
(5) 将logit输入到条件随机随机场(CRF)模型,该模型输出句子中每个单词的标签的概率分布。
通过最小化真实标签序列的负对数似然来训练模型。必须注意的是,即使在有限的资源环境中,该基准也是相当合理的。
原型网络:用于NER任务的原型网络的体系结构与上述的基准模型非常相似。主要变化涉及前馈层。在基线模型中,它将RNN隐藏状态转换为对应于标签的logit,而在原型网络中,它将这些隐藏状态映射到M维空间。然后,前馈层的输出用于从支持集构建原型。这些原型用于按照第3.1节中的描述对查询集中的示例进行分类。本文尝试带有和不带有CRF层的该模型的变体。图1提供了原型网络模型的体系结构。
在这里插入图片描述

4.3 实验

本文使用许多不同的模型进行实验。测试了原型网络模型的不同变体,并将其与RNN基线模型进行了比较。除此之外,还尝试迁移学习方案并将其与这些模型结合。在本节提供了测试的所有模型的描述。
RNN基准(基准):这是上述基准RNN模型。仅使用域内训练集对其进行训练。
基准原型网络(BaseProto):这是基准原型网络模型。根据域内训练数据对其进行训练。将域内数据集其分为两个部分:如果域内集合包含目标类为C的N个句子和V个句子为“空”类的句子,则将N / 2个句子为C的实例作为支持集,并将其他N / 2个这样的句子与V / 2一起使用“空”类句子用作查询集。仅使用“空”类句子的一半来保留查询集中C类的原始频率。请注意,集合中的数据对于每个训练迭代都是新的。
正则化原型网络(Protonet):该模型的体系结构和训练过程与BaseProto模型相同。唯一的区别是用于训练的数据选择不同。在每个训练步骤中,使用以下两种情况之一选择训练数据:
(1) 使用域内训练数据,即标有目标类别C的数据(此设置BaseProto中使用的设置相同),
(2) 更改目标类别:(i)随机选择一个新的目标类别C’(C’不等于C),(ii)随机选取来自域外数据集的例句,直到找到C’的N个实例,(iii)重新标记抽样的句子,使仅包含标签C′
在每一步中,选择具有概率p的方案(1)或具有概率(1-p)的方案(2)。
因此,在整个训练过程中,对网络进行训练以预测目标类别(方案(1)),但偶尔会看到其它类别的实例并为其构造原型(方案(2))。本文表明该模型比BaseProto更为有效,因为在训练时它会暴露给不同类的对象,并且将对象映射到原型空间的过程将变得更加健壮。这也是一种利用域外训练数据的方法。
迁移学习基准(WarmBase):测试了一种常见的迁移学习模型-使用有关域外数据的知识来标记域内样本。该模型的训练分为两部分:
(1) 使用域外训练集训练基线RNN + CRF模型。
(2) 保存除CRF和标签预测层之外的所有模型权重,并使用域内训练集再次训练该模型。
迁移学习+原型网络(WarmProto):除此之外,作者还将原型网络与对域外数据的预训练相结合。首先在域外训练集上训练基本模型。然后,如上所述训练Protonet模型,但使用预先训练的Base模型的权重初始化其权重。
WarmProto-CRF:这是在域外数据上预训练的相同原型网络,但是如第4.2节中所述,在logit顶部使用CRF层对其进行了扩展。
零样本训练的WarmProto(WarmProtoZero):训练相同的WarmProto模型,但概率p设置为0。换句话说,模型在训练时看不到目标类的实例。它学习在其他类的对象上产生表示形式。然后,在测试时,将目标类别的N个实体作为支持集,并根据与该原型的相似性,将测试语句中的单词分配给此类或O类。这是测试的唯一的零样本学习方案。

5 实验设置

5.1 数据集

作者在Ontonotes数据集上进行了所有实验。它包含18个类(+ O类)。这些类别分布不均:训练集包含一些普通类别的30.000多个实例,稀有类别的实例少于100。类的分布如图2所示。训练集的大小为150.374个句子,验证集的大小为19.206个句子。
作为大多数NER数据集,Ontonotes采用BIO(开始,内部和外部)标签。它提供了类别标签的扩展,即,除O以外的所有类别标签都以符号“ B”开头,否则为符号“ I”。
在这里插入图片描述

5.2 数据准备:模拟几次实验

将Ontonotes训练数据用作域外训练集(合适情况下),并在验证集中抽样得到域内训练集。在作者的表述中,域内数据是仅标记目标类C(要预测的类)实例的数据。相反,域外数据包含某些类集的实例,但不包含目标类C的实例。因此,通过在训练数据中用O替换所有标签B-C和I-C来准备数据,在验证数据中,我们用O替换除了B-C和I-C之外的所有标签。请注意,由于针对18个Ontonotes类中的每一个进行实验,作者为每个实验执行此重新标记。
对于模拟的标注数据贫乏的场景,ontonote验证数据仍然太大,因此仅将其一部分用于训练。作者按以下方式采样域内训练数据。从重新标记的验证集中随机选择句子,直到获得至少一个具有C类实例的N个句子。请注意,验证集的句子不能保证具有C实例,因此训练数据可以包含一些“空”句子,即所有单词都标有O的句子。此采样过程使C类实例的比例保持接近于一般分布。
在初步实验中,观察到,由于域内训练数据的大小可能会发生显著变化,因此这种采样过程会导致最终分数有较大差异。为了减少这种变化,作者更改了采样程序。作者定义一个函数pr(C),该函数计算验证集中的C类标签的比例(pr(C)∈[0,1])。然后,对包含类C的实例的N个句子和不包含类C的N×(1-pr(C))/pr(C)个句子进行采样。因此,在域内训练数据集中将类C的实例比例等于验证集。从Protonet模型的域外数据中采样训练示例时,使用相同的过程。

5.3 实验设计

针对18个Ontonotes类的每一个进行单独的实验。对于每个类别,使用不同的随机种子进行了4个实验,并报告每个类别的平均得分。
作者设计了用于选择超参数和训练时期的最佳数量的单独实验。为此,选择了三个代表性良好的类别-“ GPE”(地缘政治实体),“ Date”和“ Org”(组织)来对它们进行验证实验。如上所述选择训练集,并使用测试集(由≈19.000个句子组成)调整超参数并停止训练。对于其他类,作者没有执行超参数调整。相反,作者将在验证实验中获得的值与三个验证类一起使用。在这些实验中,仅将测试集用于计算训练模型的性能。
这种设置的动机如下。在许多小样本的情况下,研究人员发表实验结论表明,在一个小的训练集上进行训练,并在一个非常大的验证集上对模型进行调整。作者认为这种情况是不现实的,因为如果在现实世界中存在大量带有标签的示例,则将它们用于训练而不是验证会更有效。另一方面,更现实的情况是总体上标记的句子数量非常有限,在这种情况下,仍然可以保留其中一部分以进行验证。但是,作者认为这也是无效的。如果有20个示例并决定训练其中的10个示例,然后再对10个示例进行验证,则此验证将是不准确的,因为10个示例不足以可靠地评估模型的性能。因此,实验的评估将非常嘈杂,并可能导致超参数的次优值。另一方面,如图3所示,另外有10个示例可以提高模型的质量。因此,作者假定所有标签的最佳超参数都相同,并使用在验证实验中发现的值。

5.4 模型参数

在作者所有的实验中,将N(域内训练数据中目标类的实例数)设置为20。该实例数足够小,可以轻松地手动标记。同时,它会产生质量合理的模型。图3比较了在10和20个示例上训练的模型的性能。对于后一种情况,看到了性能的显着提高。此外,在最右边的图中,较小数据集的学习曲线在第40个epoch后下降,而使用较大数据集时则不会发生。这表明N = 20是模型性能和标签成本之间的合理折衷。
在Protonet模型中,作者将p设置为0.5。因此,模型在目标类C的实例上训练了一半的步骤,而另一半时间是在模型中显示了一些其他随机选择的类的实例。
作者在pytorch实施中使用Adam优化器优化了所有模型。基准和WarmBase方法在域内训练期间使用10个句子的批量。使用大小为32的批量训练域外RNN基线(为WarmBase和WarmProto *模型进行预训练)。所有基于原型网络的模型都使用支持集为100的批量(支持集为40,查询集为60)。作者还使用因子为0.1的L2正则化。所有模型均根据针对目标类别的基于块的F1分数进行评估。
这些模型的开源实现可在线获得:https://github.com/Fritz449/ProtoNER
在这里插入图片描述
在这里插入图片描述

6 结果

6.1 模型的性能

作者在验证实验中选择了超参数,然后在训练其他类别的模型时使用它们。使用以下值:bO的初始值(O类的登录名)设置为-4。在所有实验中,作者在LSTM单元中使用比率为0.5的dropout率。对于所有基于原型网络的模型,嵌入空间M的维数设置为64。对于所有模型,作者使用3e-3的学习率。
表1显示了所有类和方法的实验结果。清楚地看到,仅用20个句子不足以训练基线RNN + CRF模型。此外,可以看到基线原型网络(BaseProto)的性能与RNN基线非常接近。
这表明目标类的20个实例也不足以构建可靠的原型。
另一方面,如果像Protonet模型中那样,原型网络偶尔会暴露给其他类的实例,则它构造的原型将更易于识别目标类。在许多类上,Protonet的结果都比Base和BaseProto更好。
迁移学习基准(WarmBase)取得的结果与Protonet相当。这可以得出结论,即使对于常规RNN基线,有关其他类的对象的结构的信息也很有用,并且对域外数据进行预训练也很有用。
在超过一半的实验中,对基于域外数据进行预训练的原型网络(WarmProto)击败了WarmBase和Protonet。类似于迁移学习基准,它受益于域外数据的使用。不幸的是,这样的模型不适合零样本学习-WarmProtoZero模型的性能低于包括RNN基线在内的任何其他模型。
最后,如果启用WarmProto模型的CRF层,性能将急剧提高。如展示所见,WarmProto-CRF在几乎所有实验中都击败了所有其他模型。因此,在域内数据极为受限的情况下,原型网络比RNN基线更有效。

6.2 BIO标签的影响

当可用的实体数量很少时,NER数据集中使用的BIO标签会损害模型的性能。首先,大多数实体只能包含一个单词,如果总共只有20个实体,则I标签的数量可能太少。这会大大降低预测这些标签的质量。另一个潜在的问题是,标有B和I标签的单词可能相似,并且模型可能难以使用原型区分它们。同样,可以通过以下事实来放大这种效果:仅使用很少的实例进行训练,并且原型本身具有很大的差异。
为了检查这些问题是否妨碍了模型的性能,作者进行了另一组实验。作者删除了BIO标签-对于目标类C,用C替换了B-C和I-C。此TO(标签/其他)标签减少了训练数据的稀疏性。对于域内和域外训练集,作者都是这样做的。测试集保持不变,因为用于评估的基于块的F1分数不受BIO和TO标签之间的差异的影响,它始终将命名实体视为一个整体。
表2显示了根据BIO标签和TO标签数据训练的WarmBase和WarmProto模型的结果。事实证明,在大多数情况下,这些模型的F1得分之间的差异并不显着。因此,BIO标签不会影响模型。

7 结论

在这项工作中,作者建议使用在其他机器学习任务中积极使用但很少应用于NLP的度量学习技术来解决NER的任务。作者采用了度量学习方法,即最初用于图像分类的原型网络来分析文本。它将所有对象投影到向量空间中,该向量空间在类之间保持距离,因此一类对象被映射到相似的向量。这些映射形成一个类的原型,并且在测试时,通过对象表示与类原型的相似性将新对象分配给类。
除此之外,作者还考虑了在半监督环境下执行NER的任务-使用有关其他类别单词的信息来确定文本中的目标类别。作者证明了在这种情况下原型网络比最新的RNN模型更有效。与RNN不同,原型网络适用于可获得极少量数据的情况。
根据原型网络的原始表述,它可以用作零样本学习方法,即可以将对象分配给特定类别的方法,而在训练时不会看到该类别的实例。作者对NER的零样本设置进行了实验,结果表明,原型网络原则上可以用于零样本文本分类,尽管仍有很大的改进空间。作者建议这是未来研究的重要方向。
我们看到,原型网络在不同类别的命名实体上表现出明显不同的性能。进行更彻底的定性分析以识别更适合此方法的文本数据特征将很有趣。
最后,在目前的实验中,作者训练了模型来预测仅一个类别的实体。在未来的工作中,作者要检查原型网络的良好性能是否可以扩展到多个类别。作者将专注于训练一个原型网络,该网络可以一次预测所有类别的Ontonotes或另一个NER数据集。
论文链接:https://arxiv.org/pdf/1812.06158.pdf。

欢迎关注微信公众号,文章会同步更新在公众号,如需转载请标注来源。
着眼未来科技,追踪研究传播最新思想、最新理论,打开最新世界。

着眼未来科技,追踪研究传播最新思想、最新理论,打开最新世界。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值