Glancing Transformer for Non-Autoregressive Neural Machine Translation翻译

在这里插入图片描述

公众号 系统之神与我同在

在这里插入图片描述
图1:机器翻译方法的概率模型。(b)普通的神经机器翻译(NAT)采用条件输入凹痕LM。©掩蔽-预测神经网络翻译(NAT)使用掩蔽LM(MLM)和RE需要多次解码。(d)我们提出的Glancing语言模型(GLM)利用解码器的预测来决定Glancing在训练期间进行采样策略,并且在推理期间只需要一次解码。

摘要

最近关于非自回归神经网络翻译(NAT)的研究旨在,通过并行解码来提高效率,而不牺牲翻译的质量。然而,现有的神经网络转换(NAT)方法要么不如Transformer,要么需要多个解码遍,导致加速率降低。我们提出了单遍并行生成模型GlancingLanguageModel(GLM),它是一种研究单遍并行生成模型词相互依赖性的方法。利用GlancingLanguageModel(GLM)开发了用于机器翻译的GlancingTransformer(GLAT)。通过单通道并行解码,GLAT能够以8x-15x加速比产生高质量的翻译。在多个WMT语言方向上的实验表明,GLAT优于以往所有单程非自回归方法,与Transformer接近,将差距减小到0.25-0.9BLEU点。

1 导言

Transformer是机器翻译中最广泛使用的架构(Vaswani et ai.,2017)。尽管Transformer性能强劲,但由于其概率模型采用顺序自回归分解,其解码效率较低(图1a)。最近的工作,如非自回归Transformer(神经机器翻译(NAT)),旨在并行解码目标token,以加快生成(Gu等,2018)。然而,普通的神经机器翻译(NAT)在翻译质量上仍然落后于Transformer-大约7.0BLEU分。神经机器翻译(NAT)假设给定源语句的目标token的条件独立性。我们怀疑神经机器翻译(NAT)的条件独立性假设阻止了目标句子中学习单词的相互依存性。注意,这种单词相互依赖性是至关重要的,因为Transformer通过从左到右的解码显式地捕捉到这一点(图1a)。

提出了几种补救措施(Ghazvininejad et ai.,2019;Gu et ai.,2019),以在保持并行解码的同时捕获字相互依赖性。他们的共同想法是迭代地解码目标token,同时使用掩蔽语言模型训练每一次解码(图 lc)。由于这些方法需要多遍解码,因此其生成速度显著地慢于普通的神经机器翻译(NAT)。仅单程生成,这些方法仍大大落后于自回归Transformer。

一个悬而未决的问题是完整的并行解码模型是否能够实现与Transformer类似的机器翻译性能。它应该是非自回归的,并且在推理期间只进行一遍解码。

为了解决这个问题,我们提出了Glancing语言模型(GLM),一种训练概率序列模型的新方法。基于GlancingLanguageModel(GLM),我们开发了用于神经机器翻译的模型Transformer(GLAT)。它仅通过单个解码遍实现并行文本生成。然而,在多种情况下,其性能优于以前的神经网络转换(NAT)方法,并取得了与强Transformer基线相当的性能。直观地,GlancingLanguageModel(GLM)采用自适应Glancing 采样策略,如果在Transformer(GLAT)的训练过程中太难训练,则Glancing 参考的某些片段。相应地,当模型被很好地调整时,它将自适应地降低Glancing 采样的百分比,确保生成的模型能够学习以单遍方式生成整个句子。

特别地,我们提出的Glancing语言模型(GLM)与掩蔽LM(MLM)在两个方面不同。首先,Glancing LanguageModel(GLM)提出了一种自适应Glancing 采样策略,使得Glancing Transformer(GLAT)能够通过渐进训练而不是迭代推理(见图Id)以一次迭代的方式生成句子。一般来说,GlancingLanguageModel(GLM)在行为上与课程学习(Bengio et ai, 2009)非常相似,即首先学习生成一些片段,然后逐渐移动学习整个句子(从易到难)。为了实现自适应Glancing 采样,Glancing 语言模型(GLM)在训练中执行两次解码。解码与普通的神经网络转换(NAT)相同,并且预测精度指示当前参考是否“困难”拟合。在第二解码中,Glancing语言模型(GLM)根据第一解码通过Glancing采样来获得参考的单词,并且学习预测未采样的剩余单词。注意,只有第二次解码将更新模型参数。其次,Glancing Language Model(GLM)不是使用[MASK]token,而是直接在相应位置使用来自编码器的表示,这更自然,并且可以增强采样字和来自编码器的信号之间的相互作用。

