52、端到端语音识别技术:从序列到序列到多任务学习与解码

端到端语音识别技术:从序列到序列到多任务学习与解码

1. Seq-to-Seq模型概述

在语音识别中,基于注意力机制的方法被广泛应用,它能直接对输出序列的概率进行建模:
[P(Y|X) = \prod_{u=1}^{U} P(y_u|y_{1:u - 1}, X)]
这个概率可以通过基于注意力的目标函数来估计:
[
\begin{align }
h_t &= \text{Encoder}(X)\
a_{ut} &=
\begin{bmatrix}
\text{ContentAttention}(q_{u - 1}, h_t)\
\text{LocationAttention}({a_{u - 1}} {t = 1}^{T}, q {u - 1}, h_t)
\end{bmatrix}\
c_u &= \sum_{t = 1}^{T} a_{ut}h_t\
P(y_u|y_{1:u - 1}, X) &= \text{Decoder}(c_u, q_{u - 1}, y_{u - 1})
\end{align
}
]
编码器神经网络生成声学输入的隐藏表示 (h_t),解码器根据编码后的序列生成转录输出。注意力权重 (a_{ut}) 用于为解码器计算上下文向量 (c_u),解码器隐藏状态 (q_u) 为解码器的下一次预测提供累积上下文。这里主要考虑两种注意力类型:基于内容的注意力和位置感知注意力。

1.1 基于内容的注意力

基于内容的注意力学习一个权重向量 (g) 和两个线性层 (W) 和 (V)(无偏置参数),用于权衡前一个预测和编码器隐藏状态 (h_t),具体表示如下:
[
\begin{align }
e_{ut} &= g^{\top} \tanh(Wq_{u - 1} + Vh_t)\
a_{ut} &= \text{Softmax}({e_{ut}}_{t = 1}^{T})
\end{align
}
]

1.2 位置感知注意力

位置感知注意力是对支持卷积的扩展,它考虑了前一步的对齐情况,定义如下:
[
\begin{align }
{f_t} {t = 1}^{T} &= K * a {u - 1}\
e_{ut} &= g^{\top} \tanh(Wq_{u - 1} + Vh_t + Uf_t)\
a_{ut} &= \text{Softmax}({e_{ut}}_{t = 1}^{T})
\end{align
}
]
其中 ( * ) 表示在时间轴 (t) 上使用卷积矩阵 (K) 进行一维卷积操作,线性层 (U) 用于将输出特征 (f_t) 映射到特征空间。

训练基于注意力的网络的一个难点是同时优化以下几个方面:
- 编码器权重
- 用于计算正确对齐的注意力机制
- 解码器权重

网络的动态特性使得训练变得困难,尤其是在早期阶段,正则化是这些模型的关键组成部分。

2. 早期Seq-to-Seq自动语音识别(ASR)

注意力机制在早期的工作中得到了成功应用,如将计算机视觉的工作扩展到机器翻译任务,应用于RNN编码器 - 解码器。在语音识别中,seq-to-seq模型也得到了应用,注意力机制使解码器聚焦于编码器输出的一个范围,不仅有助于模型收敛,还提高了训练时间。

3. Listen, Attend, and Spell (LAS)网络

LAS网络使用金字塔双向长短期记忆网络(BiLSTM)对输入序列进行编码,解码器是基于注意力的循环神经网络(RNN),用于预测字符。然而,seq-to-seq模型存在一些缺点,如训练难度较大(比CTC更难),推理速度较慢。解码器在每个新时间步需要注意力机制权衡所有先前的隐藏状态后才能进行预测。为了解决这些问题,引入了一些技术,如窗口机制以减少解码时考虑的时间步数,以及标签平滑以防止预测过于自信。此外,seq-to-seq模型不能以完全在线流式的方式使用,必须在解码开始前对整个上下文进行编码。

4. Wav2Text架构

Wav2Text架构使用带有注意力的卷积神经网络 - 循环神经网络(CNN - RNN)模型,直接在原始波形上预测基于字符的转录。编码器是卷积架构与两个双向LSTM的组合,解码器是单个双向LSTM。卷积层主要用于降低输入的维度。由于注意力的额外复杂性和原始波形的使用,该网络通过迁移学习进行训练。首先,只有较低的编码器层从原始输入波形预测频谱特征(MFCC和对数梅尔频谱图)作为目标,然后使用这些特征通过基于注意力的编码器 - 解码器和CTC进行训练以生成转录。

