这是我4月份在BitTiger公开课听的王赟大牛《语音识别的前世今生》整理的笔记
,本来打算整理通畅再发的,结果实在没时间就一拖再拖。笔记有些草率,不过应该可以看明白,希望可以对大家有用,也祝王赟大神好。
Q&A
1. 历史上非特定人和特定人的语音识别是不是有很大的不同?
这个就是前面讲过的打补丁,各种说话人适应的那一页(如下图)
![](https://i-blog.csdnimg.cn/blog_migrate/b2a0c48608f9c957370ac0ae14cd74c8.jpeg)
这一页上的这三种方法就是历史上,其实也包括现在,来应对不同的说话人的口音的三种措施。
就是专门收集这个人的数据,或者在测试的时候来调整模型和特征让它俩互相适应,或者就是说在识别之后再加入到训练数据中,让它慢慢的跟说话人的声音去接近。
在神经网络上其实现在大家也在想这些事情。
2. 这些训练好像都是大数据上的训练,在实际写代码的时候怎样快速测试代码的正确性?
正确性和性能还是有点不一样的。正确性可以只拿少数的几条,比如说虽然现在你有1万小时的数据,可能只拿1分钟的数据来训练一下,然后看看这个模型能不能跑。有的时候如果你的程序有bug,它跑到第一次迭代的时候就挂了,这时候就给它一个小的数据量,就能快速的知道程序写的对不对。
但是有一些错误,比如你要是有个地方加号减号写反了,这种东西不会导致你的程序挂掉,但是结果就不对的这种,有的时候还真得大数据的时候才体现的出来。这样的话有时候你debug的时间也是很长的。有时候你要de一个bug,然后跑一下,然后一天就过去了。
3. 看PPT中2010年之后红线的错误率也没有降到10%以下,
![](https://i-blog.csdnimg.cn/blog_migrate/0b8832a4a0d077c822b2147b2ba76ea6.jpeg)
4. 语言模型得分通常还会有权重,还有插入惩罚,能详细讲一下插入惩罚的意义吗?
这是一个非常细节的问题了,我也有好几年没碰过这些东西了。插入惩罚应该是说你这一句话,它的单词的平均长度应该是一个合理的值,如果你这个声学模型也好语言模型也好训练的不好,它有可能造成你这个系统偏爱输出更长的单词或者偏爱输出更短的单词。比如它如果偏爱输出偏短的单词的话那么它就会输出很多单词,很容易造成词错误率超过100%,这是不想要的。所以如果我们发现它输出的单词特别特别多,我们就给它一定的惩罚,这就是所谓的插入惩罚。
5. 对国内讯飞语音识别的看法
我主要研究技术,对产品并没有追踪。
6. 有好办法解决多国语言的识别吗?
一般说不同语种的识别还是训练独立的系统,但是它们之间也有一部分东西是可以共享的。比如说在Tandem或者Hybrid结构里面会有一个神经网络来进行音素的分类,在不同的语言之中有一些音素还是很相似的,虽然每种语言都有自己的特色音素,那么这些相似的部分其实是可以共享的。哪怕不共享,不同语言的识别器的神经网络它的底下的几层也是可以共享的。上面几层是各自不同的。这个也叫作
multi
-
lingual training.
7.
HMM将单词转变成音素之后,状态少了,但是转移概率是由大量语料中的各个文字中的音素来计算的。
是的,但是不仅是要用文字,因为需要知道每个音素的持续时间,所以这个还是要用EM算法,就是不停的去更新对齐,然后统计每个音素它留在自己和转移到下一个的概率分别是多少。
8. 目前做语音识别比较好的学校和实验室有哪些?
我们实验室算一个,另外Johns Hopkins的那个组也比较厉害。我了解比较多的主要就是这两个了。
9. 除了WER,还有没有其他的评价方法?
有一些,但都是跟它很像的。比如说对于中文的识别,有的时候用的是字错误率而不是词错误率来评价,因为词错误率还涉及到分词,比如说我说了一个语音识别我标准答案里是一个词,你给我输出的是两个词,那这里就出现了200%的词错误率,但是字错误率是0.所以会有一些小的变种,但是基本上都是这种思路。
10. 语音可不可以推断出这个人说的是真话还是假话?通过几个断断续续的语音推断出语音发生的场景?
这两个问题都是属于元(?)数据的识别。
第一个是语音里面除了文字之外的信息,测谎本身就很难,语音并不是能够很精确的判断出真假,即便是人也很难做到。但这个可以把它归结到情感识别里。情感识别就是去辨别他是高兴还是悲伤还是愤怒。
第二个是场景识别。这个跟我现在在做的课题比较像。在这个场景里,语音其实是一个你不想要的内容,因为场景的话,不管你是在市场还是在家里,主要是周围环境的信息比较有用。所以你可能需要从这里边把语音去掉,然后再去做场景识别。
11. 请问基于语音里面的语速、停顿等做情绪判断,是不是比语音识别低很多?它跟语音识别的相似度如何?
从难度上讲,那怎么看这个难度呢?就是说你可以说情感识别比较容易,因为一般来说情感就那么几类,而语音识别本身词汇量就已经上万了,这一句话里面还有那么多的词。从这个角度上讲情感识别是比较容易的。
但是从另一个角度讲,语音识别答案比较固定,情感的模糊性更强,可能同一句话不同的人听起来情绪是不一样的。从这个角度来讲情感识别是更难的。
12. 是不是神经网络每一层的输出就是有意义的?
这是一个算是有点哲学的问题吧。像刚刚我说的识别花纹识别器官识别脸,这个可以认为是人可以这么来理解。但是神经网络里面的输出并不是还有这么明确的意思。它可以说有这样大概的这么一个层次,但并不是明确的说这个就是识别耳朵。这也是神经网络经常被人诟病的一点。就是它中间的内容人类没办法理解。
但是人脑也是这样啊。
13. 文本转换到语音的库有没有什么推荐的?
文本转换到语音其实说的就是语音合成这个事情,CMU这边有一个库叫做festival可以做这件事情。不过这个库也是比较老,最近几年我没有用过,不知道它与时俱进的情况如何。
如果大家只是想给它一段文字让它读出来,有一个很好的工具叫做google翻译。Google翻译文本块下面有一个小喇叭图标,你点一下,它可以把这段话读出来,而且第一次点会读的很快,第二次点会读的很慢。这个质量还是挺高的。
14. 跟人类比,机器识别需要的数据也太多了。为什么人类不需要那么多数据?这对神经网络技术有什么启发?
这个也是一个哲学上的问题。首先人类需要的数据少这个命题还有待确定。
其次,人类在有老师教的时候学习很快,也就是老师把逻辑明确的告诉大家时,大家可以很快的学会。但是机器不能,机器需要在大量的数据中自己去发现逻辑。
人类可以通过逻辑的方式来教授,但是为什么不能这么教机器呢?因为机器听不懂。那这个事情可以跟婴儿来对比。比如说一个婴儿去学习什么东西是能摸的,什么东西不能摸,摸起来会痛,爸爸妈妈很难教,因为婴儿听不懂,那它的学习方式就只能是去不停的试验,痛过几次之后就知道这个东西不能摸了。这就是一个从数据中不断摸索的过程。神经网络现在还处在这个阶段,就是说它的学习还和婴儿的学习比较类似。
还有一个原因是人类学习的所有的任务都是放在同一个大脑里面的,它就可以触类旁通。比如同样是学外语,语音识别就可以把它理解成听,你在学听的过程中你其实还在练习说。但是你一个做语音识别的神经网络它就专门做神经网络,不做语音合成。这也是人类学习效率比机器高的一个原因。
15. RNN是recurrent RNN还是recursive RNN?
这里讲的是recurrent.这两个词确实很像,有人说中文把
recurrent
翻译成时间递归,把
recursive
翻译成结构递归,我这里是时间递归这种。结构递归在NLP里边语法树的构建里面用的比较多。
16. Tandem, Hybird, RNN需要的数据量和训练时间是什么样的数量级?
Tandem, Hybird比较相似,它俩比RNN需要的少。
17. 递归神经网络又多了好多参数,是不是需要更大规模的数据来训练?
是的。
18.每批数据是一帧一帧输入的吗?还是要多少帧一批?
这个“批”我不知道是不是说的mini batch,mini batch
就是在训练的过程中,每次给它多少数据让它更新参数。这个一批就叫做一个mini batch,一个mini batch是几十条语音,每条语音是一个完整的语音,一般是几秒到十几秒的样子。
19. 神经网络的优化。
神经网络的优化方法一般分为一阶的和二阶的,二阶的一般是不用的,因为参数太多了,一般一个神经网络中的参数是在百万到千万这个级别的。二阶方法要算二阶导的矩阵,就是一个几千万乘以几千万的矩阵,这个是算不来的。所以一般都是用的一阶方法。
一阶方法里面除了梯度下降以外,还有一些比较常见的方法,比如说rmsprop等,这些方法现在看来没有哪种方法是一直比别的好,所以这些方法大家一般都会挨个试一遍。
20. CTC对中文的处理效果如何?
这个应该说对不同语言来说没有很大的区别,如果你是以单词为级别的话。如果是以字为级别的话,我觉得它对中文来说是更难一些,因为中文在字这个层面上的词汇量是大的多的,常用字有几千,而英语就只需要考虑几十个字母就可以了。
open source库的话,eesen里面是有CTC的。CTC在tensorflow里面应该是有实现的。
21. 端到端的话最后要不要对字符再分词?
这个是不需要的,因为空格也是一个字符。
22. 是不是HMM的只是可以不用去学习了?
如果你想快速的到达前沿的话,可以直接去学神经网络。
23. 怎么从文字反向转化为语音?
这是语音合成的问题。这里面其实也是会有一个声学模型,也就是说每个字符它怎样发音,这里边预处理的阶段就比较多。比如要把文本处理成音素串这里面就需要一个词典,变成一个音素串还不够,你还需要在哪里停顿,语调如何,这些就可以看成是NLP的任务。
24. 语音识别的训练量有多大?能有一个大概的估计吗?
一般要得到一个还能看的过去的系统的话一般是需要50到100小时的训练。当然后来这些比较飘逸的模型,比如graphem的话那就需要更大量的训练了。Google一般是用上千小时的数据来训练这些比较前沿的模型的,能够在switchboard上得到接近前沿的错误率的值。
25. 哪里有公开的训练集?
训练集的话比较常用的有
switchboard,但不是公开的。公开的话还没有专门找过。
26. 能不能推荐一些前沿的入门的书籍?
现在的发展太快,书籍从写作到出版这样一个周期下来,就是一两年过去,技术就已经过时了。所以现在基本上是大家通过某种方式比如说听我的讲座入门了之后,然后在这个框架下去找文献,直接读前沿的论文来把知识体系搭建起来,而不是通过教材了。
27. 噪音问题是不是有很多实时降噪的算法?
是的。效果有些还可以,只是产品里面它不一定用这个东西。
28. 用深度学习是不是需要PHD?
深度学习理论是要用到本科的一些课程,主要就是线性代数,微积分和概率,所以一般来说你至少要学过本科的这些课程,才能学深度学习。但也不需要到PHD的程度,因为它的理论就那么多,基本上你花个半年的时间就差不多了,包括工具包的使用什么的。当然你也可以深入研究做一个PHD.
29. 郭德纲语音导航是怎么实现的?
这个说的其实是语音合成。语音合成里边主流的方法是有两类,一类是拼接法,就是录一下真人的片段,要合成的时候从中找最像的片段来拼起来,这样拼起来就会质量高一些,更像真人一些。另一类就是纯粹参数的合成,就像语音识别一样,先训练一些模型,然后这个模型里生成语音。这样生成的语音往往比拼接法生成的语音质量差一些。
30. 语音识别会成为主流的交互方式吗?感觉只能用于特定的场景,因为人总是懒得说话。
我认为语音识别会成为一个重要的但不是主要的交互方式,它在y有些场景下是很有用的。