实验结果表明,与普通的神经机器翻译(NAT)相比,Glancing Transformer(GLAT)在标准基准上获得了显著的改进(约5BLEU),而不会失去推理速度。GlancingTransformer(GLAT)与诸如掩蔽-预测(Ghazvininejad et ai.,2019)的迭代方法相比十分具有竞争力,甚至优于WMT14 DE-EN和WMT16 RO-EN上的掩蔽-预测模型。与强AT基线相比,GlancingTransformer(GLAT)仍能在0.9BLEU点内缩小性能差距,同时保持7.9x的加速。经验上,我们甚至发现当参考长度在WMT14DE-EN上小于20时,Glancing Transformer(GLAT)的性能优于AT。我们推测这是因为GlancingLanguageModel(GLM)可以捕获双向上下文来生成,而它的左向右对应只是单向的,这指示了并行生成方法的潜力,如GlancingTransformer(GLAT)。

1.机器翻译的概率模型
我们陈述并比较机器翻译的不同概率模型。机器翻译任务可以正式定义为序列生成问题:给定源语句X={a?i, X2, ■■, xn},根据条件概率P(Y\X-0′)生成目标语句Y={y±, y2, ■■■, yrr},其中0表示网络的参数集。不同的方法分解条件概率不同。

Transformer使用自回归分解来最大化以下可能性:
在这里插入图片描述
其中y<t={[BOS], jq, …, yt-i}-为了简单起见,我们省略了方程中的样本数。注意,AT的培训采用从左到右教师强迫目标token(Vaswani et ai.,2017)。相互依赖这个词是以单向的方式学习的。在推断期间,先前的预测token被馈送到解码器以生成下一个token。

普通的神经机器翻译(NAT)由与Transformer相同的编码器和具有多头注意力层的并行解码器组成(Gu等人,2018)。在训练期间,其对目标句子使用条件独立分解:
在这里插入图片描述
注意,神经机器翻译(NAT)的对数似然是对全对数似然对数P(K|X; 0)的近似。在推理期间,编码器表示被复制为解码器的输入,因此目标侧上的所有token可以并行生成。这种有条件的独立假设并非如此

在这里插入图片描述
这解释了神经机器翻译(NAT)的低性能。

图2:扫描Transformer(GLAT)扫描采样训练过程。H-是由编码器计算的表示。y’s-是并行解码器的初始预测token。y’s是实事求是的目标标记。H.再次馈送到解码器以计算训练损耗。

诸如Mask-Predict(Ghazvininejad et ai.,2019)的多遍迭代解码方法扩展了普通的神经网络翻译(NAT)。它仍然使用条件独立分解与随机掩蔽方案:
在这里插入图片描述
其中RM(T)是从Y中随机选择的一组单词,并且<!>(■)用[MASK]标记替换Y中的这些选定单词。例如,在图lc 中,RM(F)={y2,ys},$(Y,RM(F))={j/i,[MASK],[MASK],j/4,j/5}。训练目标是学习一个可以预测给定源语句X和先前迭代中生成的单词的掩蔽token的增强模型。

普通的神经机器翻译(NAT)打破了单词相互依赖性,而掩蔽LM(MLM)需要多次解码来重建单词相互依赖性。本文的目标是设计一个更好的概率模型和一个训练目标,使单遍并行生成中的单词相互依赖性学习成为可能。

1.Glancing Transformer
在本节中,我们详细介绍了Glancing Transformer(GLAT)。GlancingTransformer(GLAT)使用与普通的神经机器翻译(NAT)相同的编码器-解码器架构(Guet ai,2018)。Glancing Transformer(GLAT)与普通的神经机器翻译(NAT)的不同之处在于,它通过利用Glancing 语言模型(GLM)的训练来明确鼓励单词相互依赖性。它与掩蔽LM(MLM)的迭代神经网络变换(NAT)的不同之处在于,它训练产生单程并行译码,而掩蔽LM(MLM)用于预测细化。

1.Glancing语言模型

