想象下如何写一个程序来回应唤醒词,我们只知道拿到的只有麦克风里采集到的原始语音信号,需知道样的规则才能把这些样本点转成一个字符串呢?或者简单点,判断这些信号中是否包含唤醒词。
就算你不清楚怎么编写程序,好让机器识别出唤醒词“Alexa”,你自己完全能够 识别出“Alexa”这个词。由此,我们可以收集一个巨大的数据集(data set),里面包含了大量语音信号,以及每个语音型号是否 对应我们需要的唤醒词。使用机器学习的解决方式,我们并非直接设计一个系统去准确地 辨别唤醒词,而是写一个灵活的程序,并带有大量的参数(parameters)。通过调整这些参数,我们能够改变程序的行为。我们将这样的程序称为模型(models)。
总体上看,我们的模型仅仅是一个机器,通过某种方式,将输入转换为输出。在上面的例子中,这个模型的输入(input) 是一段语音信号,它的输出则是一个回答{yes, no},告诉我们这段语音信号是否包含了唤醒词。
如果我们选择了正确的模型,必然有一组参数设定,每当它听见“Alexa”时,都能触发yes的回答;也会有另一组参数,针对“Apricot”触发yes。我们希望这个模型既可以辨别“Alexa”,也可以辨别“Apricot”,因为它们是类似的任务。不过,如果是本质上完全不同的输入和输出,比如输入图片,输出文本;或者输入英文,输出中文,这时我们则需要另一个的模型来完成这些转换。
这时候你大概能猜到了,如果我们随机地设定这些参数,模型可能无法辨别“Alexa”,“Apricot”,甚至任何英文单词。在而大多数的深度学习中,学习(learning) 就是指在训练过程(training period) 中更新模型的行为(通过调整参数)。
换言之,我们需要用数据训练机器学习模型,其过程通常如下:
初始化一个几乎什么也不能做的模型;
抓一些有标注的数据集(例如音频段落及其是否为唤醒词的标注);
修改模型使得它在抓取的数据集上能够更准确执行任务(例如使得它在判断这些抓取的音频段落是否为唤醒词上判断更准确);
重复以上步骤2和3,直到模型看起来不错。
当提供一个巨大的有标注的数据集 时,它能学习 如何辨别唤醒词。你可以认为这种方式是利用数据编程。