KG-BERT论文阅读

链接:KG-BERT: BERT for Knowledge Graph Completion

摘要

知识图是许多人工智能任务的重要资源,但往往存在不完整性。本工作建议使用预先训练的语言模型来完成知识图。本论文将知识图中的三元组视为文本序列,并提出了一个名为来自 Transformer 的知识图双向编码器表示(KG-BERT) 的新框架来对这些三元组进行建模;该方法以三元组的实体描述和关系描述为输入,利用KG-BERT语言模型计算三元组的评分函数。在多个基准知识图上的实验结果表明,该方法能够在三元组分类、链接预测和关系预测任务中达到最先进的性能。

简介

大规模的知识图(KG),如FreeBase, YAGO和WordNet,为许多重要的AI任务,如语义搜索、推荐和问题回答提供了有效的基础。KG通常是一个多关系图,其中实体作为节点,关系作为边。每条边表示一个三元组(head entity, relation, tail entity),简称(h, r, t)中两个实体之间的关系,例如:(Steve Jobs, founded, Apple Inc.)。尽管知识图很有效,但它还远远不够完善。这个问题激发了knowledge graph completion的任务,该任务的目标是评估知识图中不存在的三元组的合理性。

在knowledge graph completion方面已经做了大量的研究工作。一种常见的方法称为知识图嵌入,它将三元组中的实体和关系表示为实值向量,并利用这些向量评估三元组的合理性。然而,大多数知识图嵌入模型只使用观察到的三重事实中的结构信息,这使得知识图具有稀疏性。近年来一些研究通过引入文本信息来丰富知识表示,但他们学习的是不同三元组中相同实体/关系的独特文本嵌入,而忽略了上下文信息。例如,史蒂夫·乔布斯描述中的不同词语与“founded”和“isCitizenOf”这两种关系相关的重要性权重应该是不同的,而“wroteMusicFor”关系可以有两种不同的含义“写歌词”和“作曲”赋予不同的实体。另一方面,大规模文本数据中的句法和语义信息没有得到充分利用,因为它们只使用实体描述、关系提及或与实体共现的词。

最近,预先训练的语言模型,如ELMo、GPT、BERT和XLNet在自然语言处理(NLP)方面显示了巨大的成功,这些模型可以学习带有大量自由文本数据的上下文化单词嵌入,并在许多语言理解任务中实现最先进的性能。其中BERT是最突出的一种,通过"掩码语言建模/MLM"和"下一句预测/NSP"对双向Transformer编码器进行预训练。它可以在预先训练的模型权重中获取丰富的语言知识。

本研究提出了一种利用预先训练的语言模型来完成知识图的新方法。具体而言,首先将实体、关系和三元组视为文本序列,并将知识图补全问题转化为序列分类问题。然后,微调这些序列的BERT模型,以预测一个三元组或一个关系的合理性。该方法可以在多个KG完成任务中取得较好的性能。本聊论文的贡献总结如下:

  • 提出了一种新的知识图补全的语言建模方法;是当时第一个用预训练的语境语言模型来模拟三元组的合理性的研究;
  • 在多个基准数据集上的结果表明,本论文提出的方法可以在三元组分类、关系预测和链接预测任务中取得最先进的结果。

相关工作

Knowledge Graph Embedding

Knowledge Graph Embedding: A Survey of Approaches and Applications对知识图嵌入方法进行了文献综述,这些方法可以根据三元组 ( h , r , t ) (h, r, t) (h,r,t)的不同评分函数分为转换距离模型和语义匹配模型。平移距离模型使用基于距离的评分函数。他们通过两个实体向量 h h h t t t之间的距离来评估三元组 ( h , r , t ) (h, r, t) (h,r,t)的合理性,通常是在关系向量r执行转换之后。代表性模型是TransE(Translating Embeddings for Modeling Multi-relational Data)及其扩展包括TransH(Knowledge Graph Embedding by Translating on Hyperplanes)。对于TransE,评分函数定义为负平移距离 f ( h , r , t ) = − ∣ ∣ h + r − t ∣ ∣ f(h, r, t) =−||h + r−t|| f(h,r,t)=∣∣h+rt∣∣。语义匹配模型使用基于相似度的评分函数;代表性模型是RESCAL (A Three-Way Model for Collective Learning on Multi-Relational Data), DistMult (Embedding Entities and Relations for Learning and Inference in Knowledge Bases)及其扩展。对于DistMult,评分函数定义为双线性函数 f ( h , r , t ) = < h , r , t > f (h, r, t) = < h, r, t > f(h,r,t)=<h,r,t>。最近,卷积神经网络在knowledge graph completion方面也显示出良好的结果。