5. 多任务学习

注意力机制和CTC各自存在一些缺点,这导致了多任务学习方法的出现。注意力机制在端到端场景中通常表现更好,但通常存在收敛困难的问题,并且在嘈杂环境中性能较差。而CTC由于条件独立性假设,通常产生的质量较低,但更稳定。通过多任务学习将CTC和注意力机制结合起来具有很高的价值,例如ESPnet通过联合优化基于注意力的编码器 - 解码器模型与CTC和注意力来实现这一点。

ESPnet的训练损失是一个多目标损失(MOL),定义为:
[L_{MOL} = \lambda \log P_{ctc}(C|X) + (1 - \lambda) \log P_{att}^ (C|X)]
其中 (\lambda) 是每个损失函数的权重,(0 \leq \lambda \leq 1),(P_{ctc}) 是CTC目标,(P_{att}^
) 是注意力目标。ESPnet架构使用4层双向LSTM编码器和1层LSTM解码器,为了减少输出的时间步数,编码器的前两层每隔一个状态读取一次,将输出 (h) 的长度减少为原来的四分之一。

以下是一个简单的流程图展示多任务学习的过程:

graph LR;
    A[输入语音数据] --> B[编码器];
    B --> C[注意力机制];
    B --> D[CTC];
    C --> E[解码器];
    D --> E;
    E --> F[输出转录结果];
    G[多目标损失函数] --> C;
    G --> D;
6. 端到端解码

CTC和基于注意力的模型是端到端的,能直接从声学特征生成转录。虽然它们在训练过程中能够学习内在的语言模型,但训练中看到的语言数据量相对较小。在大多数情况下,解码过程可以改善预测结果,在许多情况下可以显著降低单词错误率。理想的状态是在解码过程中结合额外的信息,如使用束搜索和语言模型来提高预测准确性。

6.1 语音识别的语言模型

语言模型可以为解码过程提供语言先验信息,这些模型可以在大量文本数据上进行训练,以将预测的转录准确地偏向特定领域。

6.1.1 N - gram语言模型

在Deep Speech 2论文中,作者尝试了n - gram语言模型。虽然架构中的RNN层学习了一个隐式语言模型,但在同音字和某些单词的拼写方面容易出错。因此,使用KenLM工具包在Common Crawl Repository上训练了一个n - gram语言模型,使用了2.5亿行文本中最常见的400,000个单词。

解码步骤使用束搜索来优化以下量:
[Q(Y) = \log(P_{CTC}(Y|X)) + \alpha \log(P_{LM}(Y)) + \beta \gamma(Y)]
其中 (\gamma(Y)) 是 (Y) 中的单词数量,权重 (\alpha) 影响语言模型的贡献,权重 (\beta) 使预测偏向于包含更多单词,这两个参数在开发集上进行调整。将语言模型融入束搜索解码中,显著提高了无语言模型基线的基本单词错误率(WER)。

6.1.2 RNN语言模型

RNN语言模型在语音识别中也多次出现,它利用下一个单词的可能性来预测给定前一个单词的最可能的单词序列。这些模型可以像n - gram语言模型一样在束解码过程中作为额外分数,或者对前n个假设进行重新评分。基于单词的模型存在未登录词(OOV)问题,但在非常大的数据集(125 kh)上训练时,它们成功击败了基于音素的CTC模型。为了解决这个限制,研究人员开始探索在遇到OOV术语时结合基于字符的预测。

6.2 CTC解码

