04-Sentence Representation

句子是自然语言中的一个重要的语言单位。句子表示一直是自然语言处理的核心任务,因为在相关领域的许多重要应用在于理解句子,如摘要、机器翻译、情感分析和对话系统。句子表示的目的是将语义信息编码为实值表示向量,并将其用于进一步的句子分类或匹配任务。随着互联网上大规模的文本数据和深度神经网络的最新进展,研究人员倾向于使用神经网络(如卷积神经网络和递归神经网络)来学习低维句子表示,并在相关任务上取得很大的进展。

在本章中,我们首先介绍了句子的单热表示和n-gram句子表示(即概率语言模型)。然后,我们广泛地介绍了基于神经的模型来进行句子建模,包括前馈神经网络、卷积神经网络、递归神经网络、最新的变换模型和预先训练过的语言模型。最后,我们介绍了句子表示的几个典型应用。

4.1 Introduction

自然语言句子由单词或短语组成,遵循语法规则,传达完整的语义信息。与单词和短语相比,句子具有更复杂的结构,包括顺序结构和层次结构,这是理解句子的关键。在自然语言处理中,如何表示句子对于句子分类、情感分析、句子匹配等相关应用至关重要。

在深度学习开始之前,句子通常用单热向量或TF-IDF向量表示,遵循单词袋的假设。在这种情况下,一个句子被表示为一个词汇量大小的向量,其中每个元素表示一个特定的单词(术语频率或TF-IDF)对该句子的重要性。然而,这种方法面临着两个问题。首先,这种表示向量的维数通常高达数千个或数百万个。因此,它们通常面临稀疏性问题,并带来计算效率问题。其次,这样一个表示方法遵循词袋假设,忽略了顺序信息和结构信息,这对理解句子的语义意义至关重要。

受计算机视觉和语音中深度学习模型的最新进展的启发,研究人员提出用深度神经网络来建模句子,如卷积神经网络、递归神经网络等。与传统的基于词频的句子表示相比,深度神经网络可以通过卷积或循环操作来捕获句子的内部结构,如顺序信息和依赖信息。因此,基于神经网络的句子表示在句子建模和自然语言处理任务方面取得了巨大的成功。

4.2 One-Hot Sentence Representation

独热表示是单词表示任务中最简单和最直接的方法。该方法用一个固定长度的二进制向量来表示每个单词。具体来说,对于词汇表V = {w1,w2,…,w|V |},单词w的一个热表示是w = [0,…,0,1,0,…,0]。基于单词表示和词汇,可以扩展为表示句子= {w1,w2,…,wl}为

s = ∑ k = 1 l w i , \mathbf{s}=\sum_{k=1}^l\mathbf{w}_i, s=k=1lwi,

此外,研究人员通常会考虑到不同的单词的重要性,而不是平等地对待所有的单词。例如,诸如“a”、“an”和“the”等函数词通常出现在不同的句子中,并且很少保留什么含义。因此,使用逆文件频率(IDF)来衡量wi在V中的重要性如下: i d f w i = log ⁡ ∣ D ∣ d f w i , \mathrm{idf}_{w_i}=\log\frac{|D|}{\mathrm{df}_{w_i}}, idfwi=logdfwiD,

其中,|D|为语料库D中所有文档的数量,dfwi表示wi的文档频率(DF)。

4.3 Probabilistic Language Model

独热句表示通常忽略了句子中的结构信息。为了解决这个问题,研究人员提出了概率语言模型,该模型将n-gram而不是单词作为基本组成部分。n-gram表示长度为n的上下文窗口中单词的一个子序列,概率语言模型将句子s = [w1,w2,…,wl]的概率定义为

P ( s ) = ∏ i = 1 l P ( w i ∣ w 1 i − 1 ) . P(s)=\prod\limits_{i=1}^lP(w_i|w_1^{i-1}). P(s)=i=1lP(wiw1i1).

实际上,在等式中表示的模型(4.4)由于其巨大的参数空间,因此不可行。在实践中,我们简化了模型并设置了一个n大小的上下文窗口,假设单词wi的概率只依赖于[wi−n+1···wi−1]。更具体地说,一个n-gram语言模型基于它之前的n−1个单词来预测句子s中的单词wi。因此,一个句子的简化概率被形式化为:

