AAAI 2023|嵌套命名实体识别为构建本地超图

本文是对《Nested Named Entity Recognition as Building Local Hypergraphs》一文的总结,如有侵权即刻删除。

paper
code

1 文章信息

论文《Nested Named Entity Recognition as Building Local Hypergraphs》于2023年发表在AAAI (CCF-A类会议)。
作者团队来自清华大学。
在这里插入图片描述

2 摘要

       命名实体识别是自然语言处理中的一项基本任务(研究领域)。基于平面命名实体识别的序列标注范式,已经发展了多种方法来处理嵌套结构。但是,它们要么需要固定的识别顺序,要么引入复杂的超图(挑战)。为了解决这个问题,我们提出了一种名为本地超图生成器网络(LHBN)的新模型,该模型可以构建多个更简单的本地超图来捕获命名实体,而不是单个复杂的全尺寸超图。所提出的模型具有三个主要属性:(1)共享边界的命名实体被捕获在同一个局部超图中。(2)通过构建局部超图来增强边界信息。(3)可以双向构建超图,以利用不同命名实体的识别方向偏好(LHBN的特点)。实验表明,我们的模型在四个广泛使用的嵌套命名实体识别数据集上优于以前最先进的方法:ACE04、ACE05、GENIA 和 KBP17。该代码可在 https://github.com/yanyk13/local-hypergraphbuilding-network.git 上获得(实验结果及代码)

3 介绍

       命名实体识别 (NER) 在自然语言处理中起着重要作用。它为许多下游应用程序(如共指解析、实体链接和事件提取)提供信息(NER的重要性)。以前的标记方法在平面命名实体识别方面取得了重大成功,方法是将其表述为为每个标记分配一个标记。但是,这种范式无法处理重叠的命名实体,如图 1所示,这在许多领域中非常常见(嵌套NER是挑战)
在这里插入图片描述
       近年来,研究人员提出了多种新方法来处理嵌套结构。基于跨度的方法遵循两阶段策略。他们首先提出一定数量的跨度,允许嵌套,然后预测每个候选者的类别。最新的序列标记方法利用多个解码层来分别预测具有不同长度的实体,这些实体遵循一定的顺序,例如从内到外。其他方法试图通过构建特殊结构来捕获命名实体(已有的解决嵌套NER的方法)
       为了解决嵌套结构问题,我们仔细研究了重叠的实体,并提出了一种新的范式,即使用序列标记方法形成局部超图结构。通常,命名实体由标题及其限定符组成。有两种嵌套结构:(1)一个实体是另一个实体的限定词,如“EBNA 2”和“EBNA 2-dependent enhancer”,以及(2)标题形成多个具有不同长度限定词的命名实体,如“human T cell”和“T cell”。它们可能共享边界的一侧,如表 1 所示。在 ACE04 和 ACE05 等一些数据集中,由于事件抽取、共指解析等下游应用的需求,部分代词和归属从句中的亲戚也被标注为命名实体。这导致了第三种嵌套结构,如“those who worked for her”和“who”。对于前两种结构,它需要一个序列标记模型,不仅要识别一个命名的实体,还要估计扩展其边界以形成新边界的可能性。另一方面,对最后一种内部实体的识别可以看作是一项按标记的分类任务(三种嵌套NER结构)
       我们提出了一种新的模型,称为局部超图构建网络(LHBN),如图3所示,将命名实体的识别表述为两个阶段的过程:(1)使用标记分类器提出实体的边界标记候选者,(2)给定一个左/右边界,依次将子序列转换为局部超图(LHBN的流程)。通过“本地(local)”一词,我们强调每个超图仅捕获共享特定边界的实体。与以前封装所有实体所需的超图结构相比,我们的超图结构的复杂性要低得多,因此更容易构建。虽然我们也使用序列到序列的范式,但与以前的序列标记方法不同,我们的方法不需要主观定义的识别顺序,如自下而上,解码层对实体长度没有偏好(LHBN的优势)
       我们的主要贡献如下:

  • 我们引入了一种基于局部超图的嵌套命名实体识别的新范式。与以前研究中使用的将全文映射到单个超图中相比,构造过程要简单得多。
  • 我们的方法不是使用主观定义的顺序或对实体长度的偏好来识别命名实体,而是在局部超图中提取具有相同边界的实体,这使得在嵌套结构中合成信息变得更加容易。
  • 我们在四个广泛使用的嵌套命名实体识别数据集上评估了我们的方法:ACE04、ACE05、GENIA 和 KBP17。实验表明,所提方法在所有四个数据集上都取得了最先进的性能。
  • 通过扩展我们的方法以双向构建局部超图,我们在所有四个数据集上都取得了卓越的性能。此外,我们还说明了在识别不同嵌套结构的顺序时存在偏好。
    在这里插入图片描述