解码一个使用CTC训练的深度学习网络,是指在推理时找到分类器最可能的输出,类似于隐马尔可夫模型(HMM)解码。数学上,解码过程由函数 (h(x)) 描述:
[h(x) = \arg\max_{l \in L^{\leq T}} P(l|x)]
在原始的连接主义时间分类(CTC)出版物中,提出了两种方法:最佳路径解码和前缀搜索解码。

  • 最佳路径解码(贪心解码) :在每个时间步输出最可能的输出,然后合并重复字符并移除空白标记以获得假设 (h)。
    [
    \begin{align }
    h(x) &= B(\pi^
    )\
    \pi^ &= \arg\max_{\pi \in N^t} p(\pi|x)
    \end{align
    }
    ]
    这种解码方案简单直接,但不太可能产生最佳序列,因为它没有考虑到获得相同对齐的多条路径。

  • 束搜索解码 :可以将束搜索融入解码过程以提高预测准确性,束搜索可以对导致相同结果的路径概率进行求和,从而为该结果提供更高的概率。以下是CTC束搜索的算法:

算法1: CTC束搜索
输入: B ← {∅}; P (∅, 0) ← 1
结果: max_{Y∈B} P^{1/|Y|} (Y, T)
begin
    for t = 1 ... T do
        ˆB ← B中W个最可能的序列
        B ← {}
        for y ∈ ˆB do
            if y ≠ ∅ then
                P+(Y, t) ← P+(Y, t - 1)P(Y e, t|x)
                if ˆy ∈ ˆB then
                    P+(Y, t) ← P+(Y, t)P(Y e, ˆY, t)
                P−(Y, t) ← P+(Y, t - 1)P(−, t|x)
                Add Y to B
            for k = 1...K do
                P−(Y + k, t) ← 0
                P+(Y + k, t) ← P(k, Y, t)
                Add (Y + k) to B

束搜索算法可以与n - gram语言模型结合使用,一种简单的方法是在每次到达单词结尾(空格)标记时对单词序列进行重新评分,但这依赖于模型准确预测完整单词且无拼写错误。更好的方法是使用前缀搜索解码,它在解码过程中结合子词级信息,利用语言模型的前缀。

前缀搜索解码将单词级语言模型转换为“标签级”或基于字符的模型,通过将输出序列表示为最长完整单词序列和剩余单词前缀的连接(分别表示为 (w) 和 (p)),计算下一个标签给定当前序列的概率的函数变为:
[P(k|y) = \frac{\sum_{w’ \in (p + k)^ } P_{\gamma}(w’|W)}{\sum_{w’ \in p^ } P_{\gamma}(w’|W)}]
其中 (P(w’|W)) 是从 (W) 到 (w’) 的单词历史转移概率,(p^*) 是以 (p) 为前缀的字典单词集合,(\gamma) 是语言模型权重。

在解码过程中,计算序列前缀的概率,并可以选择结束当前前缀或继续扩展它。在束搜索过程中,假设状态的概率在确定扩展概率时还依赖于前缀、字典条目或n - gram语言模型的概率。这种方法依赖于前向 - 后向算法,计算量随着状态数量和时间步数呈指数增长,可以通过修剪输出序列来提高解码效率,移除空白标记概率高于指定阈值的所有输出。

以下是CTC前缀束搜索的算法:

算法2: CTC前缀束搜索
输入: P_b(∅; x_{1:0}) ← 1, P_{nb}(∅; x_{1:0}) ← 0
A_prev ← {∅}
结果: A_prev中最可能的前缀
begin
    for t = 1 ... T do
        A_next ← {}
        for l ∈ A_prev do
            for c ∈ Σ do
                if c = blank then
                    P_b(l; x_{1:t}) ← P(blank; x_t)(P_b(l; x_{1:t - 1}) + P_{nb}(l; x_{1:t - 1}))
                    add l to A_next
                else
                    l+ ← concatenate l and c
                    if c = l_end then
                        P_{nb}(l+; x_{1:t}) ← P(c; x_t)P_b(l; x_{1:t - 1})
                        P_{nb}(l; x_{1:t}) ← P(c; x_t)P_b(l; x_{1:t - 1})
                    else if c = space then
                        P_{nb}(l+; x_{1:t}) ← P(W(l+)|W(l))αP(c; x_t)(P_b(l; x_{1:t - 1}) + P_{nb}(l; x_{1:t - 1}))
                    else
                        P_{nb}(l+; x_{1:t}) ← P(c; x_t)(P_b(l; x_{1:t - 1}) + P_{nb}(l; x_{1:t - 1}))
                    if l+ not in A_prev then
                        P_b(l+; x_{1:t}) ← P(blank; x_t)(P_b(l+; x_{1:t - 1}) + P_{nb}(l+; x_{1:t - 1}))
                        P_{nb}(l+; x_{1:t}) ← P(c; x_t)P_{nb}(l+; x_{1:t - 1})
                        add l+ to A_next
        A_prev ← k个最可能的前缀 in A_next