P ( s ) = ∏ i = 1 l P ( w i ∣ w i − n + 1 i − 1 ) , P(s)=\prod\limits_{i=1}^lP(w_i|w_{i-n+1}^{i-1}), P(s)=i=1lP(wiwin+1i1),

其中,选择单词wi可以计算出n-gram模型频率计数的概率:

P ( w i ∣ w i − n + 1 i − 1 ) = P ( w i − n + 1 i ) P ( w i − n + 1 i − 1 ) . P(w_i|w_{i-n+1}^{i-1})=\frac{P(w_{i-n+1}^i)}{P(w_{i-n+1}^{i-1})}. P(wiwin+1i1)=P(win+1i1)P(win+1i).

通常,n-gram语言模型中的条件概率不是直接从频率计数中计算出来的,因为当它遇到任何以前没有明确见过的n-克语言模型时,它会遇到严重的问题。因此,研究人员提出了几种类型的平滑方法,它们将一些总概率质量分配给看不见的单词或n个克,如“加一”平滑、好图灵贴现或后退模型。

n-gram模型是预测n-gram序列中下一个单词的典型概率语言模型,它遵循马尔可夫假设,即目标单词的概率只依赖于之前的n−1个单词。目前大多数的句子建模方法都采用了这一思想。我们使用n-gram语言模型作为真实的底层语言模型的近似值。这个假设是至关重要的,因为它大大简化了从数据中学习语言模型参数的问题。近年来关于单词表示学习[3,40,43]的研究主要是基于n-gram语言模型。

4.4 Neural Language Model

为了解决这个问题,研究人员提出神经语言模型使用连续表示或嵌入的单词和神经网络预测,嵌入在连续空间帮助缓解维度的诅咒语言建模,和神经网络避免这个问题表示单词以分布式的方式,非线性的权重组合神经网络[2]。另一种描述是,一个神经网络近似于语言函数。神经网络结构可能是前馈的或循环的,前者更简单,后者更常见。

与概率语言模型类似,神经语言模型被构建和训练为概率分类器,以学习预测概率分布:

P ( s ) = ∏ i = 1 l P ( w i ∣ w 1 i − 1 ) , P(s)=\prod\limits_{i=1}^lP(w_i|\mathbf{w}_1^{i-1}), P(s)=i=1lP(wiw1i1),

其中,选择词wi的条件概率可以通过前馈神经网络等各种神经网络、递归神经网络等来计算。在下面的章节中,我们将详细介绍这些神经语言模型。

4.4.1 Feedforward Neural Network Language Model

神经网络语言模型的目标是估计条件概率P(wi|w1,…,wi−1)。然而,前馈神经网络(FNN)缺乏一种代表长期历史背景的有效方法。因此,它采用n-gram语言模型的想法近似条件概率,假设每个单词序列统计更依赖于这些单词接近它,和只有n−1上下文单词被用来计算条件概率,即 P ( w i ∣ w 1 i − 1 ) ≈ P ( w i ∣ w i − n + 1 i − 1 ) . P(w_{i}|\mathbf{w}_{1}^{i-1})\approx P(w_{i}|\mathbf{w}_{i-n+1}^{i-1}). P(wiw1i1)P(wiwin+1i1).FNN语言模型的总体架构由[3]提出。为了计算单词wi的条件概率,它首先将其n个与上下文相关的单词投射到它们的单词向量表示x=[wi−n+1,…,wi−1],然后将它们输入FNN,通常可以表示为

y = M f ( W x + b ) + d \mathbf{y}=\mathbf{M}f(\mathbf{W}\mathbf{x}+\mathbf{b})+\mathbf{d} y=Mf(Wx+b)+d

其中W是将词向量转换为隐藏表示的加权矩阵,M是隐藏层和输出层之间连接的加权矩阵,b,d是偏置向量。

然后,单词wi的条件概率可以计算为:

P ( w i ∣ w i − n i − 1 ) = exp ⁡ ( y w i ) ∑ j exp ⁡ ( y j ) . P(w_i|\mathbf{w}_{i-n}^{i-1})=\frac{\exp(\mathbf{y}_{w_i})}{\sum_j\exp(\mathbf{y}_j)}. P(wiwini1)=jexp(yj)exp(ywi).