4 相关工作

       嵌套命名实体识别 (NER) 有多种范例。我们可以将它们大致分为基于span的方法、基于超图的方法、序列标记方法和其他方法。

4.1 基于span的方法

       基于跨度的方法是嵌套 NER 的最主流方法。通常,他们首先提出一定数量的跨度候选者,然后将它们分类为不同的类别。这些研究的重点是跨度抽样策略和跨度表示方法。作为早期尝试,穷举模型对所有可能的跨度进行采样。Tan et al. 利用子模块在采样跨度之前估计边界。Shen et al.引入了一个新模块来调整跨度候选边界以进一步使用边界信息。Fu et al.使用 TreeCRF 来增强嵌套跨度之间的交互。Yuan等人的最新方法提出了三仿射机制,以整合所有不同格式的有用信息,包括标记、标签、边界和相关跨度,以增强跨度表示。然而,在抽样跨度候选项和跨跨度注意力之间存在权衡:(1) 少量跨度候选者会带来遗漏实体的风险。(2)在采样数量较大的情况下,跨跨度注意力往往对涉及过多的低限度跨度无效,并且需要大量的计算资源。

4.2 基于超图的方法

       先前的嵌套NER序列标记方法使用多个解码层来处理嵌套结构。这些方法中实体的标识遵循一定的顺序,例如从内到外或自下而上,由于实体的标签是无序的,因此很难学习。

4.3 序列标记方法

       近年来,基于超图的模型没有达到竞争性能。大多数以前的基于超图的方法,如Lu和Roth提出的方法,都是基于规则的,他们试图将文本映射到精心设计的超图中,以捕获所有可能的嵌套结构。虽然其他研究利用超图将嵌套 NER 转换为修改后的序列标记任务,就像我们在这项工作中所做的那样,他们使用单个结构来表示输入句子中的所有命名实体。由于超图的复杂性,这些模型很难训练。方法部分对此进行了详细描述。

4.4 其他方法

       Tan et al. 提供了一组固定的可学习向量来学习有价值跨度的模式。Li et al.和 Shen et al.都使用机器阅读理解框架来识别实体。
       据我们所知,我们是第一个将嵌套命名实体识别表述为通过序列标记方法构建多个局部超图的人。(在相关工作中提出本文研究的重要性)

5 方法

       在本节中,我们首先介绍所提出的局部超图结构,然后介绍我们的任务表述。图3显示了所提方法的概述。

5.1 编码方案

       使用标准的BIOO标签方案,三个重叠的命名实体(“peripheral blood mononuclear cell”、“peripheral blood mononuclear cell glucocorticoid receptors”和“glucocorticoid receptors”)的所需标签序列如图2(a)所示,其中嵌套结构需要在同一位置使用不同类型的标签。
       为了解决这个问题,以前的工作引入了有向超图,用于对输入句子中所有实体的标记级标签进行编码。有向超图与标准有向图非常相似,只是其边(超弧)可以连接多个头节点和尾节点。具体而言,在表示命名实体的超图中,有两种类型的超弧:连接单个头节点和尾节点的法线边,以及连接一组头节点和尾节点的超边。如图2(b)所示,引入了超边来对嵌套结构进行编码。