这种方法还需要进行长度归一化,以防止偏向于转换次数较少的序列。

6.3 注意力解码

注意力解码已经根据先前的预测生成了最可能的序列,因此可以使用贪心解码,在每个时间步输出最可能的字符,但这可能不会产生最可能的序列 (\hat{C}):
[\hat{C} = \arg\max_{C \in U^*} \log P(C|X)]
也可以在解码过程中对注意力模型应用束搜索,由于前一个时间步作为输入提供给下一个预测,因此在每个时间步可以保留前n个最可能的路径。束搜索从考虑句子开始符号 <s> 开始:
[\alpha(h, X) = \alpha(g, X) + \log P(c|g_{l - 1}, X)]
其中 (g) 是束中的部分假设,(c) 是附加到 (g) 的符号/字符,形成新的假设 (h)。

束搜索注意力解码的示例如下表所示(以束大小为2,三字符字母表 ({a, b, c}) 为例):
| 时间步 | 路径1 | 路径2 | 最佳路径 |
| ---- | ---- | ---- | ---- |
| 1 | a: 0.3, b: 0.5, c: 0.2 | - | b |
| 2 | ab: 0.2, ac: 0.1 | bb: 0.3, bc: 0.1 | bb |
| 3 | abb: 0.1, abc: 0.05 | bbb: 0.2, bbc: 0.05 | bbb |

可以看到,贪心解码可能会产生次优结果。

一些架构旨在在端到端ASR模型中使用额外的未配对数据,最近提出了“融合”这个术语,指的是将这些语言模型集成到主要声学模型中。

6.3.1 浅融合

浅融合(最初用于神经机器翻译)在解码过程中结合语言模型(LM)和自动语音识别(ASR)模型的分数,这种类型的语言模型解码在束搜索过程中结合外部语言模型,将单词或字符概率纳入考虑。浅融合可以与基于单词或字符的语言模型一起使用,以确定特定序列的概率:
[Y^* = \arg\max_{Y} \log P(Y|X) + \lambda P_{LM}(Y)]
基于字符的语言模型有助于在到达单词边界之前对假设进行重新评分,或者作为基于字符的语言(如日语和普通话)的重新评分机制。此外,基于字符的语言模型可以预测未见的字符序列,而基于单词的模型则无法做到这一点。浅融合已被融入RNN - T模型中,使CTC训练缓解帧独立性问题,同时将语言模型偏差纳入预测中。

6.3.2 组合语言模型训练

在将神经语言模型融入端到端ASR时,很明显可以将声学模型和语言模型一起进行优化,利用声学信息和大型文本语料库的语言信息。联合训练声学和语言模型最流行的两种技术是深度融合和冷融合。

  • 深度融合 :深度融合将语言模型融入声学模型(特别是编码器 - 解码器模型),创建一个组合网络。通过“融合”预训练的声学模型(AM)和语言模型(LM)的隐藏状态,并继续训练以学习“融合”参数。在训练过程中,LM和AM参数固定,降低了计算成本并加快了收敛速度。
    [
    \begin{align }
    g_t &= \sigma(v_g^T s_{LM}^t + b_g)\
    s_{DF}^t &= [c_t; s_t; g_t s_{LM}^t]\
    P(y_t|h, Y_{1:(t - 1)}) &= \text{softmax}(W_{DF} s_{DF}^t + b_{DF})
    \end{align
    }
    ]
    其中 (c_t) 是上下文向量,(h) 是编码器的输出,(v_g)、(b_g)、(b_{DF}) 和 (W_{DF}) 都是在继续训练阶段学习的。

  • 冷融合 :冷融合扩展了深度融合的思想,将语言模型融入训练过程。在冷融合中,声学模型从一开始就结合预训练的语言模型进行训练。
    [
    \begin{align }
    s_{LM}^t &= \text{DNN}(d_{LM}^t)\
    s_{ED}^t &= W_{ED}[d_t; c_t] + b_{ED}\
    g_t &= \sigma(W_g[s_{ED}^t; s_{LM}^t] + b_g)\
    s_{CF}^t &= [s_{ED}^t; g_t \circ s_{LM}^t]\
    r_{CF}^t &= \text{DNN}(s_{CF}^t)\
    P(y_t|h, Y_{1:(t - 1)}) &= \text{softmax}(W_{CF} r_{CF}^t + b_{CF})
    \end{align
    }
    ]
    由于冷融合从一开始就将语言模型融入训练过程,如果语言模型发生变化,则需要重新训练。原始论文引入了一种使用语言模型对数似然而不是语言模型隐藏状态来切换语言模型的方法,但这会增加学习参数的数量和计算量。