####4.4.2 Convolutional Neural Network Language Model

卷积神经网络(CNN)是一个神经网络模型的家族,其中有一种层被称为卷积层。这一层可以通过一个可学习的过滤器(或内核)在输入的不同位置提取特征。Pham等人[47]提出了CNN语言模型来增强FNN语言模型。所提出的CNN网络是通过在单词输入表示x=[wi−n,…,wi−1]之后注入一个卷积层而产生的。在形式上,卷积层包含一个以每个字向量为中心的输入向量的滑动窗口,通常可以表示为

y = M ( max ⁡ ( W c x ) ) \mathbf{y}=\mathbf{M}(\max(\mathbf{W_cx})) y=M(max(Wcx))

其中,max(·)表示最大池化层。CNN的体系结构如图4.1所示。此外,[12]还引入了一种卷积神经网络用于具有新的门机制的语言建模。

image-20230906155230285

4.4.3 Recurrent Neural Network Language Model

为了解决FNN语言模型中缺乏建模长期依赖性的问题,[41]提出了一种应用RNN的递归神经网络(RNN)语言模型。rnn与fnn的本质不同在于,它们不仅作用于输入空间,还作用于内部状态空间,而内部状态空间能够表示顺序扩展的依赖关系。因此,RNN语言模型可以处理这些任意长度的句子。在每个时间步长中,它的输入是前一个单词的向量,而不是前n个单词的向量的连接,并且其他所有之前单词的信息可以通过它的内部状态来考虑。在形式上,RNN语言模型可以定义为

h i = f ( W 1 h i − 1 + W 2 w i + b ) , y = M h i − 1 + d , \begin{aligned}\mathbf{h}_i&=f(\mathbf{W}_1\mathbf{h}_{i-1}+\mathbf{W}_2\mathbf{w}_i+\mathbf{b}),\\\mathbf{y}&=\mathbf{M}\mathbf{h}_{i-1}+\mathbf{d},\end{aligned} hiy=f(W1hi1+W2wi+b),=Mhi1+d,

其中w1w2M是加权矩阵bd是偏置向量。在这里,RNN单元也可以通过LSTM或GRU来实现。RNN的体系结构如图4.2所示。

image-20230906155247011

4.4.4 Transformer Language Model

2018年,谷歌提出了一种名为BERT的预训练语言模型(PLM),该模型在各种NLP任务上取得了最先进的成果。当时,这是个大新闻。从那时起,所有的NLP研究人员都开始考虑plm如何使他们的研究任务受益。在本节中,我们将首先介绍transformer的体系结构,然后详细讨论BERT和其他plm。

4.4.4.1 Transformer

Transformer是一种具有一系列基于注意力的块的非循环编码-解码器架构。该编码器共6层,每层由一个多头注意子层和一个位置级前馈子层组成。并且在子层之间有一个残留的连接。该变压器的体系结构如图4.3所示。

Attention ( Q , K , V ) = Softmax ( Q K T d k ) V , \text{Attention}(\mathbf{Q},\mathbf{K},\mathbf{V})=\text{Softmax}\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V}, Attention(Q,K,V)=Softmax(dk QKT)V,

其中,dk为查询矩阵的维数。

多头注意子层将输入的隐藏状态H多次线性投影到h头的查询矩阵、键矩阵和值矩阵中。查询、键和值向量的维度分别为dk、dk和dv。

image-20230906155341402

多头注意子层可以表述为

Multihead ( H ) = [ h e a d 1 , h e a d 2 , … , h e a d h ] W O , \text{Multihead}(H)=[head_1,head_2,\ldots,head_h]\mathbf{W}^O, Multihead(H)=[head1,head2,,headh]WO,

image-20230906155357143

F F N ( x ) = W 2 max ⁡ ( 0 , W 1 x + b 1 ) + b 2 . \mathrm{FFN}(x)=\mathbf{W}_2\max(0,\mathbf{W}_1x+\mathbf{b}_1)+\mathbf{b}_2. FFN(x)=W2max(0,W1x+b1)+b2.

