MENU

Human Language Processing——Speech Recognition

July 26, 2020 • Read: 3289 • Deep Learning阅读设置

语音识别问题的数学建模

从图中可以看到,语言信号可以表示为一个 d * T 的 matrix。其中,d 为向量的维度(不同的表示方法,维度不一样), T 为向量的个数。 同理,文本也可以表示为一个 V * N 的 matrix,N 表示组成 text 的 token(不同的表示方法,token 的含义不一样)的个数,V 表示 token 集合的大小(即 token 去重后的数量)。 语音信号的预处理通常采用重叠的稠密采样机制,通常 T >> N。语音识别问题的输入输出都是 matrix,输入 vector 及输出 token 的选取,不同的算法有不同的方式。整体来看,语音识别问题就是一个 Seq2Seq 的变换问题

输出 Token 有哪几种选择

简单的说,有以下五种选择:

Phoneme 发音的最小单位

将语音信号转化为 Phoneme 之后,还需要进一步将 Phoneme 信号转化为 Text。所以该方法并不是 end-to-end 的,需要后处理步骤。那么如何将 Phoneme 转化为 Text 呢?需要用到一个词表,我们通常称之为 Lexicon。形式如下

以英文为例:该表包含了所有单词的 Phoneme 表示,英文单词有多少个,该表就有多少行。可想而知,表的条目是很多的。通过查表,我们才能进一步将 Phoneme 转化为 text

对于英文和中文来说,这种 token 的选取方式都是适用的,英语有音标,汉语有汉语拼音。两者的 Phoneme 集合和 Lexicon 不一样

Grapheme 书写的最小单位

对于英文来说,Grapheme 指的就是 26 个英文字母;对于中文来说,Grapheme 指的就是约 4000 + 个常用汉字。由于在英文书写系统中,包括了标点符号和空格,所以,实际的英文 Grapheme 集合的数量为 26(英文字母,不区分大小写)+ 1(空格)+ 12(常用标点符号)。中文 Grapheme 集合的数量为 3755(一级汉字)+ 3008(二级汉字)+ 16(标点符号)

值得一提的是,这种选取方式是 Lexicon free 的,它不需要语音学家的帮忙来制定复杂专业的 Lexicon; 从流程上来看,做到了 end-to-end

Word 单词

对于中文和英文来说,都有词的概念。英文里面,'a' 为一个字符,'and' 为一个单词;中文里面,"中" 是一个汉字,"中国" 是一个词

英语单词个数在 17 万~100 万之间,一个普通美国大学生懂的单词大概有 3 万个,经常使用的词汇约 3000-5000 个左右。汉语约有词语 36 万个,常用词语约为 28770 个

Morepheme 单位大于 Grapheme,小于 word,是组成单词的最小有意义的单元

这种表示方式存在于英语、土耳其语中。但凡有词根、词缀的语言,都可以用这种表示方 式。中文是没有这种表示方式的,中文只有汉字和词语,并没有词根、词缀

显然,从通用性的角度来说,这种表示方式不是很好

Bytes 世界上所有的字符都有对应的 utf-8 编码,字符集其实就是 Byte 集

这种表示方式,一个显而易见的好处就是,它是 language independent 的!如果能够 work 的话,General Speech Recognition 就得以实现。另外,由于一个 Byte 只有 256 个取值,因此 Bytes 集合并不会像 word 集合那么大。看起来,确实非常有前景!

哪种输出 Token 的选取方式比较好呢?

好不好依赖于语言,依赖于实际问题,也依赖于算法,没法一言概括。但某些方式的弊端却是显而易见的:Phoneme 方式,需要 lexicon 的辅助,并不是 end-to-end 的;word 方式,token 集合的个数通常 > 100k,解码复杂;Byte 方式,想做到大一统,需要的训练语料必然异常庞大;Morpheme,只适用于某些有词根、词缀的语种,中文即不适用

那么,目前最新的研究中,一般是如何选取的呢?

通过对 19 年语音识别顶会 100 多篇论文的分析,得到了上图。可以看到,使用 grapheme 方式的人是最多的,占到了 41%;使用 phoneme 的也有不少,约为 32%, 而使用 word 和 morpheme 的人则分别只有 10% 和 17%

输入 Token 有哪几种表示方式

其实,语音信号可以表示为 2 维矩阵,也可以表示为 1 维向量,不过从实际应用来看,表示为 2 维矩阵的比较多

语音信号的一维表示方式如下: 以一段 1s, 16kHz 采样, 8bit 量化的语音信号为例,它可以表示为一个长度为 16000 的向量,向量中每个元素的取值为 [-128, 127]

语音信号的二维表示方式如下:一段语音信号由若干帧组成,每一帧对应 25ms 的语音信号,帧与帧之间的步长为 10ms. 假设一段语音信号时长为 1s, 则 T = 1s / 10ms = 100. 每一帧经过运算,得到一个 dimension 为 d 的 vector. 计算方法不同,则得到的单帧向量的含义、维度也不一样

常用的表示方式有如下三种:

  • Raw:不做任何处理,d=400
  • MFCC:计算其 MFCC 值,d=39
  • Filter bank output:计算其 Filter bank output 值,d=80

输入 vector 选取哪种方式比较好

通过对 19 年语音识别顶会 100 多篇论文的分析,得到下图

目前来看,MFCC 已成昨日黄花,filter bank output 大有一统江湖之势

语音数据集

我们需要多少有标注文字的声音数据,才能做出一个足够好的语音识别系统呢?由下图可知,MNIST 数据集可以等价于 49 分钟时长的语音。CIFAR-10 可以等价于 2 小时 40 分钟。现有评测数据集 ISLVRC 有 4096 个小时的语音数据。文献上,谷歌语音搜索,他们会用超过 1 万小时的语音数据去训练模型。而实际产业中的商用系统,使用的数据量大小会远远超过以上这些

Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code