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

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

作者: 莫烦 编辑: 莫烦 发布于: 2020-11-01

学习资料:

丰富的语言能力是人类区分于其他动物的原因之一,人类不光能轻松的识别语言信息,而且还能有效利用词汇创造出浩瀚无垠的句子。现在的机器也从不断地学习中慢慢缩短与人类之间的能力差距。欢迎来到莫烦Python,我是周沫凡,今天我们就来聊一聊计算机想要理解句子,它需要做些什么?

人类理解语言

nlp

你大概率会听过这样一个段子,女生对男生说:“下班顺路买五个包子带回来,如果看到卖西瓜的,就买一个。” 结果男生提着一个包子回到了家。女生问:“不是要你买三个包子吗?”,男生说:“是呀,我碰见了一个卖西瓜的”。哈哈,大家都会说,这个男生是程序员准没错。在普通人眼中,浮现的场景应该是,我要买五个包子,看到卖西瓜的就再买一个西瓜。可是在程序员眼中,他理解的是这样的,如果你也是程序员,应该能轻松get到他只买一个包子的原因。这样有问题吗?不见得哦,在不同人眼中,对一句话的理解往往会因这个人本身的经历和知识储备有关。所以以这样的角度思考,语文考试中的阅读理解,就不止一种答案了。

如果理解句子对人类来说,都这么具有挑战性,那么机器又是怎么理解一句话的呢?

句向量

nlp

我们前面有提过,使用深度学习的计算机在理解任何事物之前,都是将这件事物转换成一种数学的表达形式。在AI从业人员看来,AI技术,都是将这些以数字记录的数据,通过AI模型将其转化成一串数字,

nlp 我们看到的图片就是原始的数据存储在计算机中的样子,中间的模型将图片当做输入,然后输出成右边的数字,我们称其为向量。这个向量,就是模型对于这张图片的理解。你可能会在想,我们不是在说人类的语言吗?这和图片有什么关系?当然是有关系的,机器学习是一类方法,可以运用在图片上的算法,我们也能将其拓展到语言上,甚至语言模型用在图片上的也不少见。我们只需要将这里的信号源,从图片切换到语言就好了。

现在右边的向量,就是我们通过模型,得到的机器对于一句话的理解。对于这个理解,也就是向量,使用的方法不止一种,

nlp

举个例子,我们可以将其放在空间中,对比这句话与其它同样转化成向量的句子的不同含义。那我们又是如何具体得到这些向量理解的呢?在以前的视频中,我提到过我们人类理解句子的前提是理解句子中每个词语的含义,然后将词语组成句,看似我们已经找到了一条通往理解句子的光明大道。可是即便计算机能够通过 w2v 拿到对词语的向量化理解,我们要怎么使用,才能把它变成对句子的理解呢?

怎么理解

nlp 也就是说,我们需要找到一种方法,将这些离散的词向量,加工成句向量。有一种简单粗暴的方法,试试直接将所有词向量相加怎么样?

也不是不行,不过我们依旧是在词向量的空间上理解句子,如果句子和词语是有本质区别的事物,那么他们所属的空间应该也不同。直接使用加法,没有办法创造出一个全新的空间。那我们还能怎么办?用乘法呢?这说对了一半,我们的确可以用乘法来转移空间属性,比如使用线性代数的方法,让一个空间的向量,在另一个空间以不同形式表达。而我们现在最常见的方案就是使用神经网络做这样的复杂乘法运算。在神经网络中,我们常常将这个过程叫做 Encoding,编码。

nlp 这个过程类似压缩的过程,将大量复杂的信息,压缩成少量经典的信息,通过这个途径找到信息的精华部分。我们待会再聊聊能用这个精华部分做些什么有趣的事情。现在我们聚焦在如何通过神经网络的方法得到这个精华部分。一个人说话是存在顺序信息的,如果将词语的顺序颠倒,我们可能会得到完全不同的信息。

可见我们的模型必须要将顺序信息完全考虑起来。恰好,我们之前提过,循环神经网络最擅长做这件事情。

nlp

循环神经网络在词向量上,从前到后,一个个词语阅读,

阅读完整句后,模型拥有了对这句话整体的理解,也就有能力产生出一个基于整句理解的向量,encoding句向量的过程也顺理成章地完成了。那么有了这个句子的理解,我们又能干嘛呢?这时就是开脑洞的时刻了。因为只要我们能够向量化的事物,都可以在这个过程中应用起来。与encoding对应的,我们还有一个叫decoding的过程。如果说encoding是编码,是压缩,那么decoding就是解码,是解压。与传统的压缩解压不同,我们不仅能解压出原始的文件,我们还能基于这种计算机压缩过的理解,转化成更多数字化形式。

nlp

比如根据这个理解生成机器人下一轮对话,生成一张爱心图案,判断这句话是积极状态,又或者判断要进入到支持莫烦的步骤了~这些都是可以被计算机数字化的过程。下面我们就来举一个简单的生成对话任务,来介绍一下机器是如何通过大数据学习理解句子,并可以和人对话的吧。

nlp

首先我们通过前面介绍的方式,拿到循环神经网络对句子的理解,通过encoding过程,得到句向量。 用另一个循环神经网络,作为Decoder,解码器,基于句向量生成下文。

更加具体的细节和不同方法,我会在代码教学中详细说明。简而言之,Encoder负责理解上文,Decoder负责将思考怎么样在理解的句子的基础上做任务。这一套方法就是在自然语言处理中风靡一时的Seq2Seq框架。不得不说,分工合作的这套机制,在深度学习中十分普遍且有效。而在后面的影片中,我们会继续探索怎么样能够让机器更加深层次的理解句子。


降低知识传递的门槛

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

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

wechat

    有趣的机器学习