变压器在长期依赖性建模方面优于rnn,在注意操作过程中,所有的令牌都将被同等考虑。为了解决机器翻译的问题,提出了该变压器。由于变压器具有非常强大的建模顺序数据的能力,因此它成为NLP应用程序中最流行的骨干。

4.4.4.2 Transformer-Based PLM

神经模型可以从语言建模中学习到大量的语言知识。由于语言知识涵盖了许多下游NLP任务的需求,并提供了强大的单词和句子的表征,一些研究人员发现,知识可以很容易地转移到其他NLP任务中。这些被转移的模型被称为预训练的语言模型(PLMs)。

语言建模是最基本和最重要的NLP任务。它包含了各种语言理解的知识,如语言知识和事实知识。例如,该模型需要决定它是否应该在一个名词之前添加一篇文章。这需要对文章的语言学知识。另一个例子是,在“特朗普是总统”之后的以下词是什么。答案是“美国”,这需要事实知识。由于语言建模非常复杂,模型可以从这个任务中学到很多东西。

另一方面,语言建模只需要纯文本,而不需要任何人工注释。有了这个特性,模型可以从一个非常大规模的语料库中学习复杂的自然语言处理能力。由于深度学习需要大量的数据,而语言建模可以充分利用世界上所有的文本,这大大有利于NLP研究的发展。

受到变形器成功的启发,GPT [50]和BERT [14]开始采用变形器作为预先训练好的语言模型的主干。GPT和BERT是最具代表性的基于变压器的预训练语言模型(PLMs)。由于它们在各种NLP任务上取得了最先进的性能,因此几乎所有排在它们之后的plm都是基于变压器的。在本小节中,我们将更详细地讨论GPT和BERT。

GPT是第一个对基于变压器的PLM进行预训练的工作。GPT [50]的训练过程包括两个经典阶段:生成式预训练和鉴别性微调。

在训练前阶段,模型的输入是一个大规模的未标记语料库,表示为U = {u1,u2,…,un}。训练前阶段旨在优化一个语言模型。在语料库上的学习目标是在一个固定大小的窗口中最大化条件似然:

L 1 ( U ) = ∑ i log ⁡ P ( u i ∣ u i − k , … , u i − 1 ; Θ ) , \mathscr{L}_1(\mathscr{U})=\sum_i\log P(u_i|u_{i-k},\ldots,u_{i-1};\Theta), L1(U)=ilogP(uiuik,,ui1;Θ),

其中k表示窗口的大小,条件似然P由一个参数为Θ的神经网络建模。

对于一个有监督的数据集χ,输入是一个单词序列s =(w1,w2,…,wl),输出是一个标签y。预训练阶段提供了一个有利的参数起点,可用于初始化后续的监督任务。在这种情况下,目标是一个鉴别任务,最大化条件可能性分布:

L 2 ( χ ) = ∑ ( s , y ) log ⁡ P ( y ∣ w 1 , … , w l ) , \mathscr{L}_2(\chi)=\sum_{(s,y)}\log P(y|w_1,\ldots,w_l), L2(χ)=(s,y)logP(yw1,,wl),

其中P(y|w1,…,wl)由k层变压器建模。在输入的令牌经过预先训练好的GPT后,将产生最后一层hl K的隐藏向量。为了获得输出分布,我们添加了一个线性变换层,其大小与标签的数量相同:

P ( y ∣ w 1 , … , w m ) = Softmax ( W y h l K ) . P(y|w_1,\ldots,w_m)=\text{Softmax}(\mathbf{W}_y\mathbf{h}_l^K). P(yw1,,wm)=Softmax(WyhlK).

最后的训练目标与语言建模L1相结合,以更好地泛化:

L ( χ ) = L 2 ( χ ) + λ ∗ L 1 ( χ ) , \mathscr{L}(\chi)=\mathscr{L}_2(\chi)+\lambda*\mathscr{L}_1(\chi), L(χ)=L2(χ)+λL1(χ),

BERT [14]是PLM领域的一个里程碑式的工作。BERT在17种不同的NLP任务上取得了显著的实证结果,包括SQuAD(优于人类)、GLUE(7.7%绝对改进)、MultiNLI(4.6%绝对改进)等。与GPT相比,BERT采用双向深度变压器作为模型骨干。如图4.4所示,BERT包含了预训练和微调阶段。