给定输入源语句X={xi,X2,任务是预测Y={yi^y‘2,■■■■■,yT’}-Glancing Transformer(GLAT)在训练期间建立Glancing 语言模型(GLM)。它最大限度地发挥以下作用:
在这里插入图片描述
其中,Y是初始预测token,GS(K,Y)是通过Glancing 采样策略选择的token的子集(图2,在下一节中详细描述)。Glancing 采样策略通过比较初始预测与真值token从目标句子中选择那些单词。如果网络的初始预测不准确,则它选择更多的token并将其馈送到解码器输入。GS(Y,F)是目标Y内未被选择的token的剩余子集。以上训练损失是根据这些剩余token计算的。

Glancing Transformer(GLAT)采用了类似于带有一些修改的Transformer的编码器-解码器结构(图 Id)。它的编码器/加密相同的多头关注层。其解码器包括多层多头注意力,其中每一层关注编码器表示和先前解码器表示层的完整序列。

在初始预测期间,使用均匀拷贝或软拷贝从编码器输出复制到解码器H={hi,I12,■■■hx}(Wei等,2019)。使用带有/dec(/enc(X;0),H;0)的argmax解码来预测初始tokenY。

为了计算损失glm>我们比较初始预测Y与地面真值来选择目标句子中的标记,即。GS(Y, Y)。然后,我们用相应的目标词嵌入H′=(Embyyt),H,替换h采样的索引,其中RP替换相应的索引。即,如果对目标中的token进行采样,则其字嵌入替换对应的h。这里,从解码器的最大嵌入矩阵获得字嵌入。然后将更新的H1再次馈送到解码器中,以计算输出token概率。具体地,用fdec(H’)计算剩余tokenp(^t|GS(Y,Y),X-0)的输出概率。

1.Glancing采样策略

GTM的一个重要组成部分是自适应地从目标语句中选择token的位置。这些选定的token提供了来自地面真值目标的“正确”信息,因此有助于训练解码器来预测剩余的非选择token。直观地,我们的自适应抽样策略引导模型学习片段的生成,然后逐渐转向整个句子。我们的Glancing 抽样策略在训练开始时选择许多单词,当模型尚未被很好地调整时。随着模型的逐步完善,抽样策略将减少对单词的抽样,使模型能够学习整个句子的并行生成。注意,抽样策略在GLAT的培训中是至关重要的。

如图2所示,Glancing 采样可以分为两个步骤:首先确定采样数S,然后从引用中随机选择S个字。当模型训练不好并且沿着训练过程减小时,采样数S将更大。注意,我们选择从引用中随机选择S字。随机参考词选择简单,在实验上产生良好的性能。

形式上,给定输入X、其预测语句Y及其参考Y,Glancing采样函数GS(Y,Y)的目标是获得从Y:
在这里插入图片描述
这里,随机(y,S)从y中随机选择S个token,并且通过比较来计算S,Y和Y’之间的差,S(Y,y)=A■d(y,y)。采用Hamming距离(Hamming, 1950)作为度量,计算d(Y, Y)=Y)-with

d(y, y)可以考虑当前训练模型的预测能力,自适应地确定采样数。对于Y和Y具有不同长度的情况,d(Y,Y)可以是其他距离,例如Levenshtein距离(Levenshtein,1966)。

也可以采用替代Glancing 采样策略。例如,一个简单的替代策略是将采样token的数量设置为与目标句子长度成比例,即,与目标句子长度成比例。s=a*t。我们将在实验中评估这些变化的影响。

1.推理

Glancing Transformer(GLAT)只修改训练程序。它的推论完全并行,只需一次运行。对于并行生成,需要在解码前确定输出长度。决定输出长度的简单方法是用编码器的表示预测长度。

在Glancing Transformer(GLAT)中,如在Ghazvininejad et ai(2019)中实施长度预测。将附加的[LENGTH]token添加到源输入,并且使用[LENGTH]token的编码器输出来预测长度。

我们还使用两种更复杂的方法来更好地确定输出长度:噪声并行解码(NPD)和连接器时间分类(CTC)。对于噪声并行解码(NPD)(Gu等,2018),我们首先预测m个目标长度候选者,然后针对每个目标长度候选者生成具有argmax解码的输出序列。然后,我们使用预先训练的Transformer对这些序列进行排序,并将最佳总体输出识别为最终输出。对于连接主义者时间分类(CTC)(Graves et ai,2006),继Libovicky和Helcl(2018)之后,我们首先将最大输出长度设置为源输入长度的两倍,并且之后移除空白和重复token。

