0%

TTS

数学知识

向量内积

image-20230702011848180

专业术语

MLP

MLP 是多层感知器(Multilayer Perceptron)的缩写,它是一种基本的人工神经网络模型。多层感知器是由一系列的神经元层组成,其中每个神经元层与前一层和后一层的神经元相连接。它是一种前馈神经网络,意味着数据在网络中从输入层向前传递,经过中间隐藏层的计算,并最终产生输出结果。

batchnorm

二维输入

如何将一个向量的均值都变为0,方差变为1? 答:每一个元素减去向量均值,再除以它的方差

image-20230702115644197 image-20230702120117484

λ和β是为了使该列能够调整为任意指定的方差和均值的参数

三维输入:

image-20230702130757439

layernorm

二维输入:

image-20230702120623594

但是在RNN和Transformer中, 输入是3维的, 每个词是一个向量(1), 一个batch(2), 还有时间序列(3)

三维输入:

image-20230702131013567

TTS过程

  1. 文本预处理:

    • 输入:待转换的文本。 "Hello, how are you?"
    • 输出:经过清洗、分词和标注的文本数据。 "Hello | comma | how | are | you | question_mark"
  2. 语言模型生成:

-   输入:经过预处理的文本数据。 

-   输出:文本序列的概率分布,表示每个词语或音素的出现概率。

    `"Hello": 0.2 "comma": 0.1 "how": 0.3 "are": 0.15 "you": 0.2 "question_mark": 0.05`
  1. 声学模型生成声学特征:

    • 输入:文本序列的概率分布和其他相关信息(如音频采样率、说话人特征)。
    • 输出:声学特征,通常表示为梅尔频谱特征或其他表示形式。
  2. 声音生成:

    • 输入:声学特征和其他控制参数(如音高、音色、语速)。
    • 输出:合成的声音波形。
  3. 后处理:

    • 输入:合成的声音波形。
    • 输出:经过声音优化和增强处理后的最终声音结果。

Word2Vec

Word2Vec是一种广泛应用于自然语言处理任务的词嵌入模型,它通过将词语映射到一个高维向量空间中来表示词语的语义信息。Word2Vec模型有两种主要的架构:CBOW(Continuous Bag-of-Words)和Skip-gram。

CBOW模型的思想是给定上下文窗口内的词语,预测中间目标词语。具体而言,CBOW模型通过将上下文窗口内的词向量求和或平均来获得上下文的表示,然后通过一个浅层神经网络(通常是一个单隐藏层的前馈神经网络)来进行目标词语的预测。CBOW模型更注重上下文的全局信息,适用于训练数据较多、词汇量较大的情况。

与之相反,Skip-gram模型的思想是给定一个目标词语,预测上下文窗口内的词语。Skip-gram模型通过一个浅层神经网络来将目标词语映射到词向量,然后使用这些词向量来预测目标词语周围的上下文词语。Skip-gram模型更注重捕捉目标词语的局部信息,适用于训练数据较少、词汇量较小的情况。

无论是CBOW还是Skip-gram,Word2Vec模型的训练过程都是通过最大化预测准确性来优化词向量的表示。具体来说,Word2Vec使用了负采样(negative sampling)或层级softmax(hierarchical softmax)等技术来加速训练过程。一旦训练完成,我们可以使用Word2Vec模型得到每个词语的词向量表示,这些向量可以应用于各种NLP任务,如词语相似度计算、文本分类、情感分析等。

总结起来,CBOW和Skip-gram是Word2Vec模型的两种不同架构,分别侧重于全局上下文信息和局部上下文信息。它们是将词语映射到向量空间的有效方法,可以在各种自然语言处理任务中发挥作用。

Word2Vec中的负采样是什么

在Word2Vec中,负采样(negative sampling)是一种训练技术,用于加速模型的训练过程。它通过减少计算上的复杂性来提高训练效率。