在训练前阶段,设计了两个目标:蒙面语言模型(MLM)和下一个句子预测(NSP)。(1)对于MLM,标记是随机的用一个特殊的标记掩盖。训练的目标是根据上下文来预测掩蔽令牌。与只能在一个方向上训练的标准单向条件语言模型相比,MLM的目标是训练一个深度双向表示模型。这项任务的灵感来自于Cloze [64]。(2)NSP的目标是捕捉一些基于句子的下游任务中的句子之间的关系,如自然语言推理(NLI)和问题回答(QA)。在这个任务中,训练一个二元分类器来预测该句子是否是当前的下一个句子。该任务有效地捕捉了句子之间的深层关系,从不同的层次上探索语义信息。

image-20230805142751150

经过预训练后,BERT可以捕获各种语言知识。通过修改输入和输出,BERT可以对任何NLP任务进行微调,这些任务包含具有单个文本或文本对输入的应用程序。输入由句子A和句子B组成,分别表示(1)释义中的句子对,(2)隐含中的假设-前提对,(3)QA中的问题-段落对,(4)文本分类任务或序列标记中的text-∅。对于输出,BERT可以为每个令牌生成标记级表示,用于对标记任务或问题回答进行排序。此外,将BERT中的特殊标记[CLS]输入分类层进行序列分类。

预先训练好的语言模型在BERT后得到了快速的发展。我们总结了plm的几个重要方向,并在图4.5中给出了一些具有代表性的模型及其关系。下面是对BERT后的plm的简要介绍。首先,为了更好的一般语言表示,有一些BERT的变体,如RoBERTa [38]和XLNet [70]。这些模型主要集中于训练前任务的改进。其次,一些人使用预先训练好的生成模型,如MASS [57]和UniLM [15]。这些模型在生成任务上取得了有希望的结果,而不是BERT使用的自然语言理解(NLU)任务。第三,BERT的句子对格式激发了跨语言和跨模态领域的工作。XLM [8],ViLBERT [39]和VideoBERT [59]都是在这个方向上的重要作品。最后,由于一些低频知识不能有效地学习,有一些工作探索将外部知识纳入[46,81]中。

image-20230906155415721

4.4.5 Extensions
4.4.5.1 Importance Sampling

受对比散度模型的启发,[4]提出采用重要抽样来加速神经语言模型的训练。他们首先使神经网络语言模型的输出,并将神经网络语言模型视为基于能量的概率模型的一种特例,如下:

P ( w i ∣ w i − n i − 1 ) = exp ⁡ ( − y w i ) ∑ j exp ⁡ ( − y j ) . P(w_i|\mathbf{w}_{i-n}^{i-1})=\frac{\exp(-y_{w_i})}{\sum_j\exp(-y_j)}. P(wiwini1)=jexp(yj)exp(ywi).

重要性抽样的关键思想是通过对几个重要词进行抽样,而不是计算显式梯度,来逼近神经网络语言模型损失函数的对数似然梯度的平均值。在这里,神经网络语言模型的损失函数的对数似然梯度一般可以表示为

∂ P ( w i ∣ w i − n i − 1 ) ∂ θ = − ∂ y w i ∂ θ + ∑ j = 1 ∣ V ∣ P ( w j ∣ w i − n i − 1 ) ∂ y j ∂ θ = − ∂ y i ∂ θ + E w k ∼ P [ ∂ y k ∂ θ ] , \begin{aligned} \frac{\partial P(w_{i}|\mathbf{w}_{i-n}^{i-1})}{\partial\theta}& =-\frac{\partial y_{w_{i}}}{\partial\theta}+\sum_{j=1}^{|V|}P(w_{j}|\mathbf{w}_{i-n}^{i-1})\frac{\partial y_{j}}{\partial\theta} \\ &=-\frac{\partial y_{i}}{\partial\theta}+\mathbb{E}_{w_{k}\sim P}\left[\frac{\partial y_{k}}{\partial\theta}\right], \end{aligned} θP(wiwini1)=θywi+j=1VP(wjwini1)θyj=θyi+EwkP[θyk],