6.4 组合CTC - 注意力解码

使用组合CTC - 注意力架构进行解码的目标是生成最可能的字符序列 (\hat{C}),将两种输出结合起来并非易事,因为注意力机制产生输出标签序列,而CTC为每一帧产生一个标签。有两种方法可以结合CTC和注意力输出:重新评分和单遍解码。

综上所述,端到端语音识别技术在不断发展,从最初的Seq-to-Seq模型到多任务学习和各种解码技术的应用,这些方法相互补充,不断提高语音识别的准确性和效率。未来,随着技术的进一步发展,端到端语音识别有望在更多领域得到广泛应用。

端到端语音识别技术:从序列到序列到多任务学习与解码

6.4 组合CTC - 注意力解码(续)
  • 重新评分方法 :该方法先分别通过CTC和注意力机制得到各自的预测结果,然后对这些预测结果进行打分。打分时综合考虑CTC预测的准确性以及注意力机制生成的序列合理性。例如,对于一个预测的单词序列,CTC可以给出每个帧对应的标签概率,注意力机制可以给出整个序列的连贯性得分。将这些得分按照一定的权重进行组合,得到每个预测结果的综合得分,最后选择得分最高的结果作为最终的解码输出。
  • 单遍解码方法 :此方法在解码过程中同时考虑CTC和注意力的概率。在每一个解码步骤中,结合CTC提供的帧级标签信息和注意力机制提供的上下文信息,动态地选择最可能的字符或单词。例如,在预测下一个字符时,既参考CTC对当前帧的标签预测,又考虑注意力机制根据之前的预测结果和输入序列所给出的上下文偏好,从而直接生成最可能的序列,避免了后续的重新评分步骤。

以下是一个简单的流程图展示组合CTC - 注意力解码的过程:

graph LR;
    A[输入声学特征] --> B[CTC预测];
    A --> C[注意力预测];
    B --> D[重新评分/单遍解码];
    C --> D;
    D --> E[输出最终转录结果];
7. 不同技术的对比与总结

为了更清晰地了解端到端语音识别中各种技术的特点,下面对Seq-to-Seq、CTC、LAS、Wav2Text等技术以及不同的解码和语言模型方法进行对比总结。

