机器是这样理解语言 - 词向量
切换视频源:

机器是这样理解语言 - 词向量

作者: 莫烦 编辑: 莫烦 发布于: 2020-10-08

学习资料:

语言是一门学问,不断变化的人类语言需要用一生来掌握。而且学会语言,往往是从学会词语的意思开始,将词组成话,才让语言有了意义。欢迎回来,我是周沫凡,今天我们就来聊一聊计算机是如何理解词汇的。

人类学习语言

nlp

有一天,朋友问我,你和你爸爸是最初是怎么认识的,我说,我也不知道啊,记得小时候,有个人总对着我,喊我爸爸、爸爸的,搞得我以为我是他爸爸,但是也不知道是哪一天开始,我们的身份互换了,变成了我总喊他爸爸。这段日子真是特别神奇。其实我只是想说,我们人类从小就有学习语言的天分,而且也有研究指明,婴幼儿时期,人类对任何语言都是开放的,仿佛就像一个模具,不管往模具里倒什么颜色的材料,都可以定型,语言也是一样,先天学习者可以比后天学习者更轻松地学习任何语言。

nlp

想要思考计算机是如何理解语言,我们来看看自己是怎么理解语言的。有一天我突然听到有人说:“莫烦,你妈喊你回家吃饭”,然后我思考了片刻,没有犹豫,立马跑回了家。因为在我的脑海中,出现了我从小就反复听到的“妈妈”,“家”和“吃饭”的词,这些抽象概念早已在脑海中构建好固定的神经连接,时刻准备着被唤醒和被激活。更重要的是,我也能意识到,如果我不立马赶回家,这条神经反射连接还能连向一个我脑中负责处理危险信息的地方,意味着很糟糕的后果即将到来。我通过理解每个词语的意思,然后经历词语组装过程,得到了句子的意思,甚至我还能明白这句话背后的意思。这就是上帝赐予我们的能力呀。

所以,我们可以大胆推测一个结论,想要学会语言,对词语的理解是基础。那计算机是怎么做到对词语的理解呢?

计算机理解语言

nlp nlp

我们在以前的视频中提到过,计算机能处理的事物都是由数字组成的。比如所有的图片都可以转化成数字的表达形式,计算机识别图片就是在这些图片背后的数字上寻找规律。那么在语言上面呢?语言怎样用数字表达呢?

计算机之所以能看懂字里行间的感情,理解文字,处理文字,并不是因为它理解的我们普罗万象的人类语言,而是它将语言或者词汇归类到了一个正确的位置上。计算机对词语的理解,其实是计算机对空间及位置的理解。今天我就来带领大家探索一下计算机看懂词语的一种技术-词向量。

nlp

我们在前面的内容中提到过搜索引擎当中的文章向量化技术。每一篇文章都可以用词语出现频率来表示,颜色深的地方,数字的值越大。比如第7篇文章就能被表示成这样一个向量。我们将这些文章按照这种向量表现形式,投射到一个空间中,他们就有了自己的位置。

nlp 因为每篇文章向量中的数值不一定相同,那么在空间中也会分散开来。为什么这种形式,计算机就可以看懂了呢?因为计算机会的东西不多,但是人家算数可以又快又准,我们将图片或者语言进行数字化后,计算机就可以操起吃饭的家伙,来算数啦。在可以被计算的空间中,我们就可以比较每一个点之间的距离,离得越近,就可以说他们越像。

nlp 这也就意味着,物以类聚,人以群分,万事万物,越相似,他们就越相近。不管是图片,文章,句子,词语,声音,只要是能被数值化,被投射到某个空间中,计算机都能把它们按相似度聚集起来。当比较距离远近的时候,除了刚刚的直接测距,我们还有其他很多种方法哦。

词向量

nlp 之前我们用空间中点与点之间的直线距离可以判断词汇的相似程度,而有时候我们并不在乎距离的长短(或强度的大小),只要是词语在一个方向上,我们就认为他们是相近的,这时我们就能用cosine 相似度来测量两个向量的夹角大小。点与点的距离和向量夹角这两种测量方式会带来什么样的差别呢?

在词向量训练的过程中,相似词总会被聚集到一块地方且方向大概都相同,比如这里的猫狗龙。而差异较大的词会被拉远,且方向有可能不同,所以和猫狗这些动物相比,没有生命的飞机,碗等都离得很远。

所以如果只想测量两个词的相似度,角度信息也足够了。但点与点的距离还透露了更多的信息,只要两个词总在一起出现,他们之间的关联性应该越强,距离应该也越近。我们想一想,如果一个词不仅出现的频率高,而且任何句子中都能出现,比如“在”,“你”,“吗”这一类的词,

nlp

为了得到这些词的位置,机器需要不断计算他们之间的相关性。这个过程我们称之为机器学习或者模型训练。这些词每次训练的时候都想被拉扯到独立的空间,但是被太多不同方向的词拉来拉去,比如”在”这个字,训练“在这”的时候“在”字被拉扯到靠近“这”字的方向。训练“在家”的时候,“在”字将会更靠近“家”字,后面的训练也一样,所以“在”字因为频率太高,和很多字都能混搭,它就算是之中机器认为的“中性词”,越有区分力的词可能越远离中心地带,因为他们和其他词都不像,而越通用,在每种场景都有的词,就可能越靠近原点。这时,点与点的距离就能告诉我们词的频率性特征。

训练词向量

nlp 训练词向量有一个非常聪明的方法,我们完全不需要像监督学习那样需要人工给数据打上标签,我们可以直接在原始语料上做非监督学习,只要有各种各样的文章数据就行。训练时,我们取一小段文本,取出这些词的向量表示,比如取出除了“一”字以外的词向量,然后整合到一起,表示这些文字的整体向量,用这个整体向量预测最中间那个“一”。接下来在开始下一段文字的训练。

将这个窗口挪动一格,用前后文预测“段”字,接着将窗口依次这样扫过所有文字,用所有的前后文预测中间词,这样计算机就能将前后文的关系搞清楚,挨得近的词他们的关系越亲密总出现在类似的上下文中间的词关系越亲密。向量在一定程度上也越相近。除了用前后文预测中间词,我们还能换一个思路,用中间词预测前后文也行。

除了颠倒输入输出外,其他的方法都是一样,它的假设是,在某个词的周围,应该都是和这个词有关系的词,所以当我们预测关联词的时候也就会拉近这些关联词的距离,把相近的词聚集到一起,从而得到所有的词向量。 获得了这些词向量后,我们又可以怎么用呢?

词向量用法

nlp 有种用法很简单,就是直接把词向量当成词语特征输入进另一个模型里。这样就能用更丰富的词向量信息来表示一个词语ID。在这种情况中,我们说词向量是一种预训练特征。用word2vec 的方法预先训练好了词语的特征表达,然后在其他场景中拿着预训练结果直接使用。

nlp 还有种更有趣的玩法,用词向量进行加减运算,男人减掉女人的词向量,差不多就约等于公猫减掉母猫的词向量。或者你换一个思路,玩点更有趣的。

nlp 用来寻找在大家心目中,有和莫烦一样风格的Java教学老师,你完全能够做一下类似于这样的加减运算,Python-Java=莫烦-什么?词向量的更多玩法都等着你去发掘哦~


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat

    有趣的机器学习