揭开计算机识别人类语言的神秘面纱——词向量

无论是机器翻译,还是智能人工客服,你是否好奇计算机是如何识别理解人类自然语言,并给出反馈的呢?

无论是人还是计算机,对于语言的识别理解,都应该是建立在一定的语料库和语料组织规则(语法)基础上的。对于听到或看到的一句话,势必会将其先按照已知的语料和语法进行快速匹配,才能够识别理解这句话的意思,并给出相应的反馈。当然,人类可以自然识别文字和语音,在大脑中对自然语言进行快速的多样化匹配理解,并作出相应的反馈。然而,对于计算机来说,就需要将这些字符数学化才能够被识别。

下面,我们就来看一句话是怎样被数学化,最终被计算机识别的,这中间经历了怎样的发展。

  • 初心:衡量句子之间的距离

我们说,对一句话的理解,要建立在已有的语料库和语法的认知上,将接收到的句子和已知的内容匹配上,才能够理解。那么我们怎么才能判断两个句子是不是匹配呢?当匹配到什么程度的时候,我们才可以认为它们具有同样的语义呢?这个问题可以被转化为衡量句子之间距离的问题。句子之间的距离越短,相似度越高,当距离为0时,便意味着两个句子具有同样的语义。

量化句子之间的距离极为复杂,我们最直观的想法之一便是从句子,或者字符串本身入手,既然字符串的组成单元是字符,那么就把它们在字符的层级上对齐一下试试看。

编辑距离(Edit Distance)应运而生,其中最典型的一种编辑距离叫作Levenshtein距离,可以简单理解为由一个字符串转成另一个所需要的最少编辑操作次数。允许的编辑操作包括替换成另一个字符、插入一个字符或者删除一个字符。比如,kitten和sitting之间的距离是3,意味着如果我们想把kitten变成sitting,那么至少需要三步:把k替换成s,把e替换成i,再在最后插入一个g。

粗看起来,这个用简单的动态规划就可以求解的办法十分简明有效,不仅可以校正一些可能的拼写错误(比如,我们拼写tomorrow时,因为数据库里面并没有这个单词,所以输入法会给我们自动纠错成常用的较近单词tomorrow),还能处理一些模糊搜索的问题(当两个字符串里面有八成的字符都一样的时候,计算机往往认为这两句话的意思也差不太多)。然而,毫无疑问,这种算法的缺陷也显而易见,比如,cat和dog没有任何一个字母相同,需要经过三次替换,距离是3,而cat和hat两个单词则只有首位字母不同,距离是1,可是,在语义上,猫和狗明显比猫和帽子要更近一些。

于是,人们也展开了一系列将语义融入编辑距离中的尝试。开始的尝试包括给插入、删除和替换三种操作赋予不同的权重,常见的是把替换的权重加大,从而让算法倾向于替换字母越少语义越近。后来的研究也包括为每个字母之间的替换赋予不同的权重,比如在美式全键盘输入法中,因为离得近的字母更容易被输入错误,所以纠正原则可以是为键盘上离得近的字母设定更近的距离,q和w是相邻的两个键,则将其距离设置为1,相离较远的键之间的距离设置为更大的值。结合数据库里的字频往往能够给出更漂亮的纠正结果。

在一系列根据数据库本身的语义关系展开的研究中,典型的代表是在2005年,哈工大的老师们发表的《基于改进编辑距离的中文关系抽取》一文,结合1996年发表的中国同义词研究数据,设计了改进版的编辑距离,如下图所示,将语义相近的实体联系起来,以更好地计算整句语义距离。直到今天,虽然编辑距离在自然语言处理领域已经退居二线,但在一些命名实体识别的任务中我们还是会见到它的身影。

也差不多从那时候开始,人们开始琢磨着,单词这个东西在人类看着意义明确,但计算机看起来没什么意义啊,那么计算机能看懂什么呢?数字!所以,Hinton在三十多年前就提出了词向量的概念,认为每个单词都可以由一个有限维的向量表示,而向量和向量之间的距离,就是单词语义上的距离。

  • 发展:词向量

Hinton提出的想法非常自然,就是不太好计算。特征嵌入(Feature Embedding)早在矩阵分解的时候就被讨论过很多回,但是对于单词来说,拆到字母级别就不好往下拆了。

不能往下,那就先往上,假定每个单词都不一样就好,反正在量化标准里面,从枚举到比较,到可加,到可乘,四个阶级数下来,发现单词看上去也没办法比较大小,那就先枚举看看。于是就先出现了one-hot这一编码方式,意思就是如果想要表示某个数据库里面所有的单词,就数一数这里面一共出现了多少个单词(比方说有2000个),根据这个定义一个字典,然后定义一个字典大小那么长的向量,里面每个维度对应字典里的每个词,除了这个词对应维度上的值是1,其他元素都是0。这听起来大到没办法描述,其实也还好,尽管牛津字典里面有17万个单词,不过日常生活中95%的时间里,3000个单词就足够用了。1960年还有人拿50个单词写了本书呢。

用稀疏编码的办法就更好办了,第几位是1,就把它的值赋为几就可以了。比如在下面的程序里,我们也可以认为中国的值为1,美国的值为2,国旗的值为3。这样只需要用一个够大的整数,我们就可以描述所有的词向量了。在编程实践中, 用哈希表给每个词分配一个ID也是不错的办法。