1.实验
在本节中,我们首先介绍实验的设置,然后报告与几个强基线相比的主要结果。还包括烧蚀研究和进一步分析,以验证在掠掠Transformer(GLAT)中使用的不同部件的效果。
4.1 实验设置
在这里插入图片描述

表1:WMT14EN-DE/DE-EN和WMT16EN-RO/RO-EN基准测试结果mNPD表示带噪声的并行解码,CTC表示连接者时间分类。

我们在三个机器翻译基准上进行实验:WMT14EN-DE(4.5M翻译对)、WMT16EN-RO(610k翻译对)和IWSLT16DE-EN(150K翻译对)。使用BPE编码将这些数据集标记化并分割成子字单元(Sennrich等人,2016年)。在Vaswani et ai(2017)中,我们通过数据预处理对WMT14EN-DE进行了预处理。对于WMT16EN-RO和IWSLT16DE-EN,我们使用Lee等(2018)中提供的处理数据。

知识蒸馏(Knowledge Distillation)在以前的工作之后(Gu et ai,2018;Lee et ai,2018;Wang et ai,2019),我们还对所有数据集使用序列级知识蒸馏。我们利用Vaswani et ai(2017)的基座Transformer作为知识蒸馏的教师。然后,我们训练我们的扫描Transformer(GLAT)蒸馏数据。

我们比较了我们的方法与基础Transformer和强代表性的神经机器翻译(NAT)基线在表1。对于我们的所有任务,我们通过直接使用论文中报告的性能数据(如果有的话)来获得其他神经网络转换(NAT)模型的性能。

我们采用Guet ai(2018)中均匀复制源输入的普通的模型作为基本模型(NAT-base),并使用位置注意机制代替均匀复制。注意,输出长度不等于使用连接时间分类(CTC)的模型中的参考长度。因此,对于具有连接性时间分类(CTC)的Glancing Transformer(GLAT),我们采用最长公共子序列距离来比较Y和Y,并且Glancing 目标为最大化输出概率argmaxaes-i(y)P(a\X; 0)的目标对准。

