Deep Learning for Human Ianguage Processing 3
- 1. 语音转换应用场景
- 2. 语音转换类别
-
- 3. 语音分离
-
- 4. 深度聚类
-
- 4.1 Ideal Binary Mask
- 4.2 深度聚类
- 5. 组合不变训练
- 6. TaskNet
- 7. 更多...
- 小结
1. 语音转换应用场景
什么是Voice Conversion(VC):
- 保存了什么?- 内容
- 改变什么了? - 许多不同的方面…
说话人转换(Speaker)
可见此[Nachmani, et al., INTERSPEECH’19]和此[Deng, et al., ICASSP’20]:
- 同样的一句话,不同的人说出来的效果是不一样的
- 深度造假。愚弄人类/扬声器验证系统
- 实现个性化TTS(TextToSpeech)的一个简单方法
- 唱歌
- 隐私保护[Srivastava, et al., arXiv’19]
说话风格
- 情绪[Gao, et al., INTERSPEECH’19]
- 普通到伦巴德(Lombard,不由自主的放大你的声音)[Seshadri, et al., ICASSP’19]
- 悄悄话到正常[Patel, et al., SSW’19]
- 歌手声乐技巧转换[Luo, et al., ICASSP‘20] 例如:‘lip thrill’ (弹唇) or ‘vibrato’ (颤音)
增进可理解性(Intelligibility)
- 提高语音清晰度
- 被切除部分关节的手术患者[Biadsy, et al., INTERSPEECH’19][Chen et al., INTERSPEECH’19]
- 口(重)音转换
- 非母语者的语音质量和母语者的发音模式
- 可用于语言学习[Zhao, et al., INTERSPEECH’19]
数据增强
- 把数据集中男生的声音转成女生的声音,女生的声音转成男生的声音,这样训练数据就是原来的两倍[Keskin, et al., ICML workshop’19]
- 把干净的声音转成有杂讯的声音,直接把杂讯加在干净的语音上不太好;或者是去噪[Mimura, et al., ASRU 2017]
在实际执行中…
输出也是Acoustic Feature,不见得能够直接对应回原来的Voice
Vecoder怎么做呢:
- Rule-based: Griffin-Lim algorithm
- Deep Learning: WaveNet
Used in VC, TTS, Speech Separation, etc. (not today) ,Vecoder今天不细讲
2. 语音转换类别
2.1 成对的资料
Parallel Data:缺少训练数据:
- 预训练模型[Huang, et al., arXiv’19]
- 综合数据![Biadsy, et al., INTERSPEECH’19],用google把所有的文本都念一遍
2.2 不成对的资料
Unparallel Data:
- 这就是 “音频式传输(audio style transfer)”
- 借鉴图像风格转移的技术
2.2.1 特征分解
Feature Disentangle,主要思想就是内容用一个Encoder,说话人用一个Encoder:
然后可以把Speaker Encoder轻松的换成新垣结衣的声音:
如何训练,用的方法很像是Auto-Encoder:
问题:如何做到内容用一个编码器,说话人用一个编码器?所以需要加一些额外的东西
Speaker Encoder做法:
使用说话人信息
假设我们知道训练语句的说话者[Hsu, et al., APSIPA’16]:
每个说话人的One-hot矢量,局限:很难生成新的说话人
预训练编码器(Pre-training Encoders)
说话人嵌入(i-向量、d-向量、x-向量…)[Qian, et al., ICML’19] [Liu, et al., INTERSPEECH’18]
Content Encoder做法:
语音辨识系统
[Sun, et al., ICME’16][Liu, et al., INTERSPEECH’18],但不能是一个一般的语音辨识系统,那样输出会是文本,我们可以用深度学习在HMM中的应用,输出在一个x向量下state的几率
对抗性训练Adversarial Training
[Chou, et al., INTERSPEECH’18]
语音分类器和编码器是反复学习的
设计网络架构
IN = 实例归一化(instance normalization)去除说话人信息
对每一行进行标准正态化的处理:
AdaIN = 自适应实例归一化(adaptive instance normalization)(只影响说话人信息)
在IN之后加入说话人的分类器,希望只包含内容,所以精确度越低越好,可以发现IN是学到了一些东西的:
问题,训练是用同一个人的内容和说话人的信息,而测试是不同的说话人,这样最后的表现不好:
改进的方法可以是第二阶段训练[Chou, et al., INTERSPEECH’18][Liu, et al., INTERSPEECH’19],这里有一个GAN的概念
但以上训练结果不太好,所以加入Pacher,这样会让训练比较容易成功:
2.2.2 直接转换
Direct Transformation:
- 无并行数据的训练
- 使用CycleGAN[Kaneko, et al., ICASSP’19]
但 G X → Y G_{X→Y} GX→Y的结果并不是我们想要的,有可能是新垣结衣总是说的那一句话,所以需要一个 G Y → X G_{Y→X} GY→X:
有一个Tips,就是丢一个Y的声音, G X → Y G_{X→Y} GX→Y的结果应该就是Y的声音
以上网络还可以是双向的:
对于CycleGAN,如果有N个说话人,你需要N×(N-1)个generators:
StarGAN[Kaneko, et al., INTERSPEECH’19]
主要是generator和discriminator的改变,每个发言人用一个矢量表示
CycleGAN和StarGAN训练方式的对比如下:
比StarGAN更进阶的做法:Blow[Joan, et al., NeurIPS’19] ,原理可参考之前课程flow-based model
研究上主要专注于不是成对的数据
3. 语音分离
3.1 为什么需要语音分离
什么是Speech Separation?——在拥挤嘈杂的环境中,人类可以专注于单个扬声器产生的声音(鸡尾酒会效应)
- 语音增强(Speech Enhancement):语音-非语音分离(去噪)
- 说话人分离(Speaker Separation):多说话人说话
本课程:
- 专注于两名发言者
- 专注于单麦克风
- 演讲者独立(Speaker independent):培训和测试演讲者是完全不同的
- 输入和输出的长度相同,不需要Seq2seq
训练数据:很容易生成训练数据
3.2 评价语音分离
之前的语音转换没有客观评价,但是语音分离可以进行客观评价:
- 信噪比(Signal-to-noise ratio, SNR)
- 规模不变的信噪比(Scale invariant signal-to-distortion ratio, SI-SDR=SI-SNR)
- 语音质量的感性评价(Perceptual evaluation of speech quality, PESQ)旨在评价语音质量,分数范围为-0.5~4.5
- 短时客观智能性(Short-time objective intelligibility, STOI)被设计为计算智能性,分数范围从0到1
替换问题(Permutation Issue)
为了实现说话人独立训练,训练数据中包含许多不同的说话人
4. 深度聚类
Deep Clustering
屏蔽(Masking),掩码(Mask)可以是二进制或连续的
4.1 Ideal Binary Mask
IBM ——每个音频都由它的频谱图来表示
问题:并不知道原来的声音讯号是什么
但这还是没有解决之前的问题,但是这两个IBM是非常有关系的,因为知道一个就知道另外一个
4.2 深度聚类
[Hershey, et al., ICASSP’16]
K-means聚类不能训练,但是Embedding Generation可以训练:
- 不同说话人的格局是很远的
- 属于同一发言者的格子互相靠近
- 可以用两个扬声器进行训练,但要在三个说话人上进行测试(k-means期间K=3)![Hershey, et al., ICASSP’16]
深度聚类问题:但没有端到端
5. 组合不变训练
Permutation Invariant Training (PIT)
但我们需要换位思考来训练说话人分离模型…
6. TaskNet
Time-domain Audio Separation Network[Luo, et al., TASLP’19]
这是没有抽特征的模型,其训练需要PIT
真正的Seperator:
- 如果重复3次,模型考虑1.53s
- 深度可分离卷积,这是一个让CNN轻量化的技术
LSTM习惯听一个句子的开头,感觉有点脆弱,好像有点过拟合:
结果:
7. 更多…
发言人数不详
[Takahashi, et al., INTERSPEECH’19]
多个麦克风
[Luo, et al., ASRU’19]
视觉信息
[Ephrat, et al., SIGGRAPH’18]
面向任务的优化
谁会听语音增强或说话人分离的结果?
- 给人听,优化STOI、PESQ(无差异性) [Fu, et al., ICML’19]
- 给机器听,优化系统性能 [Shon, et al., INTERSPEECH’19]
学习更多…
- Denoise Wavnet [Rethage, et al., ICASSP’18]
- Chimera++ [Wang, et al., ICASSP’18]
- Phase Reconstruction Model [Wang, et al., ICASSP’19]
- Deep Complex U-Net: Complex masking [Choi, et al., ICLR’19]
- Deep CASA: Make CASA great again! [Liu, et al., TASLP’19]
- Wavesplit: state-of-the-art on benchmark corpus WSJ0-2mix [Zeghidour, et al., arXiv’20]
小结
- 首先介绍了语音转换的应用场景,语音转换一般是不成对的数据,对其可以是特征分解,对于说话人编码器和内容编码器有不同的模型;对其也可以是直接转换,重点是GAN的内容,这一块没有接触过,介绍了CycleGAN和StarGAN两种方法,但是没有客观指标可以来评判
- 语音分离的评价比较好懂,其替换问题确实是一个问题,就像我们人一样,同时听到两个声音其实也不会有特殊的排序,所以这就不好训练,为了解决这个问题,提出了一些方法
- IDM的语谱图具体的原理不太清楚,只知道是时域和频域同时考虑的一个图,深度聚类的Embedding Generation不同清楚是如何实现的,反正可以训练呗,以及三维的向量怎么k-means聚类也不知道具体的细节,反正能聚类就对了,但这实际上也没有解决之前的问题?而且不能端到端
- PIT模型很好懂,就是一个先有鸡还是先有蛋的问题,反正有了模型就可以训练,能训练就有模型,所以一开始就随机给初始化,这样不断调整标签的排列,结果是能表现比较好的
- TaskNet就是不要提特征,直接用时域的大串数据,Encoder和Decoder就是简单的Linear Model,在Separator用很多层卷积神经网络,重复三次,CNN表现比LSTM要好,具体的结果有个什么Wavesplit表现更好,但是老师通过一个具体的例子展示了一下Deep Clustering和TaskNet,感觉虽然TaskNet的评价指标好一些,但是Deep Clustering的人听起来表现好一些
- 更多其他的东西还是需要面向任务吧