上述方法仅利用三元组观察到的结构信息进行知识图补全,同时引入实体类型、逻辑规则和文本描述等不同类型的外部信息来提高性能。对于文本描述,Reasoning With Neural Tensor Networks for Knowledge Base Completion首先通过实体名称中包含的单词嵌入的平均值来表示实体,其中单词嵌入从外部语料库中学习。Knowledge Graph and Text Jointly Embedding提出通过对齐Wikipedia锚和实体名称,将实体和单词联合嵌入到相同的向量空间中。尽管它们取得了成功,但这些模型学习了实体和关系的相同文本表示,而实体/关系描述中的单词在不同的三元组中可以有不同的含义或重要权重。

为了解决上述问题,Text-enhanced representation learning for knowledge graph提出了一种文本增强型 KG 嵌入模型 TEKE,它可以将不同的嵌入分配给不同三元组中的关系;TEKE 利用实体注释文本语料库中实体和单词的共现。Knowledge Graph Representation with Jointly Structural and Textual Encoding使用带有注意机制的LSTM编码器来构造给定不同关系的上下文文本表示。虽然这些方法可以处理不同三元组中实体和关系的语义多样性,但由于仅利用实体描述、关系提及和词与实体共现,无法充分利用大规模自由文本数据中的句法和语义信息

Language Model Pre-training

预先训练的语言表示模型可以分为两类:基于特征的方法和微调方法。传统的词嵌入方法,如Word2Vec和Glove,旨在采用基于特征的方法学习与上下文无关的词向量。ELMo将传统的词嵌入推广到上下文感知的词嵌入中,词的多义词可以得到适当的处理。与基于特征的方法不同,GPT 和BERT等微调方法使用预先训练的模型架构和参数作为特定NLP任务的起点。预先训练的模型从自由文本中捕获丰富的语义模式。最近,预训练的语言模型也在KG的背景下进行了探索。DOLORES: Deep Contextualized Knowledge Graph Embeddings在 KG 中随机游走生成的实体关系链(句子)上学习上下文嵌入,然后使用嵌入作为 TransE 等 KG 嵌入模型的初始化。ERNIE: Enhanced Language Representation with Informative Entities在KG中加入信息实体以增强BERT语言表示。COMET: Commonsense Transformers for Automatic Knowledge Graph Construction实体与已知关系进行比较的模式,该方法侧重于生成新的实体和关系。与这些研究不同,本论文使用实体和关系的名称或描述作为输入,并微调BERT来计算三元组的合理性分数

方法

BERT

BERT是一种基于多层双向Transformer编码器的最先进的预训练上下文语言表示模型。Transformer 编码器基于自注意力机制。 BERT框架有两个步骤:预训练和微调。在预训练期间,BERT 在大规模未标记的通用域语料库(来自 BooksCorpus 和英语维基百科的 3,300M 单词)上进行了两项自我监督任务的训练:掩码语言建模/MLM和下一句预测/NSP。在MLM中,BERT预测随机屏蔽输入标记。在NSP中,BERT预测两个输入句子是否连续。在微调过程中,利用预先训练好的参数权值对BERT进行初始化,利用句子对分类、问答和序列标注等下游任务的标记数据对所有参数进行微调。

KG-BERT

为了充分利用具有丰富语言模式的上下文表示,本论文为knowledge graph completion任务微调预训练的BERT。将实体和关系表示为它们的名称或描述,然后将名称/描述词序列作为 BERT 模型的输入句子进行微调。作为原始 BERT,“句子”可以是连续文本或单词序列的任意跨度,而不是实际的语言句子。为了模拟三元组的合理性,将 ( h , r , t ) (h, r, t) (h,r,t)的句子打包为单个序列。一个序列就是BERT的输入token序列,可以是两个实体名称/描述语句,也可以是 ( h , r , t ) (h, r, t) (h,r,t)打包在一起的三个语句。

