机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式( 五 )


3. vq-wav2vec: Self-Supervised Learning of Discrete Speech Representations
机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式
本文插图

论文链接:https://openreview.net/forum?id=rylwJxrYDS
3.1 算法概述
同样的 , 根据这篇论文的题目 , 可以看出这篇论文的要点有两个——自监督学习(self-supervised learning)和语音表征(speech representation) 。 这里的自监督学习来自于在信号处理任务中 BERT 的引入(创新点之一) , 语音表征的创新点则在于提供了离散的表征 。 其算法具体流程如图 7 所示:
机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式
本文插图

图 7:vq-wav2vec(a)和整体语音识别任务 pipeline(b) 。
图 7(a)中 , 音频 X 先被映射成一个密集的表征 Z , 这个表征是连续的 , 于是作者对其进行量化(离散化)处理得到 \ hat(Z) , 最终经过聚合得到语境表征 C 。 如图 7(b)所示 , 经过这些流程得到的表征就变得很像 NLP 中常用的输入了 , 因此后面就开始进入常规的 NLP 流程——预训练 BERT , 通过 BERT 得到的表征被输入到声学模型(Acoustic Model, AM)中 , 最终得到识别结果 。 后续 NLP 相关的任务流程大家应该很熟悉 , 这里就不做详细介绍了 , 本文主要介绍如何生成离散化的语音表征 。
3.2 算法细节
3.2.1 wav2vec
wav2vec 的核心是自监督学习 , 跟 word2vec 极其类似 , 其损失函数是一样的 。 每个时间点输入的音频信号先经由一个编码器变成一个表征 z_i , 然后又通过一个聚合器对多个时间点的表征进行聚合 , 最终得到表征 c_i , 这里的编码器和聚合器都是卷积神经网络(CNN) 。 然后在给定这个语境表征 c_i 的前提下 , 本算法需要训练一个判别器来分辨未来的样本 z_{i+k}(这里指 k 个时间点后的样本)和根据一个分布 p_n 随机取样的假样本 \~{z} , 最终得到以下损失函数:
机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式
本文插图

这里的 \ sigma(*)表示 z_{i+k}和 \ hat{z}被判别为真的概率 , 是 sigmoid 函数 。 这里的 h_k()对 c_i 进行线性映射:
机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式
本文插图

最终对对所有时间点的损失 L 进行求和 , 并最小化这个损失 , 训练后由 c_i 生成的表征就会被传入语言模型中了 。
3.2.2 VQ-wav2vec
如图 7(a)所示 , VQ-wav2vec 与原始 wav2vec 的区别在于 wav2vec 并没有量化器 q , 而这里量化器的加入就是为了让信号变成离散的 , 也就是所谓的 vector quantized(VQ)表征 。 这里变离散的过程就很像一个 multi-label 的分类任务 , 只不过每一个 label 代表一个值 。 因此这里的量化器 q 有两个选择——Gumbel softmax 和 K-means 聚类 。 之所以选择这两个方案 , 是因为它们都是可微的 , 从而让模型可以训练 。
1.Gumbel softmax: 这跟传统的 multi-label 分类任务基本一致 , 对于生成的密集表征 z 进行线性映射和 ReLU 操作 , 最后再接一个线性层 , 从而输出 logits* l* 。 训练时 , 第 j 个值(label)被输出的可能性为:
机器之心|窥一斑而知全豹,三篇论文遍历ICLR 2020新型表征方式
本文插图

这里 v = -log(-log(u)) , 而 u 是从均匀分布中随机抽取的值 。 在推理阶段 , 直接取 l 中最大值对应的那个值就可以了 。
2.K-MEANS: 在这个方法里 , 每个 label 都对应 codebook 里的一个嵌入 e , 然后用这些点作为中心点进行 K-Means 计算 , 最终取跟这个特征 z 的 Euclidean 距离最短的 label:


推荐阅读