技术/方法 优点 缺点 适用场景
Seq-to-Seq 能直接对输出序列概率建模,注意力机制有助于聚焦关键信息,提高训练效率 训练难度大,推理速度慢,不能完全在线流式使用 对识别准确性要求较高,对实时性要求相对较低的场景
CTC 训练相对简单,更稳定 由于条件独立性假设,产生的质量较低 对训练速度和稳定性要求较高,对识别精度要求不是极高的场景
LAS 结合金字塔BiLSTM编码和注意力RNN解码,能较好地处理序列信息 存在与Seq-to-Seq类似的训练和推理问题 适用于文本生成类的语音识别任务,如语音转文字
Wav2Text 可直接在原始波形上进行预测,卷积层降低输入维度 因使用原始波形和注意力机制,训练复杂,需迁移学习 对输入数据格式要求灵活,希望直接处理原始语音信号的场景
最佳路径解码(CTC) 简单直接 不太可能产生最佳序列 对解码速度要求高,对准确性要求相对较低的场景
前缀搜索解码(CTC) 结合子词级信息,提高解码准确性 计算量较大 对识别准确性要求较高的场景
贪心解码(注意力) 实现简单 可能产生次优结果 对解码速度要求极高,对准确性要求不是特别严格的场景
束搜索解码(注意力) 能保留多个可能路径,提高准确性 计算复杂度较高 对识别准确性要求较高,计算资源相对充足的场景
N - gram语言模型 训练相对简单,能有效改善WER 对同音字和特定单词拼写处理不佳 对语言模型复杂度要求不高,希望快速提升识别效果的场景
RNN语言模型 能利用上下文信息预测单词序列 存在OOV问题 对语言上下文理解要求较高,训练数据量较大的场景
浅融合 结合LM和ASR分数,可灵活使用不同类型语言模型 只是简单的分数组合,融合程度有限 希望在不改变模型结构的前提下引入语言模型信息的场景
深度融合 紧密结合LM和AM,降低计算成本,收敛快 需预训练模型,灵活性较差 有预训练模型可用,希望高效融合语言和声学信息的场景
冷融合 从训练开始就结合LM,充分利用语言信息 若LM变化需重新训练,计算量增加 对语言模型依赖较大,希望在训练过程中充分融合语言信息的场景
8. 端到端语音识别技术的发展趋势
  • 模型轻量化 :随着移动设备和物联网的发展,对端到端语音识别模型的轻量化需求越来越高。未来的研究将致力于减少模型的参数数量和计算复杂度,同时保持甚至提高识别性能。例如,通过模型压缩技术(如剪枝、量化)和设计更高效的网络架构(如轻量级卷积网络)来实现模型的轻量化。
  • 多模态融合 :除了声学信息外,结合视觉、文本等多模态信息可以进一步提高语音识别的准确性和鲁棒性。例如,在视频会议场景中,同时利用说话人的口型、表情等视觉信息以及语音信号进行识别,能够更好地处理嘈杂环境和口音问题。
  • 自适应学习 :语音识别的应用场景千变万化,不同的说话人、环境条件等都会影响识别效果。未来的模型需要具备自适应学习能力,能够根据不同的场景和用户进行实时调整和优化。例如,通过在线学习算法,让模型在使用过程中不断适应新的语音特征和环境变化。
  • 跨语言和方言支持 :随着全球化的发展,语音识别系统需要支持更多的语言和方言。研究人员将致力于开发能够处理多种语言和方言的通用模型,通过共享特征表示和多任务学习等方法,提高模型的跨语言和方言识别能力。
9. 实际应用案例分析
  • 智能语音助手 :如苹果的Siri、亚马逊的Alexa等,这些智能语音助手使用端到端语音识别技术将用户的语音指令转换为文本,然后进行语义理解和任务执行。在实际应用中,为了提高识别的准确性和响应速度,通常会结合多任务学习和语言模型解码技术。例如,利用ESPnet的多目标损失函数,同时优化CTC和注意力机制,提高识别的稳定性和准确性;在解码过程中使用n - gram或RNN语言模型,结合束搜索算法,根据用户所在地区和使用习惯,对预测结果进行调整,从而更好地理解用户的意图。
  • 语音转录服务 :在会议记录、音频内容整理等领域,语音转录服务需求巨大。端到端语音识别技术可以快速准确地将语音转换为文字。例如,一些专业的语音转录平台使用Wav2Text架构,直接处理原始语音波形,通过迁移学习和注意力机制,提高转录的效率和质量。同时,在解码过程中结合深度融合或冷融合技术,将语言模型与声学模型紧密结合,进一步提高转录的准确性。
10. 结论

端到端语音识别技术在近年来取得了显著的进展,从Seq-to-Seq模型的提出到多任务学习和各种解码技术的应用,不断推动着语音识别的准确性和效率提升。不同的技术和方法各有优缺点,适用于不同的应用场景。在实际应用中,需要根据具体的需求和资源情况选择合适的技术组合。未来,随着模型轻量化、多模态融合、自适应学习和跨语言支持等技术的发展,端到端语音识别技术有望在更多领域得到广泛应用,为人们的生活和工作带来更多的便利。

通过对端到端语音识别技术的深入研究和应用,我们可以预见,语音交互将变得更加自然、高效和智能,成为人们与计算机和各种设备进行沟通的重要方式。同时,随着技术的不断进步,语音识别的准确性和鲁棒性将不断提高,为语音驱动的应用程序和服务提供更加坚实的基础。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值