用于建模三元组的KG-BERT的体系结构如图1所示,将这个KG-BERT版本命名为KGBERT(a)。每个输入序列的第一个标记总是一个特殊的分类标记[CLS]。头部实体表示为一个包含令牌 T o k 1 h , … , T o k a h Tok^h_1,…, Tok^h_a Tok1hTokah,例如,“Steven Paul Jobs was an American business magnate, entrepreneur and investor.” 或 “Steve Jobs”;关系表示为一个包含 T o k 1 r , … , T o k b r Tok^r_1,…, Tok^r_b Tok1rTokbr,例如,“founded”;尾实体被表示为一个包含 T o k 1 t , … , T o k c t Tok^t_1,…, Tok^t_c Tok1tTokct,例如:“Apple Inc. is an American multinational technology company headquartered in Cupertino, California.” 或 “Apple Inc.”。包含实体和关系的句子由一个特殊的符号[SEP]分隔。对于给定的标记,它的输入表示是通过对相应的标记、段和位置嵌入求和来构建的。[SEP]分离的不同元素具有不同的段嵌入,头实体和尾实体句子中的token具有相同的段嵌入 e A e_A eA,而关系句子中的token具有不同的段嵌入 e B e_B eB。同一位置的不同令牌 i ∈ 1 , 2 , 3 , … , 512 i∈{1,2,3,…, 512} i1,2,3512的嵌入位置相同。每个输入标记i都有一个输入表示 E i E_i Ei。令token表示被送入BERT模型架构,该架构是基于Transformer中描述的原始实现的多层双向变压器编码器。特殊 [CLS] 的token和第 i 个输入token的最终隐藏向量表示为 C ∈ R H C ∈ R^H CRH T i ∈ R H T_i ∈ R^H TiRH,其中 H 是预训练BERT中的隐藏状态大小。使用[CLS]对应的最终隐藏状态 C C C作为计算单元组分数的聚合序列表示 ,三元组分类微调过程中引入的唯一新参数是分类层权值 W ∈ R 2 × H W∈R^{2×H} WR2×H。三元组 τ = ( h , r , t ) τ = (h, r, t) τ=(h,r,t)的得分函数是 s τ = f ( h , r , t ) = s i g m o i d ( C W t ) s_τ = f (h, r, t) = sigmoid(CW^t) sτ=f(h,r,t)=sigmoid(CWt) s τ ∈ r 2 s_τ∈r^2 sτr2是一个二维实向量,其中 s τ 0 , s τ 1 ∈ [ 0 , 1 ] s_{τ0}, s_{τ1}∈[0,1] sτ0,sτ1[0,1] s τ 0 + s τ 1 = 1 s_{τ0} + s_{τ1} = 1 sτ0+sτ1=1。给定相应构造的正三元组集合 D + D^+ D+和负三元组集合 D − D^− D,用 s τ s_τ sτ和三元组标签计算交叉熵损失:
在这里插入图片描述
其中 y τ ∈ 0 , 1 y_τ∈{0,1} yτ0,1是三元组的标签(负的或正的)。负三元组集合 D − D^− D是通过将正三元组 ( h , r , t ) ∈ D + (h, r, t)∈D^+ (h,r,t)D+中的头实体 h h h或尾实体t替换为随机实体 h ′ h' h t ′ t' t,即
在这里插入图片描述
其中E是实体的集合。注意,如果三元组已经是正集D+,它将不会被视为负例。利用梯度下降法更新预先训练的参数权值和新权值。
在这里插入图片描述

图1 微调KG-BERT架构