在这里插入图片描述
       以前的基于超图的方法使用单个超图对输入句子中的所有实体进行编码。为了构建如此复杂的结构,他们必须扩展标签类型或生成超边作为多标签问题,这增加了建模的难度。为了缓解这个问题,并利用上述命名实体的句法特征,我们提出了一种新的局部超图结构。建议的局部超图不是表示输入句子中的所有名称实体,而是仅对共享相同边界的实体进行编码,如图2(c)(d)所示。每个局部超图都有一个生成方向(向前/向后),指示是从左边界还是右边界构建的。我们的标记方案类似于标准的 BIEO 方案,只是 BI 不是特定于类型的。使用以下四种类型的节点:

  • B 表示前向/后向局部超图中一个或多个命名实体的左/右边界标记。
  • I 表示任何命名实体内的token。
  • E c l s X E_{clsX} EclsX表示命名实体的右/左边界标记,其类型在前向/后向局部超图中为 c l s X clsX clsX
  • O 表示任何命名实体之外的token。
           节点和超弧一起用于对命名实体进行编码:从B节点到 E c l s X E_{clsX} EclsX节点的路径通过任意数量的I 节点表示本地超图中的命名实体( c l s X clsX clsX类型)。我们在所有本地超图上对此类路径执行深度优先搜索,以解码命名实体。需要注意的是,向前和向后的局部超图集都可以独立地对输入句子中的所有命名实体进行编码。

5.2 任务制定

       如图3所示,我们将命名实体的识别表述为两个阶段的过程:边界提议和超图构建,如下所述。
边界建议       给定一个由 N N N 个标记组成的输入句 X = { x 1 , x 2 , . . . , x N } X = \{x_1, x_2, ..., x_N \} X={x1x2...xN},该模型需要提出一组左边界候选者 X L = { x l i } X^L = \{x_{l_i} \} XL={xli}和一组右边界候选者 X R = { x r j } X^R = \{x_{r_j} \} XR={xrj}作为局部超图的初始 B 节点,其中 l i l_i li 是第 i i i 个左边界的索引, r j r_j rj 是第 j j j 个右边界的索引。我们将此过程视为按token进行二元分类。
构建超图       给定一个输入句子 X = { x 1 , x 2 , . . . , x N } X = \{x_1, x_2, ..., x_N \} X={x1x2...xN} 和一个左边界候选者 x l i x_{l_i} xli,通过按顺序将标签分配给子序列 { x l i , x l i + 1 , . . . , x N } \{x_{l_i}, x_{l_i+1}, ..., x_N \} {xlixli+1...xN}的每个标记来构建前向局部超图。类似地,通过标记反向子序列 {xrj , xrj−1, …, x1} { x r j , x r j − 1 , . . . , x 1 } \{x_{r_j}, x_{r_j-1}, ..., x_1 \} {xrjxrj1...x1}来构建对应于右边界 x r j x_{r_j} xrj的向后局部超图。

6 模型结构

       通常,我们的模型中有两个模块,称为边界检测器超图生成器。边界检测器首先在输入句子中提出命名实体的潜在边界。然后,超图生成器为每个边界及其子序列生成一个局部超图。在本节中,我们说明了所提模型的详细结构,以及构建局部超图的具体算法。

6.1 边界提出

       边界建议器由文本编码器和前馈层组成。作为标记二元分类器,它估计输入句子中每个标记是任何命名实体的边界的概率。我们使用与相同的方法来生成token表征。给定一个带有 N N N 个标记的句子 X = { x 1 , x 2 , . . . , x N } X = \{x_1, x_2, ..., x_N \} X={x1x2...xN},第 i i i 个标记的表示是通过首先连接四个组件来构建的:(1)语言模型的编码结果 t i l m t^{lm}_i tilm;(2)词嵌入 t i w t^{w}_i tiw;(3)词性嵌入(POS) t i p o s t^{pos}_i tipos;(4)字符级嵌入 t i c h a r t^{char}_i tichar,由char级BiLSTM生成。然后,我们将它们馈送到token级 BiLSTM 层中,并将其隐藏状态视为token表征 t i t_i ti。最后,前馈层将 t i t_i ti作为输入,并输出分数 p i l / r p^{l/r}_i pil/r,以评估第 i i i 个标记为左/右边界的可能性。
在这里插入图片描述
       与基于跨度的方法的提出策略类似,我们更愿意在提出候选边界时获得高召回率的抽样结果。因此,我们使用焦点损失 L l / r L^{l/r} Ll/r 作为我们的目标函数来最小化。
在这里插入图片描述
       其中 y i l / r y^{l/r}_i yil/r 是第 i i i 个token的真是标签。超图生成器应该能够删除低限定边界。因此,在训练过程中,我们将代币候选者的数量按 λ λ λ 的系数缩放,以包括一些低合格的边界候选者。