中国 =[1,0,0,0,0]

美国 =[0,1,0,0,0]

国旗 =[0,0,1,0,0]

我们说,one-hot encoding就可以被理解为一个聚类分析的标签,在这里面每个单词自成一类。但在今天看来,其弊端显而易见。第一是太长太稀疏,第二是丢掉了很多信息——并不是所有的单词都是无关的。玫瑰和爱情,爸爸和妈妈,公主和王子——虽然没办法比较两个单词大小,但是在语义本体论里,单词之间是有距离的。

当然,它的优势也十分明显,闭着眼睛就能搞定编码,把计算机看不懂的字符串变成计算机看得懂的向量,至于怎么去算,丢给计算机就好了。不妨借助于人类好理解的关键字分类法想象一下,如果我们想要分析某购物系统的商品评论,每条评论里会且仅会出现good和bad两个单词之一,有good的评论就是好的评价,有bad的就是坏的评价,那么随便一个贝叶斯分类器都可以轻松完成这个分类任务。如果商品是小刀,那么再不妨假设blunt 和 sharp是除good和bad之外的另一对特征词。 如果商品是鸡蛋,那么fresh和old也许会是另一对不错的特征词。把每个单词用one-hot先编码起来,再用一些其他的方法借助任务的定义,从这个向量里面找出重要的特征,这也是我们常用的方法之一。是不是很好理解?

在用神经网络求词向量之前,一种经典的做法是统计一个词语的共生矩阵。这个矩阵里面的第i行第j列表示,在所有语料中字典里面第i个词和第j个词同时出现的次数,显然,这个矩阵的行数和列数都有整个字典那么大 。对共生矩阵做分解,我们就可以得到词向量。分解的办法有很多,比如奇异值等方法,这里不做赘述。

以这种办法,我们能够得到一个不全为零的浮点数向量来更好地表示每个词,上下文类似的词,常在一起出现的词都会更像一些。但是矩阵该稀疏还是稀疏,该高维还是高维,只是把工作量移到了矩阵分解的那一步而已。

词向量是计算机识别自然语言的基础概念,其具体使用方法和场景还有很多,本文只是简要地介绍了词向量的由来和发展,借此揭开计算机识别自然语言的神秘面纱。想要了解更多人工智能或自然语言处理的知识,可以按下阅读原文,让近期颇受关注的《深度学习核心技术与实践》,为你打开通往AI世界的那扇窗。

原文发布于微信公众号 - 前沿技墅(Edge-Book)

原文发表时间:2018-03-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

解析滴滴算法大赛---GBDT进行数据预测

按照前面文章的方法进行数据预测,完全不使用POI,天气,交通情况的数据,可以达到0.43的成绩。 不过如果想要获得更好的成绩,简单的预测方法显然无法满足要求了。...

1.6K100
来自专栏星流全栈

【两分钟论文#19】递归神经网络创作音乐和模仿莎士比亚写小说

17540
来自专栏ATYUN订阅号

IBM与哈佛合作开发工具解决AI翻译中的黑箱问题

近年来,由于深度学习和神经网络的进步,机器翻译得到了极大的进步。然而,神经网络的问题在于人们不知道它们内部发生了什么,这意味着很难解决它们的错误。

8510
来自专栏数据小魔方

R语言构建层次分析模型不看一下吗~

AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家Saaty教授于二十世纪80年代提出的一种实用的多方案或多目标的决策方法...

19420
来自专栏机器之心

机器之心「GMIS 2017」嘉宾揭秘:LSTM之父Jürgen Schmidhuber

2017 全球机器智能峰会(GMIS 2017),让我们近距离接触「LSTM 之父」Jürgen Schmidhuber。 2017 全球机器智能峰会(GMIS...

32680
来自专栏大数据挖掘DT机器学习

一份SPSS回归分析与数据预处理的心得体会

关于SPSS数据预处理 拿到一份数据,或者在看到国内外某个学者的文章有想法而自己手里的数据刚好符合这个想法可以做时,在整理好数据后不要急于建模。一定要对数据做...

67150
来自专栏大数据挖掘DT机器学习

一个贯穿图像处理与数据挖掘的永恒问题

作者: 左飞 著有《算法之美——隐匿在数据结构背后的原理(C++版)》 原文 http://blog.csdn.net/baimafujinji/articl...

24630
来自专栏BestSDK

知其所以然之永不遗忘的算法

image.png 相信大部分同学曾经都学习过快速排序、Huffman、KMP、Dijkstra等经典算法,初次学习时我们惊叹于算法的巧妙,同时被设计者的智慧所...

27870
来自专栏PPV课数据科学社区

连载 | 概率论与数理统计(2) – 随机变量概述

作者:Belter。专注于生物方向的数据分析,一位编程爱好者。关注Python, R和大数据。

9010
来自专栏懒人开发

(3.8)James Stewart Calculus 5th Edition:Derivatives of Logarithmic Functions

具体 y = a^x 求导过程,可以见3.5.5: 先化简: (指数函数,只要求导,化成e为底去做, 因为e^x 求导,为 e^x ,这样可以简化难度)

9330

扫码关注云+社区

领取腾讯云代金券