负采样的核心思想是将词语的预测问题转化为一个二分类问题。具体而言,对于给定的一个中心词语,我们需要从语料库中随机选择一些与该中心词语无关的噪声词语作为负样本(negative samples)。然后,我们将中心词语作为正样本(positive sample),并与负样本一起输入到模型中进行训练,使得模型能够区分正样本和负样本。

负采样的选择数量是一个超参数,通常在5到20之间。选择的负样本词语应该是根据其频率进行采样,频率越高的词语被选中为负样本的概率越大。这是因为Word2Vec的目标是学习到更好的词语表示,而高频词语在训练中出现的次数更多,因此它们的影响也更大。

以下是一个负采样的示例:

假设我们有一个句子:”I love to eat ice cream.”,我们的目标是预测中心词语”eat”。在负采样中,我们需要选择一些噪声词语作为负样本。

首先,我们需要构建一个词汇表,并计算每个词语的频率。假设词汇表如下:

  • I: 5
  • love: 2
  • to: 3
  • eat: 4
  • ice: 1
  • cream: 1

接下来,我们需要根据词语的频率进行采样。假设我们选择3个负样本。

根据词频进行采样后,我们可能得到以下负样本:

  • ice
  • love
  • cream

然后,我们将中心词语”eat”作为正样本,与负样本一起输入到模型中进行训练,使得模型能够区分正样本和负样本。

通过负采样,我们可以减少训练中需要计算的目标函数的规模,从而提高训练效率。同时,选择合适的负样本也有助于提高词向量的质量和模型的性能。

Word2Vec缺点

无记忆性,若要强行使其具有记忆性,权重参数的数量将会与上下文的大小成比例的增加,造成模型过度庞大。

RNN

image-20230702150109057

  • 现在明确的称之为 “简单RNN” 或者 “Elman”, “RNN”一般指LSTM

  • 简单RNN中的BPTT会发生梯度消失或者梯度爆炸的问题,不擅长长期记忆

    梯度消失:y=tanh(x)的导数介于0~1之间。这意味着当反向传播的梯度经过tanh节点时,它的值会越来越小

    梯度爆炸:假定从上游传来梯度dh,此时MatMul节点的反向传播通过矩阵乘积 dh *(Wh)转置 计算梯度,该计算会使得梯度的大小随时间步长呈指数级增加或减少。原因是 因为矩阵Wh被反复乘了T次。矩阵Wh的奇异值(更准确的说是多个奇异值中的最大值)是否大于1,可以预测梯度大小的变化

Gated RNN:LSTM和GRU等

  • 简单RNN中的BPTT会发生梯度消失或者梯度爆炸的问题
  • 梯度裁剪对解决梯度爆炸有效,LSTM、GRU等Gated RNN对解决梯度消失有效,这些层使用门这一机制,能够更好地控制数据和梯度的流动
  • LSTM中有三个门:输入门,遗忘门和输出门

image-20230701182932912

image-20230701184216117 image-20230701185128983

seq2seq

通过组合两个RNN,可以轻松实现 sequence to sequence, seq2seq可以应用于机器翻译, 聊天机器人和邮件自动回复等

image-20230701232554189

Attention

如图 8-18 所示,编码器的输出 hs 被输入到各个时刻的 Attention 层。另外,这里将 LSTM 层的隐藏状态向量输入 Affine 层。根据上一章的解码器的改进,可以说这个扩展非常自然。如图 8-19 所示,我们将 Attention 信息 “添加” 到了上一章的解码器上。

image-20230702003656103

在图 8-19 中,上下文向量和隐藏状态向量这两个向量被输入 Affine 层。如前所述,这意味着将这两个向量拼接起来,将拼接后的向量输入 Affine 层。

image-20230702003812789

最后,我们将在图 8-18 的时序方向上扩展的多个 Attention 层整体实现为 Time Attention 层,如图 8-20 所示。

image-20230702003849325