其中,θ表示神经网络语言模型的所有参数。这里,损失函数的对数似然梯度包括两部分,包括目标单词wi的正梯度和所有单词wj的负梯度,即Ewi∼P[∂yj∂θ]。在这里,第二部分可以通过按照概率分布P抽样重要的单词来近似:

E w k ∼ P [ ∂ y k ∂ θ ] ≈ ∑ w k ∈ V ′ 1 ∣ V ′ ∣ ∂ y k ∂ θ , \mathbb{E}_{w_k\sim P}\left[\frac{\partial y_k}{\partial\theta}\right]\approx\sum_{w_k\in V^{\prime}}\frac{1}{|V^{\prime}|}\frac{\partial y_k}{\partial\theta}, EwkP[θyk]wkVV1θyk,

4.4.5.2 Word Classification

除了重要的抽样外,研究者[7,22]还提出了基于类的语言模型,该模型采用单词分类来提高语言模型的性能和速度。在基于类的语言模型中,所有的单词都被分配给一个独特的类,和一个词的条件概率给定其上下文可以分解为单词的类的概率给定其之前的单词和单词的概率给定它的类和历史,这是正式定义为

P ( w i ∣ w i − n i − 1 ) = ∑ c ( w i ) ∈ C P ( w i ∣ c ( w i ) ) P ( c ( w i ) ∣ w i − n i − 1 ) , P(w_i|\mathbf{w}_{i-n}^{i-1})=\sum_{c(w_i)\in C}P(w_i|c(w_i))P(c(w_i)|\mathbf{w}_{i-n}^{i-1}), P(wiwini1)=c(wi)CP(wic(wi))P(c(wi)wini1),

其中,C表示所有类的集合,c(wi)表示单词wi的类。

4.4.5.3 Caching

缓存也是语言模型中的重要扩展之一。一种基于缓存的语言模型假设最近上下文中的每个单词更有可能再次出现[58]。因此,一个单词的条件概率可以通过来自历史记录和高速缓存的信息来计算:

P ( w i ∣ w i − n i − 1 ) = λ P s ( w i ∣ w i − n i − 1 ) + ( 1 − λ ) P c ( w i ∣ w i − n i − 1 ) , ( 4.28 ) P(w_i|\mathbf{w}_{i-n}^{i-1})=\lambda P_s(w_i|\mathbf{w}_{i-n}^{i-1})+(1-\lambda)P_c(w_i|\mathbf{w}_{i-n}^{i-1}),\quad(4.28) P(wiwini1)=λPs(wiwini1)+(1λ)Pc(wiwini1),(4.28)

其中, P s ( w i ∣ w i − n i − 1 ) P_s(w_i|\mathbf{w}_{i-n}^{i-1}) Ps(wiwini1)表示标准语言生成的条件概率, P c ( w i ∣ w i − n i − 1 ) P_c(w_i|\mathbf{w}_{i-n}^{i-1}) Pc(wiwini1)表示缓存生成的条件概率,λ为常数。

###4.6 Summary

{i-1})+(1-\lambda)P_c(w_i|\mathbf{w}_{i-n}^{i-1}),\quad(4.28)$

其中, P s ( w i ∣ w i − n i − 1 ) P_s(w_i|\mathbf{w}_{i-n}^{i-1}) Ps(wiwini1)表示标准语言生成的条件概率, P c ( w i ∣ w i − n i − 1 ) P_c(w_i|\mathbf{w}_{i-n}^{i-1}) Pc(wiwini1)表示缓存生成的条件概率,λ为常数。

###4.6 Summary

在本章中,我们将介绍句子表示法的学习。句子表示将句子的语义信息编码为实值表示向量,可用于进一步的句子分类或匹配任务。首先,我们介绍了句子和概率语言模型的单一热门表示。其次,我们广泛地介绍了几种神经语言模型,包括采用前馈神经网络、卷积神经网络、递归神经网络和语言模型的转换器。这些神经模型可以从语言建模中学习到丰富的语言和语义知识。受益于此,用大规模语料库训练的预制语言模型通过将学习到的语义知识从一般语料库转移到目标任务,在各种下游NLP任务上取得了最先进的性能。最后,我们介绍了句子表示的几种典型应用,包括文本分类和关系提取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值