6.2 超图生成器

       如前所述,我们可以将输入句子中的所有命名实体表示为单个方向的局部超图集合。在实践中,我们分别在两个方向上生成局部超图,然后合并结果以获得最终预测。为了简化模型结构的描述,我们在本节的其余部分以构建局部超图的过程为例来说明所提出的方法。
       超图生成器有两个文本编码器,其结构与边界提议器中的文本编码器相同,分别生成左边界 x l i x_{l_i} xli 和相应子序列 { x l i , x l i + 1 , . . . x N } \{x_{l_i}, x_{l_{i+1}}, ...x_N \} {xli,xli+1,...xN},表示为 t l i b t^b_{l_i} tlib { t l i s , t l i + 1 s , . . . t N s } \{t^s_{l_i}, t^s_{l_{i+1}}, ...t^s_N \} {tlis,tli+1s,...tNs}.
       我们使用标准的单向 LSTM 层来生成局部超图结构。其单元记忆 C i , k C_{i,k} Ci,k和隐藏状态 h i , k h_{i,k} hi,k t l i b t^b_{l_i} tlib代替零向量初始化,以增强边界信息。以子序列为输入,在每个时间步生成一个标签作为多类问题,然后使用以下规则 R R R 扩展局部超图:(1) 将局部超图初始化为单个 B 节点。(2) 在每个时间步中,只有最后一个 B/I 节点被视为头节点。(3) 如果预测到 c l s X clsX clsX 标签,则I节点与 E c l s X E_{clsX} EclsX 节点一起通过超边连接到头节点。(4) 当预测 I/O标记时,I/O节点将连接到具有正常边沿的头节点。(5)一旦预测到O节点,局部超图就会停止增长。
在这里插入图片描述
       其中 k ∈ { 0 , 1 , . . . , N − l i } k\in\{0,1,...,N-l_i \} k{0,1,...,Nli} p i , k p_{i,k} pi,k是对应于第 i i i 个左边界 x l i x_{l_i} xli 的子序列中第 k k k 个标记的预测概率, y ^ i , k \hat{y}_{i,k} y^i,k是其预测的标记。 G i f G^f_i Gif 是通过在标记序列 Y ^ i \hat{Y}_i Y^i上实现 R R R 生成的第 i i i 个前向局部超图。
       然后,我们通过对从B节点开始到 E c l s X E_{clsX} EclsX 节点结束的路径进行深度优先搜索,从本地超图中解码命名实体。我们使用一组四元组 E f / b = { ( i d x l , i d x r , c l s , p f / b ) } E^{f/b} = \{(idx_l, idx_r, cls, p^{f/b})\} Ef/b={idxlidxrclspf/b} 来表示前向/后向预测的命名实体,其中 i d x l idx_l idxl i d x r idx_r idxr 是边界索引, c l s cls cls 是预测的实体类型, p p p 是最后一个节点为 E c l s X E_{clsX} EclsX 的预测概率。
       我们使用交叉熵 L g L^g Lg 作为目标函数,以便在训练超图构建器时最小化。我们将标签序列的长度限制为最多只包含一个 O O O 标签,以节省计算资源,因为生成停止增长。假设第 i i i 个标签序列的长度为 V i V_i Vi
在这里插入图片描述
       其中 ξ ξ ξ 是节点类型的集合。 y i , k y_{i,k} yi,k 是子序列中第 k k k 个标记的真值类型,从第 i 个左边界开始。 P i , k c P^c_{i,k} Pi,kc 是相应子序列中第 k k k 个标记被标记为 c c c 型的预测概率。
       我们观察到,命名实体中限定词和标题词的组合顺序非常多样化,导致它们在不同方向的识别难易程度上存在差异。因此,我们首先在两个方向上分别标识命名实体。然后,将命名实体 E f E^f Ef E b E^b Eb 的集合合并以形成最终预测。具体来说,我们计算集合中每个候选实体( i d x l idx_l idxl i d x r idx_r idxr c l s cls cls)的平均分数 p m p^m pm,如下所示
在这里插入图片描述
       如果 p m < θ p^m < θ pm<θ,则删除建议的候选实体,其中 θ 是作为阈值的超参数。