使用了 Attention 的解码器的层结构如图 8-21 所示

image-20230702004006876

Self-Attention

Attention Function:

image-20230702013945715

先看以下什么意思

\large Softmax(XX^T)X

image-20230702014354229

* X: 这个新的行向量就是”早”字词向量经过注意力机制加权求和之后的表示。

image-20230702014443293

引入Q,K,V

在这里插入图片描述

QKV本质上本质上都是 X 的线性变换, 为了提升模型的拟合能力,

\large \sqrt{d_k}的意义

假设 Q, K 都服从均值为0,方差为1的标准高斯分布,那么A^T = Q^TK中元素的均值为0,方差为d。当d变得很大时,\large A中的元素的方差也会变得很大,如果\large A中的元素方差很大. 那么\large Softmax(A)的分布会趋于陡峭(分布方差大,分布集中在绝对值大的区域)。总结一下就是\large Softmax(A)的分布会和d有关。因此\large A中每个元素除以\large \sqrt{d_k}后,方差又变为了1。这使得\large Softmax(A)的分布的陡峭程度和d成功解耦,从而使得Transformer在训练过程中的梯度值保持稳定。

Multihead-Attention

image-20230702022049953

在这里插入图片描述

在得到多个Z向量后,最后一步就是将多个Z需要映射成我们之前的大小

在这里插入图片描述

在这里插入图片描述

  • 八个头相当于八个不同的表征子空间,类似于apple拥有水果的含义,同时也有商标的含义,不同的含义由不同的表征子空间学习。

  • X是一开始经过Embedding的词向量矩阵,R为之前层输出的,他俩都可以进行Multihead Self Attention

Transformer

为何layernorm比batchnorm更好?

image-20230702131946888

为什么Layer不需要全局 ? 因为样本固定,那么norm的形式就是固定的,不会因为分batch不同而反复横跳,每个样本的norm方式就是自己跟自己玩

img

image-20230702142706773

※ seq2seq,Attention,Transformer的区别和联系

Seq2seq(Sequence-to-Sequence),Attention,和Transformer是自然语言处理中相关的概念,它们之间存在联系和区别。

联系:

  1. Seq2seq是一种序列到序列模型,用于处理输入序列和输出序列之间的对应关系。它由编码器(Encoder)和解码器(Decoder)组成,通过将输入序列编码为固定长度的向量表示,然后将该向量解码为目标序列。Attention机制在Seq2seq模型中的应用,允许解码器在生成每个目标序列的位置时,对编码器的不同位置进行加权聚合,从而更好地捕捉输入序列中的重要信息。

  2. Attention机制是一种用于加权聚合信息的机制,可以用于提取输入序列中的重要部分。在Seq2seq模型中,Attention机制用于解决长序列处理的问题,使得解码器能够更有效地关注与当前生成位置相关的输入信息。

  3. Transformer是一种基于自注意力机制的神经网络模型,用于处理序列数据。Transformer模型的核心思想是通过多层的自注意力机制和前馈神经网络,直接对输入序列和输出序列进行建模,而无需使用传统的循环神经网络(RNN)或卷积神经网络(CNN)。Transformer模型引入了多头注意力机制,使得模型能够同时关注不同位置和不同层次的语义信息。

区别:

  1. Seq2seq是一种序列到序列模型,而Attention和Transformer是其中的组成部分或相关机制。Seq2seq模型可以使用不同的底层网络结构,如循环神经网络(RNN)或Transformer,而Attention和Transformer都可以用于增强Seq2seq模型的性能。

  2. Attention机制是一种加权聚合信息的机制,可以用于多种模型和任务中。在Seq2seq模型中,Attention机制解决了长序列处理和对重要信息的关注问题。

  3. Transformer是一种基于自注意力机制的模型,不仅仅适用于Seq2seq任务,还可以用于其他自然语言处理任务,如语言模型、文本分类等。Transformer通过引入多头注意力机制,允许模型并行地处理不同层次和不同类型的语义信息,提高了模型的表示能力和效果。