KG-BERT用于预测关系的体系结构如图2所示,将这个KG-BERT版本命名为KGBERT(b),只使用两个实体的序列来预测它们之间的关系。在初步实验中发现直接预测与两个实体的关系比使用带有关系损坏的KG-BERT(a)更好,即通过用随机关系 r ′ r' r替换关系 r r r来生成负三元组。与KG-BERT(a)一样,使用[CLS]对应的最终隐藏状态C作为两个实体的表示。在关系预测微调中引入的唯一新参数是分类层权重 W ′ ∈ R R × H W ' ∈ R^{R×H} WRR×H,其中 R R R是KG中关系的数量。三元组 τ = ( h , r , t ) τ = (h, r, t) τ=(h,r,t)的评分函数是 s τ ′ = f ( h , r , t ) = s o f t m a x ( C W ′ T ) s_τ' = f (h, r, t) = softmax(CW'^T ) sτ=f(h,r,t)=softmax(CWT) s τ ′ ∈ R R s'_τ ∈ R^R sτRR是一个 R R R维实向量, s τ i ′ ∈ [ 0 , 1 ] s'_{τi}∈ [0, 1] sτi[0,1] ∑ i R s τ i ′ = 1 \sum_{i}^R s'_{τi} = 1 iRsτi=1。用 s τ ′ s'_τ sτ和关系标签计算以下交叉熵损失:
在这里插入图片描述其中 τ τ τ是一个观察到的正三元组, y τ i ′ y'_{τi} yτi是三元组的关系指示器,当 r = i r = i r=i y τ i ′ = 1 y'_{τi} = 1 yτi=1,当 r r r不等于 i i i时y’_{τi} = 0$。
在这里插入图片描述

图2 用于预测两个实体之间关系的微调KG-BERT架构

实验

通过三个实验任务来评估KG-BERT,想要确定:

  • 模型能否判断一个看不见的三重事实(h, r, t)是否为真?
  • 模型能否在给定另一个实体和特定关系的情况下预测一个实体吗?
  • 模型能否预测给定两个实体的关系吗?

数据集

在6个广泛使用的基准KG数据集上进行了实验:WN11、FB13、FB15K、WN18RR、FB15K-237和UMLS。WN11和WN18RR是WordNet的两个子集,FB15K和FB15K-237是Freebase的两个子集。WordNet是一个大型的英语词汇KG,其中每个实体作为一个同义词集,由几个单词组成,对应一个不同的词义。Freebase是一个关于一般世界事实的大型知识图谱。UMLS是一个包含语义类型(实体)和语义关系的医学语义网络。WN11 和 FB13 的测试集包含正负三元组,可用于三元组分类。 WN18RR、FB15K、FB15k-237 和 UMLS 的测试集只包含正确的三元组,对这些数据集进行链接(实体)预测和关系预测。表 1 提供了使用的所有数据集的统计数据。
在这里插入图片描述

表1 数据集汇总统计

对于 WN18RR,使用同义词集定义作为实体句子。对于 WN11、FB15K 和 UMLS,使用实体名称作为输入语句。对于 FB13,使用 Wikipedia 中的实体描述作为输入句子。对于 FB15k-237,使用了 实体描述。对于所有数据集,使用关系名称作为关系句子。

Baselines

将KG- bert与多种最先进的KG嵌入方法进行比较,如下:TransE及其扩展TransH, TransD,TransR , TransG, TranSparse和PTransE, DistMult及其扩展DistMult-HRS,该方法只使用了KG中的结构信息。神经张量网络NTN及其简化版本项目ProjE;CNN模型:ConvKB、ConvE和R-GCN。KG嵌入文本信息:TEKE, DKRL, SSP, AATE。KG嵌入实体层次类型:TKRL。语境化KG嵌入:DOLORES 。复数KG嵌入ComplEx和RotatE。对抗性学习框架:KBGAN。

Settings

选择预训练的BERT- base模型,12层,12个自我注意头,H = 768作为KG-BERT的初始化,然后用BERT中实现的Adam对KG-BERT进行微调。初步实验中发现BERT-Base模型总体上比BERT-Large模型能取得更好的结果,而且BERT-Base模型更简单,对超参数选择的敏感性更低。按照原来的BERT,在KG-BERT微调中设置了以下超参数,batch size为32,学习率为5e-5,dropout为0.1。也尝试了这些超参数的其他值,但没有发现太大的差异。为不同的任务调整设置了三种epoch值:三元组分类是3,链接(实体)预测是5,关系预测是20。实验发现更大的epoch可以在关系预测中产生更好的结果,但在其他两个任务中却没有。对于三元分类训练,对正三元组采样 1 个负三元组,这可以确保二元分类中的类平衡。对于链接(实体)预测训练,对正三元组采样 5 个负三元组;尝试了 1、3、5 和 10,发现 5 是最好的。

三元组分类

