让电脑能听会说(中)_互动科普

使用社交账号登录

购买价格:
付款方式:

互动科普

主页 > 科普纵览 > 工程 • 技术

让电脑能听会说(中)

《科学世界》  发表于 2018年05月08日

机器是怎样学习的?

科学世界:一般人会觉得奇怪,电脑怎么能自己学习,或者接受训练?

:其实很简单。可以通过一个反馈系统来理解,有正向反馈和逆向反馈:你做对了,我给你奖赏,这是正向反馈;你做错了,我给你惩罚,这是逆向反馈。利用正向和逆向的反馈,就可以不断加强机器的识别能力。

对所有的训练数据,你都知道这些数据的真正内容是什么。如果这次机器识别错了,那么这个地方要多加一点力气(也就是调整模型中的相关参数)把它矫正过来;如果它对了,那很好;可是如果不是很对,就可能需要加强一点。经过不断训练,识别的准确率就会逐步提高。

我们需要把数据分成两个部分,一部分叫做训练数据,另一部分叫做验证数据(Validation Data)。用训练数据训练出来的模型去比对验证数据,来看训练的模型是不是足够准确,再决定是不是还需要继续训练。目前来讲,最有效的就是利用深层神经网络(Deep Neural Networks, DNN)的学习。

 

科学世界:什么是深层神经网络?

宋謌平:神经网络是一个一般化的统计模型。

其实神经网络很早就有过研究,但是因为在20世纪80年代后期和90年代初期,电脑的运算能力和存储能力都不够强,虽然发现神经网络有一些较强的学习能力,但还是不如比较传统的统计模型做得好,所以这方面的研究有些偃息旗鼓。近年来又开始受到关注。

深层神经网络具有一些特定的结构。所谓“深层”是指与传统的神经网络相比,具有更多的层次。神经网络的每一层里面都有输入和输出的节点,这些节点都可以互联连接,它们互相之间的联系,可以是强联系、弱联系,可以是正联系、负联系。这些加权的数值,都是经过整个数据库训练,通过算法算出的最优的值。

比如说最后输出的结果有的错误有的正确,那么就要看神经网络中的那些“神经元”之间的关系,是哪个部分让它犯错,哪个部分让它识别对了。然后我们就可以用正向、逆向反馈的机制去调整相关的权重。权重的调整过程,就是训练神经网络的过程。

 

科学世界:神经网络各层之间是什么关系?

:通常最底层是输入。当中一层一层的,都有输入和输出。从下到上基本是从微观慢慢到宏观的过程。先是识别出一些局部和细节的东西,然后再逐渐组合成某个完整的样子。比如识别猫的话,很可能起先是看到一根胡须或者面部的粗略线条,慢慢组合出耳朵、眼睛等等。一层层上来,识别出的有代表性的东西就越来越多。这种识别不是只见树不见林,而是既见树又见林。我们发现,利用深层神经网络得到的结果,与原来最好的系统相比,错误率至少可以减少30%

 

科学世界:神经网络如何处理输入的音频?

:语音是一个动态的过程,把我们说的话记录下来,看声音频率随时间的变化,实际上是一个很连续的轨迹,这个轨迹里面有一些最基本的东西,叫做音位或音素。就像我们身边的物质都是由原子、分子组成的,语音则是由音素组成的。音素经过不同的组合,就成了不同的音节、字和词等。做语音识别时,就要把语音资料分解成一个个很小的单位,即音素,然后再对这些音素之间的关系进行统计、分析。经过训练,机器最后不但要“听到”这些音素组成的音节等,还要能“听懂”。

例如这张图片,是两个人说话的音频,说的内容完全一样,黑白表示声音的强度,越黑表示强度越大。在同一个时刻,不同频率的声音强度是不同的。在对这个音频进行处理时,先要把它分解成很小的单元,也就是将频率(纵坐标)的变化在时间(横坐标)上切成很多小片。从图中可以看到,虽然两个人的声音大小和频率的变化都不太相同,可是又有一些共性,这些共性被一般化以后就可以被记录在神经网络等统计模型里。下次输入具有这些共性特征的新的音频时,系统做一个解码的过程,然后就可以识别出它说的就是这句话。就像两只不同的猫,虽然它们的毛色等可能不同,但它们的形态具有一些共性,我们的大脑经过多次识别训练后,就可以根据这些共性认出它们都是猫。

20150606让电脑能听会说-中.jpg

图:音频的时间变化

 


科学世界:在分解音频的时候,相当于每一个时刻都得到一个频率的谱。