对于WMT数据集,我们遵循Vaswani et ai(2017)中的基础Transformer的超参数。我们选择IWSLT16的较小设置,因为IWSLT16是一个较小的数据集。对于IWSLT16,我们使用5层进行编码器和解码器,并将模型大小dmodei设置为256。我们使用NvidiaVI00GPU分别针对WMT/IWSLT数据集训练了批量64k/8ktoken的模型。我们将辍学率设置为0.1,并使用Adam优化器(Kingma和Ba,2014)为(3=(0.9,0.999)。对于WMT数据集,学习速率在4k步内升温至5e—4, 并逐渐升温

在这里插入图片描述
在Vaswani et ai(2017)中,根据平方根倒数时间表衰减。对于IWSLT16DE-EN,我们采用线性退火(从3e-4到le-5),如Lee等(2018)。对于超参数X,WMT数据集采用0.5~0.3的线性退火,IWSLT16的固定值为0.5。通过平均通过验证BLEU分数选择的5个最佳检查点来创建最终模型。
ble data-draft-node=“block” data-draft-type=“table” data-size=“normal” data-row-style=“normal”>
业绩(BLEU)
NAT基Transformer
源输入长度

图4:WMT14DE-EN在不同源输入长度下的性能

图3:WMT14DE-EN上加速与BLEU之间的权衡

4.2 主要结果

有关基准的主要结果见表1。GlancingTransformer(GLAT)显著地提高了翻译质量,并且比强基线大裕量。我们的方法为解码器引入了显式字相互依赖性建模,并逐渐导致整个序列的同时生成,使得模型能够更好地捕获底层数据结构。与迭代译码模型相比,该方法完全保持了完全非自回归模型的推理效率优势,因为扫描Transformer(GLAT)是通过单程生成的。与基线相比,我们强调我们的经验优势:

·Glancing Transformer(GLAT)是非常有效的。与普通的NAT基模型相比,GlancingTransformer(GLAT)在EN-DE/DE-EN上获得了5BLEU左右。此外,GlancingTransformer(GLAT)也优于其他完全非自回归模型,具有很大的边际(平均接近+2 BLEU分数)。结果甚至与AT模型非常接近,显示出巨大的潜力。
·扫描Transformer(GLAT)简单,可以灵活地应用于其他神经机器翻译(NAT)模型,只需通过参考扫描修改训练过程,同时保持推理不变。为了比较,NAT-DCRF利用CRF依次生成NAT-IR和掩蔽-预测模型
需要多次解码迭代。

•连接主义时间分类(CTC)和噪声并行解码(NPD)使用不同的方法来确定最佳输出长度,它们各有优缺点。连接性时间分类(CTC)要求输出长度大于准确的目标长度。随着输出长度的增加,训练将消耗更多的时间和GPU内存。对于噪声并行译码(NPD),只要在一定长度上重新排列候选序列,推理速度将比使用连接时间分类(CTC)的模型慢。注意,噪声并行解码(NPD)可以使用预处理的AT模型或非自回归模型本身来重新排列多个输出。

我们还给出了图3中的散点图,显示了使用不同神经网络翻译(NAT)模型的加速和BLEU的趋势。结果表明,掠角Transformer(GLAT)的点位于竞争方法的右上方。显然,如果控制加速,闪电Transformer(GLAT)的性能将超过BLEU的竞争对手,如果控制BLEU,则闪电Transformer的速度将增加。这表明,GlancingTransformer(GLAT)的性能优于以前的最先进的神经网络翻译(NAT)方法。尽管像Mask-Predict这样的迭代模型获得了具有竞争力的BLEU分数,但它们仅保持比AT小的速度优势。相反,完全非自回归模型显著地提高了推理速度。

分析
为了分析源输入长度对模型性能的影响,我们在BPE后将源语句按长度分成不同的区间,计算每个区间的BLEU分数。结果直方图如图4所示。NAT-base的性能在长句中急剧下降,而渐进的学习过程使GlancingTransformer(GLAT)能够大幅提高性能,尤其是对于
在这里插入图片描述
表2:WMT14 EN-DE和WMT14 DE-EN的token重复率

长句。当源输入长度小于20时,扫描Transformer(GLAT)的性能优于自回归Transformer。

Glancing Transformer(GLAT)减少重复我们也测量重复token在WMT14EN-DE和WMT14DE-EN的测试集上的百分比。表2显示了由NAT基和GlancingTransformer(GLAT)生成的句子的token重复率。结果表明,Glancing Transformer(GLAT)能显著减少重复的发生,并且噪声并行译码(NPD)能进一步降低重复率。我们认为改进的一个重要原因是更好的相互依赖建模。由于GlancingTransformer(GLAT)显式地鼓励单词相互依赖性建模以更好地捕获目标token之间的依赖性,所以可以很大程度上避免错误生成模式,例如重复。

1.消融研究
为了验证自适应采样策略对采样数S(Y, L)的有效性,我们还引入了两种固定的比较方法。其中T是Y的长度,A是恒定的比率。第二种是相对灵活的,其设置As的开始比率和结束比率Ae,并且沿着训练过程线性地将采样数从AsT减小到AeT。

如表3和表4所示,显然,我们的自适应方法(表中的自适应)优于具有大边际的基线模型。结果证实了我们的直觉,即采样调度影响我们的神经网络翻译(NAT)模型的生成性能。采样策略首先提供相对容易的生成问题,然后变得更加困难,这有利于线性性能。此外,即使用最简单的恒定比,Glancing Transformer(GLAT)仍然取得了显著的效果。当A=0.2时,它甚至比基线A=0.0高出2.5BLEU分数。

这些实验可能证明,了解碎片的产生是有益的
在这里插入图片描述
表3:具有固定采样率的IWSLT16的参数。
在这里插入图片描述
表4:IWSLT16上采样率下降的数据。

开始并逐渐转移到整个序列。柔性递减比法优于常量递减比法,并且我们提出的自适应方法达到最佳效果。

为了分析参考词选择策略对Glancing 抽样的影响,我们进行了不同选择策略的实验。默认情况下,我们假设引用中的所有词都是同等重要的,并且随机选择引用词用于Glancing。除了随机策略外,我们还设计了考虑首次译码预测的其他四种选择方法。对于pref和1—pref,每个参考字的采样概率分别与参考字pref和概率1—pref的输出概率成正比。与Mask-Predict推理中掩蔽词的词选择策略类似,我们还增加了两个与预测置信度相关的策略:“最确定”和“最确定”。我们选择预测对于“最确定”具有更高置信度的位置,而对于“最确定”具有更高置信度的位置。不同选择方法的结果列于表5。

在比较中,选择策略1—prei的模型比预选策略1—prei的模型表现好,说明难以预测的单词对训练中的Glancing更为重要。我们发现随机策略比两种基于置信度的策略表现得更好。我们认为这说明Sam-
在这里插入图片描述
表5:使用不同参考词选择策略的WMT14EN-DE的性能。

WMT14

方法

EN-DE-EN

扫描Transformer(GLAT)w/均匀采样 19.16 23.56

GLATw/[MASK]输入 24.99 29.48

Glancing Transformer 25.21 29.84

表6:在WMT14 EN-DE和DE-EN上比较窥视Transformer(GLAT)和掩模预测的烧蚀研究。

学科使GlancingTransformer(GLAT)探索更多的相互依赖的目标词。我们采用随机策略,因为它简单,性能好。

为了研究扫描Transformer(GLAT)的采样策略和解码器输入对扫描Transformer(GLAT)的影响,我们分别用掩码预测中的相应部分替换扫描Transformer(GLAT)中的这两个模块。结果见表6。GlancingTransformer(GLAT)采用Glancing采样策略代替掩码-预测(Mask-Predict)中使用的统一采样策略,并用来自编码器的源表示代替[MASK]token输入。结果表明,Glancing 采样策略优于均匀采样策略5BLEU点,采用Glancing 采样后,以编码器为解码器的输入,仍可使强基线提高0.2~0.3个BLEU点。综上所述,自适应Glancing 采样方法对最终改进贡献最大,使用来自编码器的表示也有帮助。

我们还进行了以下实验:a)扫描采样的不同距离度量的比较,b)扫描Transformer(GLAT)与多个解码迭代。详情见附录。

