聊聊机器如何理解人类的语言

3,797 阅读7分钟

人类语言复杂性

自然语言对于人类发展进程是至关重要的,可以说如果没有自然语言就不会有人类的文明,它也是人类独有的能力。想象一下,如果没有自然语言我们该如何进行思想交流,该如何进行人与人之间的协作?。

人类的自然语言发展到如今已经是高度成熟了,同时这也是一个相当复杂的系统,从字到单词到短语再到句子和段落,加上各种不同的表达形式和语境,真真算得上是“皇冠上的明珠”。

如果要去形容自然语言有多复杂好像也很难说清楚,那我们就以数学组合的角度来看自然语言的复杂度,当然用该例子也并不完全正确,重点是体会下自然语言爆炸式的复杂度。经典的用小麦来填国际象棋棋盘格子的故事大家都听过,第一格放一粒,第二格放两粒,第三格放四粒,第四格放八粒,以此类推。每一个格子放的麦粒都是前面的两倍,一直放到64格。然而这些麦子总数量需要全世界生产两千年,这就是爆炸式的组合空间。可以想象一下,假如中文汉字一共有10000个,一句话长度为20字,那么这样的组合空间会是多大呢?10000的20次方,这数字已经大到在整个宇宙中都无法形容。

语言的表示

我们知道机器处理的是数字信号,那么在机器里面所有的信息都是数字化的,所以任何信息如果要被机器处理就需要先被编码成01二进制信号。比如“你好”这个单词使用UTF-8进行编码后的二进制为“111001001011110110100000 111001011010010110111101”,如果机器不对“你好”进行编码则无法处理,而对于人类则很难读懂这一串1和0是什么意思。

机器在对自然语言处理时一般不会直接使用UTF-8之类的编码,而是使用词向量。词向量一般有两种形式:one-hot形式和分布式形式。最简单的向量方式是one-hot形式,它的处理方式简单粗暴,一般就是统计词库包含的所有V个词,然后将这V个词固定好顺序,然后每个词就可以用一个V维的稀疏向量来表示,向量中只有在该词出现的位置的元素才为1,其它元素全为0。比如下面这几个词,第一个元素为1的表示中国,第六个元素为1的表示美国,第五个元素为1的表示日本。

中国 [1,0,0,0,0,0,0,0,0,……,0,0,0,0,0,0,0]
美国 [0,0,0,0,0,1,0,0,0,……,0,0,0,0,0,0,0]
日本 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]

从中可以看到one-hot形式的维数通常会很大,因为词数量一般在10W级别,可能会造成维数灾难。另外这种形式只通过顺序和01来表示单词,非常浪费空间。再一个是这种方式的任意两个词都是孤立的,没法看出两个词之间的关联性。

鉴于one-hot形式词向量的缺点,出现了另外一种词向量表示方式——分布式词向量(distributed word representation)。分布式词向量则干脆直接用普通的向量来表示词向量,向量元素的值为任意实数,向量的维数在事前确定,比如可以为50维或100维。这时的词向量类似如下(这里假设用5维来表示):

中国 [1.25, 0.2, 0.3, 0.5, 0.6]
美国 [0.1, 0.3, 0.5, 0.1, 1.5]
日本 [2.2, 0.2, 0.4, 0.6, 1.0]

其中每个元素的具体数值由训练算法来确定,这样一来就克服了可能的维度灾难,而且充分利用了空间,如果使用适当的训练方法训练出来的词向量还可以直接根据两个词之间的向量距离来计算相似性。

机器与人类交流

我们先看人与人之间的交流过程,人类的耳朵负责接收外界声音,然后交由大脑进行解码理解并采取对应行为,最后通过嘴巴回复。类似地,机器如果要与人类进行交流也必须经过三个步骤,首先是要能接收人类说话的信号并将其转成文本,然后使用自然语言处理技术理解该文本所表达的语义,最后是根据所理解的语义采取对应操作并回答人类。

从声音到文本

初中物理告诉我们声音是一种波,耳朵里面的器官在接收声波后负责将波动转换成电信号,然后传入大脑进行处理。机器通过传感器(比如麦克风)接收的声音也是波,不过这些波是由很多离散的点来描述。

成功接收声波后就开始对声波信号进行处理,一般会将其拆分成毫秒级别的帧,而若干个帧形成一个状态,每三个状态又形成一个音素,最终的单词则由若干个音素组合而成。可以看到单位大小顺序为帧->状态->音素->单词,根据帧找到对应的状态就可以得到对应的文本单词了,帧和状态的概率表则由大量语音样本统计而得到。以上便完成从语音到文本的转换。

机器理解语言

将语音转换成文本后开始最核心的部分——理解语义,也就是这段文本表示什么意思。几乎涉及到自然语言处理(NLP)的所有知识模块,其相关内容也非常多且复杂,后面会展开深入讲解。分析语义时一般需要将一句话拆分成更小的单元,同时也要识别句子中关键词和结构等等。举一个简单的例子,比如“附近有什么好吃的?”,该句子将被分词为“附近/有/什么/好吃/的”,那么“附近”、“什么”和“好吃”就是该句子的关键词,可以简单地通过它们去匹配意图。当然,理解语义并非如此简单,特别是开放性领域场景。一般还会涉及到NLP中的命名实体识别、意图识别、文本分类、句法分析、文本相似度、情感分析等等。

机器生成语音

对语言进行理解后我们将需要回答的语音先以文本的形式组成,最后才将文本转成语音,这个步骤称为语音合成。比如非常传统的合成方法就是拼接方法,即直接从语音数据库中获取语音片段来合成完整的语音。

作者简介:笔名seaboat,擅长人工智能、计算机科学、数学原理、基础算法。书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《人工智能原理科普》《图解Java并发原理》。

支持作者,购买作者的书!



专注于人工智能、读书与感想、聊聊数学、计算机科学、分布式、机器学习、深度学习、自然语言处理、算法与数据结构、Java深度、Tomcat内核等。