:是的。要分解得非常细,10毫秒就要切一片,相当于1秒钟要分成100份。其中任何一个切片,都可以看到它在某个频率上有多少能量,有些频率上能量比较高,有些频率上则比较低。

同时,可以看它左右的相关的内容是否相似。也就是说在时间上,不仅要看其中的某一帧,同时要看各帧之间的变化量。在某些地方几乎没什么变化,但有的时候突然能量上升,变化量很大,这实际上可能就是说话中的一个爆破音。把这些不同的数据结构结合在一起,就可以更确定地判断它是哪个音了。

解码是一个动态的过程,叫做动态规划。要找到所有的可能性,需要利用这个做一个非常大的搜索。不过这个搜索是效率很高的,所有不可能的情况都不做,一边做搜索一边把没有可能的东西都扔掉。

 

科学世界:有一个概念叫“协同发音”,是什么意思?

平:协同发音,就是说发某一个音,它有上下文的问题。比如说英文单词“cat”(猫), mat”(垫子),“map”(地图),中间都是“a”。但这个“a”的发音,因为上下文不一样而产生了一些不同。通过对比能量分布,可以发现它的变化会不一样。这就是由于上下文关系的不同,而产生出协同发音上的变化。

我们的深层神经网络之所以比较有效,就是因为把协同发音的因素也纳入了模型。它完全是按照各种情况对号入座,而且越分越细。它不只是单纯去认一个“a”,很可能认“a”的时候,它要考虑前面是不是“c”、是不是“m”等等。

 

科学世界:电脑和婴幼儿学语言,差别在哪里?

:婴幼儿学习语言,就有正反馈、负反馈,有加强、矫正的过程。所以这个学习的过程,机器和婴儿很相近。但是婴儿学习语言主要是一个整体的学习,不会特意区分为识别、理解、合成等不同环节。除非是双语家庭,否则很少有翻译的过程,合成与识别也是同时训练的。而对机器来说,识别、翻译、合成,目前还是分开的过程。我们对于人类的学习机制,现在还只是有一些模糊的概念。所以只能一步步来,先分解开来。

 

科学世界:将来的方向是不是整体学习?

:将来的方向绝对是这样,在人与人之间说不同的语言,识别、翻译、合成的过程是交互的,是一个综合的过程。可是目前我们对这整个机制不是特别清楚,所以暂时只能把它们分开,一个个处理。

人在讲话的时候,其实是边说边听,不只是听别人说的,也听自己说的内容。所以耳聋的人在发音的时候很困难,因为他听不到自己说的话。这三个不同环节之间的串连叫做“言语链”(speech chain)。就是说,人在对话的时候,双方边说边听,可能还会随时调整自己的表达。这是人与人之间很正常的交流机制。

现在电脑还没有那么强的能力,不够清晰的讲话,语音识别的效果一般来讲都比较差。当然人也不见得会听得更清楚,可是人有能力根据情境和经验自己进行“修补”。将来的机器也可能有这种能力。

 

科学世界:机器学习的时候,也会自己归纳出语法吗?

:机器在识别的时候,不只认这个音,实际上是在认这个词语,它本身就含有语法。在机器里面储存有上百万个词汇。字跟字之间的组合很多,比如我说一个“中”,它的意思很多,如果是说“中国”、“中华”、“中间”等,它的意义就更明确。

机器的“猜”不是完全随机地猜,而是按照学习到的经验,看这个词出现的频率,或者看几个词共同出现的可能性。比如说在一个句子里面,“医生”跟“护士”、“医院”、“手术刀”、“药品”这些词常常一起出现,它们之间的关系就比较密切。“医生”和“水沟”就没那么大关系,当然也可能是说医生跳过水沟,但是这种情况出现的概率是不一样的。所以前面说到,要找有代表性的数据,就是说这些数据如果与你想做的应用有直接关系是最好的。如果没有关系,有时候就会对不上。

 

科学世界:我们可以先给机器输入语法规则吗?

:我们也可以输入。但是目前来讲,大部分情况下,人工输入的语法不见得好用。语言常常有很多例外,大家未必很遵守语法规则,特别是现在的许多网络用语,比如在美国,“4sale”是“for sale”(待售)的一种缩写方式。这在正规的英文里是绝对不允许的,可是实际生活中像这样的非正规表达很多,尤其在口语里更是常见。中文的同音字又特别多,所以很可能在说和写的时候会产生一些新的词汇,表达了跟原来的同音词完全不同的意义。这些如果没有适当的数据去学习,就可能会遗漏。


(本文发表于《科学世界》2015年第6期)



全部评论

你的评论