自然语言第二课(语言辨识)
如何做语音辨识呢
我们需要一个model或者一个Function,它的输入语音信号,它的输出就是文字。
对于一个语音辨识系统而言,它输入和输出的语音和表示被表示成什么呢?
输入的声音会被表示成为一串的向量,它的强度用T来表示,它的dimension(尺寸)用d表示。
输出的文字会被表示成为一串token(标志,象征),它的长度用N来表示,它有V种的token。
一般而言,T是大于N的 。
Token
Phoneme
在语音辨识当中,比较强壮的一种token叫Phoneme,可以想成英文的音标。通过语音辨识输出一段Phoneme,再通过手上拥有的Lexicon来将Phoneme来转换成一串看得懂的字词。类似于下图。
Phoneme还是会有很多缺点,比如说你要翻译它,必须需要一本Lexicon,同时要获取Phoneme需要一些语言知识的支撑,如果去向不同的语言学家询问,不同的语言文献调查,还是会得到不一样的Phoneme.
Grapheme
基于上面Phoneme的缺点,我们引入Grapheme.什么是Grapheme?就是书写的基本单位,什么是书写单位呢?就是英文的26个字母。如下图
例如one_punch_man,因为机器要识别一个单词,需要一个空格来确定单词结束,因此token的N=13,因为文本中不仅需要有空格,还要有逗号,句号等的标点符号,因此token的V种类就不单单只是英文的26个,因此V=26+。
如果是中文的话,我们就以一个方块字来作为一个书写单位。如下图。
“一拳超人”,有四个方块字,因此token的N=4,但V就可以是成千上万种,但一般对于普通人来说,基本4000是很多的了。
英文跟中文的区别就是,中文词跟词之间没有空格。
综上所述,我们需要的Lexicon就直接解放。我们就不需要什么语言学家的知识支持,我们只需要拿到文字,读取文字的书写单位就可以进行语音辨识。
但是很强的Grapheme还是会有缺点,有时候会拼错字,因为太复杂。
Word
词单元,对于很多语言来说,可能词数会非常多,像土耳其语,一个词甚至可以非常长,无法穷举。
Morpheme
表意的最小单元,英语的话就是把前缀后缀也拆出来,可以通过语言学和统计学的方法来获取。
Bytes
二进制单元,语言无关(都可以用UTF-8编码),直接从字节层面获取信息,token大小不超过256。
2019年的数据显示
同时还有很多有趣的结合比如说输入语音,直接输出word embedding。输入英文语音,直接输出中文文字。输入语音,进行intent classification(意图分类),输入想要的答案。输入语音,进行slot filling从而知道要得到的信息(比如说时间,地点)
Acoustic Feature(声学特征)
传统的语音识别方法,会将语音讯号抽帧(取一个窗口),一个25ms的frame有400个采样点(16KHz)。或者会用MFCC将它转为39维的向量,近年来非常流行的是用filter bank output方法转换为80维的向量。然后窗口右移10ms,再用同样的方法取向量。窗口之间是有重叠的。 一个窗口的讯号我们会用傅里叶变换映射到频域空间。频谱和声音之间的关联性是非常强的。接着我们会用一些根据人发声器官发声原理设计的filter bank来对频谱过滤,取log后再做DCT就可以得到MFCC向量。这些我们叫作声学特征。————https://www.cnblogs.com/yanqiang/p/13255650.html