总结来说,Seq2seq是一种序列到序列模型,可以使用Attention机制来增强模型性能。Attention机制是一种加权聚合信息的机制,可以用于多种模型和任务中。Transformer是一种基于自注意力机制的模型,引入了多头注意力机制来提高模型的表示能力和效果。Transformer模型可以作为Seq2seq模型的一种

VALL-E

  • config/: 存放配置文件的文件夹。
    • LibriTTS/ : LibriTTS模型的配置文件夹。
      • ar.yml:AR模型的配置文件。
      • ar-quarter.yml:AR模型以1/4的模型参数进行训练的配置文件。
      • nar.yml:NAR模型的配置文件。
      • nar-quarter.yml:NAR模型以1/4的模型参数进行训练的配置文件。
    • test/: 测试模型的配置文件夹。
      • ar.yml:与ar模型相关的测试配置文件。
      • nar.yml:与nar模型相关的测试配置文件。
  • data/: 存放数据文件的文件夹。
    • test/: 测试数据的文件夹。
      • test.normalized.txt:归一化的测试文本数据文件。
      • test.phn.txt:测试数据的音素文本文件。
      • test.qnt.pt:测试数据的量化文件。
      • test.wav:测试数据的音频文件。
      • test2.phn.txt:另一个测试数据的音素文本文件。
      • test2.qnt.pt:另一个测试数据的量化文件。
  • scripts/: 存放脚本文件的文件夹。
    • plot.py:绘图脚本文件。
    • run.sh:运行脚本文件。
  • vall_e/: 项目或库的代码文件夹。
    • emb/: 存放嵌入模块相关的代码文件的文件夹。
      • __init__.py:嵌入模块的初始化文件。
      • g2p.py:字典到音素模块的代码文件。
      • qnt.py:量化模块的代码文件。
    • utils/: 存放工具函数相关的代码文件的文件夹。
      • .gitignore:Git版本控制忽略文件。
      • __init__.py:工具模块的初始化文件。
      • artifacts.py: 用于在机器学习或数据分析任务中保存图像和音频文件, 并进行数据可视化。
      • config.py:配置处理的代码文件。
      • diagnostic.py:诊断相关的代码文件。
      • distributed.py:分布式训练相关的代码文件。
      • engines.py:模型引擎的代码文件。
      • LICENSE:代码许可证文件。
      • README.md:项目的说明文件。
      • trainer.py:训练器的代码文件。
      • utils.py:通用的工具函数代码文件。
    • __init__.py:项目或库的初始化文件。
    • ar.pybase.pynar.py:与不同模型相关的代码文件。
    • __main__.py:当作为主程序运行时执行的初始化操作代码文件。
    • config.py:该文件包含了配置信息,用于定义模型的参数、数据加载方式、优化器等设置。
    • data.py:该文件包含了数据处理相关的代码,包括数据加载、预处理、切分和转换等操作。
    • export.py:该文件包含了模型导出相关的代码,用于将训练好的模型导出为可用于推理和部署的格式,如SavedModel或ONNX等。
    • sampler.py:该文件包含了采样器的代码,用于从数据集中获取样本进行训练。采样器可以定义不同的采样策略,如随机采样、均匀采样等。
    • train.py:该文件包含了训练模型的代码,包括模型的构建、损失函数的定义、优化器的选择和训练过程的实现。
    • version.py:该文件包含了项目的版本信息,如版本号、作者、发布日期等。
  • venv/: Python虚拟环境的文件夹。
  • .gitignore:Git版本控制忽略文件。
  • .gitmodules:Git子模块配置文件。
  • LICENSE:项目的许可证文件。
  • README.md:项目的说明文件。
  • setup.py:项目的安装脚本。
  • vall-e.png:项目的图像文件。