1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
3.10 触发字检测 Trigger word dection
现在你已经学习了很多关于DL和序列模型的内容,于是我们可以真正去简便地描绘出一个触发字系统(a trigger word system),就像上节课中你看到的那样。随着语音识别的发展,越来越多的设备可以通过你的声音来唤醒,这有时被叫做触发字检测系统(trigger word detection systems)。我们来看一看如何建立一个触发字系统。
触发字系统的例子包括
- Amazon echo,它通过单词Alexa唤醒;
- 百度DuerOS设备,通过"小度你好"来唤醒;
- 苹果的Siri用Hey Siri来唤醒;
- Google Home使用Okay Google来唤醒
这些就是触发字检测系统。
假如你在卧室中,有一台Amazon echo,你可以在卧室中简单说一句: Alexa, 现在几点了?就能唤醒这个设备。它将会被单词"Alexa"唤醒,并回答你的询问。
如果你能建立一个触发字检测系统,也许你就能让你的电脑通过你的声音来执行某些事,我有个朋友也在做一种用触发字来打开的特殊的灯,这是个很有趣的项目。但我想教会你的,是如何构建一个触发字检测系统。
有关于触发字检测系统的文献,还处于发展阶段。对于触发字检测,最好的算法是什么,目前还没有一个广泛的定论。我这里就简单向你介绍一个你能够使用的算法好了。
如上图,现在有一个这样的RNN结构,我们要做的就是
- 把一个音频片段(an audio clip)计算出它的声谱图特征(spectrogram features)得到特征向量 x < 1 > x^{<1>} x<1>, x < 2 > x^{<2>} x<2> , x < 3 > x^{<3>} x<3>…,或者说音频特征 x < 1 > x^{<1>} x<1>, x < 2 > x^{<2>} x<2> , x < 3 > x^{<3>} x<3>
- 然后把它放到RNN中,
- 最后要做的就是定义我们的目标标签 y y y。
假如音频片段中的这一点(如上图)是某人刚刚说完一个触发字,比如"Alexa",或者"小度你好" 或者"Okay Google"。那么在这一点之前,你就可以在训练集中把目标标签都设为0,然后在这个点之后把目标标签设为1。
假如在一段时间之后,触发字又被说了一次,比如是在这个点(上图右下竖线)说的,那么就可以再次在这个点之后把目标标签设为1。
这样的标签方案对于RNN来说是可行的,并且确实运行得非常不错。不过该算法一个明显的缺点就是它构建了一个很不平衡的训练集(a very imbalanced training set),0的数量比1多太多了。
这里还有一个解决方法,虽然听起来有点简单粗暴,但确实能使其变得更容易训练。
比起只在一个时间步上去输出1,其实你可以在输出变回0之前,多次输出1,或说在固定的一段时间内输出多个1(如上面2图所示)。这样的话,就稍微提高了1与0的比例,这确实有些简单粗暴。
在音频片段中,触发字刚被说完之后,就把多个目标标签设为1,这里触发字又被说了一次。说完以后,又让RNN去输出1。在之后的编程练习中,你可以进行更多这样的操作,我想你应该会对自己学会了这么多东西而感到自豪。
我们仅仅用了一张图片来描述这种复杂的触发字检测系统。在这个基础上,希望你能够实现一个能有效地让你能够检测出触发字的算法,不过在编程练习中你可以看到更多的学习内容。
这就是触发字检测,希望你能对自己感到自豪。因为你已经学了这么多DL的内容,现在你可以只用几分钟时间,就能用一张图片来描述触发字能够实现它,并让它发挥作用。你甚至可能在你的家里用触发字系统做一些有趣的事情,比如打开或关闭电器,或者可以改造你的电脑,使得你或者其他人可以用触发字来操作它。
这是DL课程最后一个技术课程,所以总结一下我们对序列模型的学习。
- 我们学了RNN,包括GRU和LSTM,
- 在上一周我们学了词嵌入(word embeddings),以及它们如何学习词汇的表达(how they learn representations of words)。
- 在这周还学了注意力模型(the attention model)以及如何使用它来处理音频数据(audio data)。
希望你在编程练习中实现这些思想的时候,能够体会到诸多乐趣。