1.相关工作
完全非自回归模型A工作线引入了各种形式的潜在变量,以减少模型处理输出词之间的依赖关系的负担(Gu et ai.,2018;Ma et ai.,2019;Bao et ai.,2019;Ran et ai.,2019)。另一个工作分支考虑将知识从自回归模型转移到非自回归模型(Wei等人,2019年;Li等人,2019年;Guo等人,2019b;Sun和Yang,2020年)。此外,还有一些工作应用不同的培训目标来培训非自回归模型(Libovicky和Helcl,2018;Shao等,2020;Ghazvininejad等,2020a),添加正则化术语(王等,2019;郭等,2019a)。

为了建立词间依赖关系的模型,Sun等人(2019)在神经网络翻译(NAT)中引入了一个CRF推理模块,并在推理中的非自回归计算之后进行附加的顺序解码。Deng和Rush(2020)提出了级联CRF解码。由于Glancing Transformer(GLAT)只执行单程非自回归生成,我们的方法与Sunet ai(2019)中提出的方法正交。我们还可以将我们的方法和结构化解码方法相结合。

具有迭代精炼的非自回归模型A系列工作致力于用多遍迭代解码精炼输出的半自回归模型(Lee等人,2018;Gu等人,2019;Ghazvininejad等人,2019,2020b;Kasai等人,2020)。Lee et ai(2018)提出了一种基于去噪自动编码器的迭代算法。Guet ai(2019)利用插入和删除来细化推理中的输出。Ghazvininejad et ai(2019)用掩蔽语言模型来训练模型,并且该模型用新的输出来迭代地替换掩蔽token。尽管具有较高的精度,但多次解码迭代大大降低了非自回归模型的推理效率。

结论
为了改善单通道并行生成模型的性能,本文提出了带Glancing语言模型的跳跃Transformer。利用Glancing语言模型,该模型从先导序列片段的生成,逐渐向整个序列移动。实验结果表明,该方法能显著提高单程并行生成非自回归机器翻译的性能。相对于自回归模型,Glancing Transformer(GLAT)具有竞争性能,将其应用到其他发电任务中,是今后工作的一个发展方向。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值