7 实验

       为了评估所提出的方法,我们在四个广泛使用的嵌套NER数据集上进行了实验:ACE04、ACE05、KBP17和GENIA。
       ACE04 和 ACE05是具有 7 个实体类别的嵌套数据集,我们使用与之前工作相同的设置,并按 8:1:1 将它们分为训练集、开发和测试集。
       GENIA是一个由生物学文本组成的嵌套数据集。有 5 种实体类型:DNA、RNA、蛋白质、细胞系和细胞类别。我们使用 90%/10% 的训练/测试拆分。
       KBP17有5个实体类别。我们将所有样本拆分为 866/20/167 个文档,用于训练/开发/测试集,遵循与之前工作相同的设置。

7.1 评估指标

       我们采用精确度、召回率和 F1 分数来评估性能。在这里,我们使用严格的评估指标,只有当一个实体的边界和类别同时正确时,它才被认为是正确标记的。

7.2 参数设置

       在 ACE04、ACE05 和 KBP17 的实验中,我们利用 BERT-large和 GloVe来初始化我们的编码器。 t i l m t^{lm}_i tilm t i w t^w_i tiw t i p o s t^{pos}_i tipos t i c h a r t^{char}_i tichar t i t_i ti 的尺寸分别为 1024、300、512、1024 和 1024。对于GENIA,我们用BioBERT-large和BioWordvec替换BERT和GloVe。 t i l m t^{lm}_i tilm t i w t^w_i tiw 对应的尺寸为 1024、200。根据 ACE04、ACE05 和 KBP17 开发集的性能,将6.1种最后一个公式中使用的 γ γ γ设置为 0.9,将采样候选边界的尺度超参数 λ λ λ 设置为 5,将合并阈值 θ θ θ 设置为 0.5。对于所有实验,我们使用 AdamW 优化器和线性预热衰减学习率训练模型 100 个 epoch。BERT模块和其他参数的初始学习率分别设置为1e-5和1e-3。

7.3 基线

       我们在 ACE04、ACE05、GNIA 和 KBP17 数据集上将我们的方法与几种最先进的方法进行了比较,包括基于跨度、基于超图、序列标记和其他方法:

  • Katiyar 和 Cardie (2018) 利用 BILOU 标记方案来学习超图表示。
  • Luo 和 Zhao (2020) 提出了一个具有两个相互作用的子图模块的二分平面图网络。
  • Wang et al. (2020) 设计了正态和逆金字塔结构,通过双向相互作用来识别实体。
  • Shen et al. (2021) 提出了一个两阶段实体标识符来维护高质量的跨度候选者。
  • Tan et al. (2021) 提供了一组固定的可学习向量来学习有价值跨度的模式。
  • Yuan et al. (2022) 提出了一种新的三仿射机制,包括三仿射注意力和评分。
  • Shen et al. (2022) 提出了并行实例查询网络 (PIQN),它设置全局和可学习的实例查询,以并行方式从句子中提取实体。

8 结果与讨论

8.1 主要结论

       所提出的方法和基线在所有四个数据集上的性能如表2所示。为了公平起见,我们不会将所提出的方法与基于超大型预训练模型的方法进行比较。我们的方法在所有嵌套命名实体识别数据集上的表现优于所有最先进的模型,在 ACE04、ACE05、GNIA 和 KBP17 上分别取得了 88.46%、87.82%、82.09% 和 86.55% 的 F1 分数,分别提高了 +0.32%、+0.41%、+0.32% 和 +1.05%。
       我们认为,由于以下原因,该方法优于以往方法:(1)边界信息在命名实体识别中起着重要作用,尤其是那些包含在相同嵌套结构中的边界信息。LHBN 通过为每个边界初始化局部序列标记任务并按顺序生成局部超图来增强此信息,而边界的使用仅限于跨度候选的辅助评分方法。(2)命名实体的标签本质上是一个无序集合。然而,以前的序列标记方法对识别顺序设置了限制,例如内-外,这在我们的方法中是不需要的。(3)可以向前和向后构建局部超图,以处理不同类型的嵌套结构。
在这里插入图片描述

8.2 消融实验

       我们进行了几次消融实验,以阐明所提方法在ACE04上的重要设计,结果如表3所示。
在这里插入图片描述