三元组分类旨在判断给定的三元组 ( h , r , t ) (h, r, t) (h,r,t)是否正确。表2展示了不同方法在 WN11 和FB13上的三元组分类精度。可以看到KG-BERT(a)在很大程度上明显优于所有基线,这表明了本论文方法的有效性。运行本论文模型10次,发现标准差小于0.2,改进是显著的(p < 0.01)。KG-BERT(a)取得了当时最好的效果。对于更深入的性能分析,注意到TransE无法获得较高的精度分数,因为它无法处理1-to-N、N-to-1和N-to-N关系。TransH、TransR、TransD、TranSparse和TransG通过引入特定的关系参数而优于TransE。DistMulti-HRS的性能相对较好,并且可以通过在DistMulti-HRS中使用层次关系结构信息来改进它。ConvKB显示了良好的结果,这表明CNN模型可以捕获实体和关系嵌入之间的全局交互。DOLORES通过在实体-关系随机游动链中加入上下文信息进一步改进了ConvKB。NTN在FB13上也取得了很好的性能,这意味着它是一个表达模型,用单词嵌入表示实体是很有帮助的。其他文本增强的KG嵌入TEKE和AATE的性能优于它们的基础模型,如TransE和TransH,这表明了外部文本数据的好处。但是,由于富语言模式的使用较少,它们的改进仍然有限。KG-BERT(a)在WN11上比FB13上比基线有更大的改进,因为WordNet是一个更接近于预训练语言模型中包含的语言模式的语言知识图。
在这里插入图片描述

表2 不同嵌入方法的三重分类精度(百分比);基线结果来自相应的论文

图 3 报告了原始WN11和FB13训练三元组的5%、10%、15%、20% 和 30%的三元组分类准确率。注意到KG-BERT(a) 可以通过有限的训练三元组实现更高的测试准确度。例如,KGBERT(a)在FB13 上实现了88.1%的测试准确率,只有5%的训练三元组,而在WN11上的测试准确率为87.0%,只有 10% 的训练三元组,高于一些基线模型(包括文本增强模型),即使是完整的训练三元组。这些令人鼓舞的结果表明,KG-BERT(a)可以充分利用大量外部文本数据中丰富的语言模式来克服知识图的稀疏性。
在这里插入图片描述

图3 训练数据比例与三元组分类测试准确性

KG-BERT(a)表现良好的主要原因有四个方面:

  • 输入序列包含实体词序列和关系词序列
  • 三元组分类任务与 BERT 预训练中的下一句预测任务非常相似,后者捕获大型自由文本中两个句子之间的关系,因此预训练的 BERT 权重非常适合推断三元组中不同元素之间的关系
  • 标记隐藏向量是上下文嵌入。同一个标记在不同的三元组中可以有不同的隐藏向量,因此上下文信息被显式使用
  • 自注意力机制可以发现与三重事实相关的最重要的词

链接预测

链接(实体)预测任务是给定 ( ? , r , t ) (?, r, t) (?,r,t)预测头实体 h h h或给定 ( h , r , ? ) (h, r, ?) (h,r,?)预测尾实体 t t t ? ? ?表示缺失的元素。使用由评分函数 f ( h , r , t ) f(h, r, t) f(h,r,t)(本论文的方法中为 s τ 0 s_{τ0} sτ0)在测试三元组上产生的排名来评估结果。每个正确的测试三元组 ( h , r , t ) (h, r, t) (h,r,t)通过用每个实体 e ∈ E e ∈ E eE替换其头部或尾部实体来破坏,然后这些候选者按其合理性得分的降序排列。报告了两个常见的指标,正确实体的平均排名 (MR) 和 Hits@10,这意味着正确实体在前 10 名中的比例。MR 越低越好,而 Hits@10 越高越好。只报告过滤设置如TransE下的结果,该设置在获得排名列表之前删除了训练、开发和测试集中出现的所有损坏的三元组。

