2021-3-6组会 图神经网络在 TTS 中的应用

1. GNN 概念

1.1. 图神经网络概念

  1. G = {V, E}, 有向, 无向, 加权, 非加权, 同构, 异构(不同结构/意义的边/点)
  2. 为什么要用? 数据有非欧几里的距离的信息含义
  3. 欧几里得距离: 比如识别猫图片的 CNN, 就是可以通过简单的距离就可以描述(不需要建边)
  4. 图神经网络: 学习一个包含邻居节点信息的状态特征(state embedding), 表征邻居的就是边, 有了边, 也就升级成为了图

1.2. GNN具体结构

  1. 引入迭代函数 F, (最终可以让图稳定状态, 也可以不稳定, 流动是关键), H 就代表了 general 的图的信息
  2. 图神经网络分为: 传播步, 输出步
  3. loss 可以训练点的值, 边的值, 并且边的值和点的值都和整幅图有信息沟通

2. GraphTTS-1

2.1. GraphTTS 的目标

  1. 建模韵律
  2. 与 NLP 引入复杂特征类似
  3. 图的结构和专家知识对文本的分析一致, GNN 更合适
  4. 直接替换原本 Encoder 结构

2.2. GraphTTS 结构

  1. 定义文本中的点和边: 英文字母是点, 虚拟点是词点和句子点.   顺序边, 逆序边, 父节点词边, 父节点句子边
  2. 与 # 标签的区别就是, 利用结构的便利, 显示的使用了词边界信息
  3. 代码角度是, Encoder 中的 RNN 变 GCN, 有传播步, 输出步

3. GraphTTS-2

3.1. GAE

  1. 保留 Tacotron 的 Encoder, 单独设计 GAE 模块建模语法与韵律的信息关系
  2. GAE 的输入是边界信息 + 文本, 输出作为 Attention 的 Memory(可以与 Encoded Output 拼接, 做一个信息残差)

4. 两个结构的实验结果

  1. 使用图, MOS 就会好
  2. GGNN 比 GCN效果更好
  3. 使用图, attention 会容易错, 所以 GAE 各方面都最好
  4. 但事实上, GAE 模型中, GAE 模块天然结构和 input 利于捕捉韵律信息, 同时和 Encoder 一起表示发音信息, 其实不是特征解耦的思路, 而是一个 post-net 残差的思路, 多了这个结构, 强化下就可

5. 疑惑

style sequence 和 style embedding 在哪里拼接到 Encoder 的特征上

6. GraphSpeech

6.1 核心工作

  1. Relation Encoder, 建模两个单词的语法关系, 表征他们的语法依存树 -> 语法依存图(单向边变成双向, 并且权重不同); 图中节点之间的最短路径代表两个单词的关系(因为距离是差距的直观度量); 单词之间的距离确定了(自己与自己建一条 self 边), char 级别就是所属单词之间的距离. 最终可以得到任意两个字之间的依存关系 (N * N - 1)  个序列, Rij, Rii -> Cij, Cii;  N * N - 1 个序列 N * N-1通过 同一个Bi-GRU, 计算出来 Cij
  2. Graph Encoder, 把 Transformer 改进为基于语法来做一个 Attention, Cij 改进 dot-score 或者 add-score; 相当于更精准的 Positional Encoding

7. Idea

7.1 GCN 在 TTS 中的简化

根据逸轩的思路, 逸轩想要用 GCN 直接使用词依存关系, phoneme + bert_out + 依存关系 -> linguistic feature (但是这种方式比GraphSpeech更难, 是训练不出来的)

只有词父节点信息的 GCN 就已经不好调了, 因此这种方法需要简化 GCN 的结构和权重

  1. 确定边的总类, 再确定同一类下共享边(相同边)是哪些, 由于文本的语法依存很规则, 很统一, 可以利用这个来简化图神经网络的 edge weights
  2. 词的词性也要体现在 node 上, 有一定 dim 的共享
  3. 这个可以叫 TTS-Simplify-GCN, 类比于 TTS 的 Attention 并不需要那么强大

8. 实现细节

8.1. GNN 库

  1. PyG
  2. DGL

8.2. 实验设计

今世进士尽是近视

哈哈

猜你喜欢

转载自blog.csdn.net/u013625492/article/details/114439807
TTS