8.2.1 双向预测的有效性

       命名实体的句法结构多种多样,这带来了从前向和后向识别它们的难度差异。例如,如果一个实体以标题开头,以一个长长的归属子句结尾,例如“曾担任已故总统卢武铉幕僚长的立法者”。向前处理很简单,首先识别标题词,然后按顺序标记限定词。相比之下,很难将“Moohyun”视为正确的边界。在所提出的方法中,最终结果是通过合并来自两个方向的预测来生成的。与单向结果相比,如第 2 行(向前)和第 3 行(向后)所示,它带来了持续的改进。

8.2.2 单个编码器对边界token的有效性

       在这项工作中,我们利用单独的编码器来生成边界标记和子序列的表示。比较表4 中的第 4 行和第 1 行,可以观察到单独的编码器在 ACE04 上将 F1 分数提高了 +0.73%。一种解释可能是,当token位于命名实体的边界或内部时,token的语义信息是不同的。
在这里插入图片描述

8.2.3 边界初始化的有效性

       在我们的方法中,LSTM 层是用每个边界标记初始化的,这类似于一些问答公式。每个局部超图的构建被视为一个基于查询的过程:给定一个边界token作为查询,模型需要预测子序列中的命名实体作为答案。与使用零向量初始化 LSTM 单元的细胞内存的简化版本相比,它实现了 +0.44% 的 F1 分数提高,如第 1 行和第 5 行所示。我们认为,边界特定初始化增强了不同局部超图的不同上下文信息。

8.3 分析

8.3.1 方向首选项

       为了进一步研究双向合并如何提高性能,我们计算了前向和后向预测对 GENIA 总体真正预测的贡献。结果表明,3.44%和5.93%的真阳性命名实体来自前向和后向预测。换言之,对识别不同的命名实体存在方向性偏好。因此,合并双向局部超图有利于整体性能。

8.3.2 方向首选项

       与基于 Span 的模型的比较。我们在表5 中说明了不同长度范围的实体的识别F1得分。结果表明,该模型在绝大多数长度范围内均具有显著优势,特别是对于长度大于15的命名实体的识别。我们认为主要有两个原因:(1)由于计算资源有限,在基于跨度的方法的提出阶段,许多大跨度候选者被否定。(2)尽管基于多个跨度的方法通过实现注意力机制引入了跨跨度信息交互,由于在跨度提出阶段追求高召回率,因此无效,并且低质量的跨度候选者在计算中引入了噪声。相比之下,局部超图的顺序生成使得在嵌套结构内处理信息变得更加容易。与基于跨度的模型相比,我们的方法还具有时间复杂度的优势。他们需要对几乎所有可能的跨度进行分类,这导致了 O ( N 2 ) O(N^2) O(N2) 时间复杂度的高计算成本,如果我们考虑到跨跨度的关注,这将进一步增加。对于所提出的方法,提出边界的时间复杂度为 O ( N ) O(N) O(N)。假设句子中的实体数量为q,则构建局部超图的时间复杂度为 O ( q N ) O(qN) O(qN)。因此,总时间复杂度为 O ( N + q N ) O(N + qN) O(N+qN),其中 q < < N q << N q<<N
在这里插入图片描述

8.3.3 个案研究

       我们在表4 中提供了两个案例来展示我们模型的识别结果。如第一列所示,LHBN 能够识别具有复杂嵌套结构的长实体。从这两种情况下,我们可以看到方向偏好,即命名实体更容易从标题开始的方向识别。此外,双向预测结果可以很好地相互补充。从两个模型的预测中,我们可以看到LHBN在各种复杂样品上的表现优于提出的模型。

9 结论

       我们提出了一种新的方法,将嵌套命名实体识别视为构建局部超图(用local超图解决Nested NER) 。首先,我们提出一定数量的边界候选者,然后使用序列标记方法为每个候选者生成一个局部超图(LHBN流程)。局部超图结构避免了先前作品中过于复杂的构建过程。此外,利用局部超图使我们的序列标记模块摆脱了以特定顺序识别实体的困扰,而以前的序列标记方法则受到影响(超图结构的好处)。与基于跨度的方法相比,我们的方法具有较低的时间复杂度。我们的方法在四个广泛使用的数据集上获得了新的最佳 F1 分数:ACE04、ACE05、GENIA 和 KBP17(LHBN优势)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值