1 用自编码器实现特征解耦
Auto-Encoder 还有一个有意思的应用:Feature Disentanglement,也就是特征解耦。

那为什么会有 Disentangle 这个议题呢,我们来想想 Auto-Encoder 它在做的事情是什么。

- 如果是图片的话,Auto-Encoder 就是把一张图片变成一个 Embedding,再把这个 Embedding 变回图片,既然这个 Embedding 可以变回图片,就说明这个 Embedding 里面包含了生成图片所需要的资讯,举例来说,图片里面有什么样的东西啊,图片的色泽纹理啊等等。
- Auto-Encoder 这个概念也不是只能用在图片上,如果用在语音上,你可以把一段声音丢到 Encoder 里面,变成向量再丢回 Decoder,输出原来的声音。那这个向量也应该包含了语音里面所有重要的资讯,包括这句话的内容是什么,还有这句话是谁说的等等。
举例来说,如果我们今天把一段声音讯号丢进 Encoder,它会给我们一个向量,但是这个向量里面究竟哪些维度代表了这句话的内容,哪些维度代表这句话的语者信息,我们是区分不出来的。

那我们有没有可能做到说 Encoder 输出一个 100 维的向量,我们就知道前 50 维就代表了这句话的内容,后 50 维就代表了这句话说话人的特征呢,那这种技术就叫做特征解耦。
这件事情事实上是有办法做的,这边举一个语音上的应用,这个应用叫做 Voice Conversion,也就是语者转换,其实就是柯南的领结变声器。

这个在二十年前,阿笠博士就已经做得很成功了。只是过去阿笠博士在做这个 Voice Conversion 的时候,需要成对的声音讯号,也就是假设你要把 A 的声音转成 B 的声音,你必须把 A 跟 B 都找来,让他们念一模一样的句子:

由于有这些成对的资料,所以就是一个 Supervised Learning 的问题,Train 一个 Supervised 的 Model,把 A 的声音丢进去,输出就变成 B 的声音,就结束了。
但是如果 A 跟 B 都需要念一模一样的句子,念个成千上万句作为训练资料,显然是不切实际的。而今天有了 Feature Disentangle 的技术以后,也许我们期待机器可以做到,给它 A 的声音,给它 B 的声音,A 跟 B 不需要念同样的句子,甚至不需要讲同样的语言,机器也有可能学会把 A 的声音转成 B 的声音。
那实际上是怎么做的呢,假设我们收集到一大堆人类的声音讯号,然后拿这堆声音讯号去 Train 一个 Auto-Encoder,同时我们又做了 Feature Disentangle 的技术,所以我们知道在 Encoder 的输出里面,哪些维度代表了语音的内容,哪些维度代表了语者的特征。
接下来我们就可以把两句话声音跟内容的部分互换,这样就实现了语者的转换。

举例来说