表3展示了各种模型的链路预测性能;使用OpenKE工具包测试了一些经典的基线模型,其他结果来自原始论文。能观察到:1)KGBERT(a) 可以实现比基线模型更低的 MR,它在 WN18RR 和 FB15k237 上实现了最低的平均;2)KGBERT(a) 的 Hits@10 分数低于一些最先进的方法, KGBERT(a) 可以避免实体和关系句子的语义相关性非常高的排名,但 KG 结构信息没有明确建模,因此它无法将给定实体的某些相邻实体排名前 10。CNN模型ConvE和ConvKB比图卷积网络R-GCN性能更好。ComplEx在WN18RR和FB15k-237上表现不佳,但在KBGAN和RotatE上可以通过对抗性负采样得到改善。
在这里插入图片描述

表3 WN18RR、FB15k-237 和 UMLS 数据集的链接预测结果。基线模型是使用 OpenKE 工具包实现的,其他基线结果取自原始论文

关系预测

这个任务预测两个给定实体之间的关系,即 ( h , ? , t ) (h,?,t) (h?t)。该过程类似于链接预测,但用关系得分 s τ ′ s'_ τ sτ对候选项进行排序;使用Mean Rank (MR)和filtered的Hits@1来评估关系排名。

表 4 报告了 FB15K 上的关系预测结果,KG-BERT(b) 显示出有希望的结果,并达到了当前最高的 Hits@1分数。KG-BERT(b)类似于BERT微调中的句子对分类,也可以从BERT预训练中受益。文本增强模型DKRL和SSP也可以胜过仅结构方法TransE和TransH。 TKRL和PTransE可以很好地处理分层实体类别和扩展路径信息。 ProjE通过将KG完成视为一个排名问题并优化排名分数向量,取得了非常有竞争力的结果。

注意力可视化

在图4和图5中展示了KG-BERT的注意模式,使用(Vig 2019)发布的可视化工具。图 4 描述了KG-BERT(a)的注意力模式。以来自WN18RR的正训练三元组(__twenty_dollar_bill_NN_1, _hypernym, __note_NN_6)为例。实体描述“a United States bill worth 20 dollars”和“a piece of paper money”以及关系名称“hypernym”被用作输入序列。观察到,一些重要的单词,如“纸”和“钱”,与标签标记[CLS]相关的注意力得分更高,而一些不太相关的单词,如“联合”和“国家”,获得的关注较少。另一方面,我们可以看到不同的注意力头专注于不同的tokens。[SEP]由相同的六个注意头突出显示,“a”和“piece”由三个相同的注意头突出显示,而“paper”和“money”由其他四个注意头突出显示。如Transformer论文中提到,多头注意力允许KG-BERT共同关注来自不同位置的不同表示子空间的信息,不同的注意力头连接起来计算最终的注意力值。图5说明了KG-BERT(b)的注意力模式。来自FB15K的三元组(20th century, /time/event/includes event, World War II)被用作输入,可以看到与KG-BERT(a)中类似的注意力模式,六个注意力头关注头部实体中的“世纪”,而其他三个注意力头关注尾部实体中的“战争”和“ii”。多头注意力可以关注三元组中两个实体的不同方面
在这里插入图片描述

图4 KG-BERT(a)注意模式图解;不同的颜色意味着不同的注意力,颜色的透明度反映了注意力得分;展示了Transformer模型第11层中[CLS]和其他令牌之间的关注权重。

在这里插入图片描述

图5 KG-BERT(b)注意模式图解

讨论

实验结果表明,KG-BERT能够在三个knowledge graph completion任务中取得较好的性能。但是一个主要的限制是BERT模型昂贵,这使得链路预测评估非常耗时,链路预测评估需要用几乎所有的实体替换头或尾实体,并且所有损坏的三序列都被输入到12层Transformer模型中。可能的解决方案是引入像 ConvE 这样的 1-N 评分模型或使用轻量级语言模型

结论和未来工作

本论文提出了一种新的知识图补全方法——知识图BERT (KG-BERT);将实体和关系表示为名称/描述文本序列,将知识图补全问题转化为序列分类问题。KG-BERT可以利用大量自由文本中丰富的语言信息,并突出显示连接到三元组的最重要的单词。所提出的方法通过在多个基准KG数据集上优于最先进的结果来展示有希望的结果。

未来的一些方向包括通过使用KG结构对文本信息进行联合建模来改进结果,或使用带有更多文本数据的预训练模型(如XLNet)。将KG-BERT作为一种知识增强的语言模型应用于语言理解任务是未来将要探索的一项有趣的工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值