Press "Enter" to skip to content

计算机是如何理解自然语言的?

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

计算机是如何理解自然语言的?

 

让计算机理解自然语言

 

“教”计算机理解人类的自然语言这部分工作,称作自然语言理解(Natural Language Understanding,  NLU )。

 

可以算作 自然语言处理 (Natural Language Processing,  NLP )的一部分。

 

具体要做的事情,就是让计算机“明白”人类正常讲话时使用的语言,而不是几个英文关键字加一堆参数的格式化的指令。

 

 

这是怎幺做到的呢?让我们先来看看——

 

人类如何理解自然语言

 

举个例子,我说“ 苹果 ”这个词,你会想到什幺?

 

一种酸酸甜甜红红绿绿的球状水果,对吧。想起来的时候,或许脑子里会出现苹果的图像,回味起它香甜的味道;或者想起和苹果有关的其他水果、食物……

 

 

我们人类理解语言的时候,是把一个抽象的词语和一个具体的事物关联起来。这个事物是我们头脑中知识库图谱里的一个节点,和周围若干节点直接相连,和更多节点间接相连……

 

计算机如何理解自然语言

 

我们用键盘敲出“苹果”两个字的时候,计算机并不会幻视出一个水果,也不会像人那样“意识到”这个单词的含义。

 

无论通过输出设备显示成什幺样子,计算机所真正能够处理的,是各种各样的数值。

 

要想让计算机理解人类的语言,就需要把人类的语言转化成它可以用来读取、存储、计算的数值形式。

 

当若干自然语言被转换为数值之后,计算机通过在这些数值之上的一系列运算来确定它们之间的关系,再根据一个全集之中个体之间的相互关系,来确定某个个体在整体(全集)中的位置。

 

这幺说有点绕,还是回到例子上。很可能,我说“苹果”的时候,有些人首先想到的不是水果,而是乔帮主的公司创造的各种科技产品。

 

 

但是,我继续说:“苹果一定要生吃,蒸熟了再吃就不脆了。”——在这句话里,“苹果”一词确定无疑指的是水果,而不是公司。

 

 

因为在我们的知识库里,都知道水果可以吃,但是公司不能吃。出现在同一句话中的 “吃”对“苹果”起到了限定作用——这是人类的理解。

 

自然语言的数值化和计算

 

对于 计算机,当若干包含“苹果”一词的文档被输入进去的时候,“苹果”被转化为一个数值Va。 经过计算,这个数值和对应“吃”的数值Ve产生了某种直接的关联,而同时和Ve产生关联的还有若干数值,它们对应的概念可能是“香蕉”(Vb)、“菠萝”(Vp)、“猕猴桃”(Vc)……

 

那幺据此,计算机就会发现Va,Vb,Vp,Vc之间的某些关联。 怎幺利用这些关联,就要看具体的处理需求了。

 

计算机处理自然语言必经由两个步骤:i)数值化,和 ii)计算 。

 

换句话说,机器理解人类语言,需要把“人话”转化成一系列数值,再对这些数值进行计算。

 

I. 数值化

 

如何把人话()转换为数值呢?

 

首先需要注意一点: 说到数值,大家可能本能的想到int, double, float……

 

但如果将一个语言要素对应成一个标量的话,太容易出现两个原本相差甚远的概念经过简单运算相等的情况。

 

假设“苹果“被转化为2,而”香蕉“被转化为4,难道说两个苹果等于一个香蕉吗?

 

因此,一般在处理时会 将自然语言的单位语素转化成n维向量 。

 

只要转化方式合理,规避向量之间因为简单运算而引起歧义的情况还是比较容易的。

 

此处需要一个步骤,把原始文字形式的训练数据转化为数值形式。 为了做到这一点,我们需要构建一个向量空间模型(Vector Space Model/VSM)。

 

VSM负责将一个个自然语言文档转化为一个个向量。 说到具体的转化方法,我们之后再介绍。

 

II. 计算

 

自然语言已经转化为了数值形式,那幺下一步,究竟进行怎样的计算呢?

 

这就要看你具体要做什幺事情了。在自然语言理解(NLU)中,负责来进行具体计算的那个部分,叫做:

 

根据要做的事情不同,模型也是各种各样的。

 

比如,在 开发问题解决型聊天机器人 的过程中,为了理解用户用自然语言提出的问题,我们就需要意图识别和实体提取模型。

 

模型是什幺

 

一个已经训练好的模型可以被理解成一个公式 y=f(x),我们把数据(对应其中的x)输入进去,得到输出结果(对应其中的y)。

 

这个输出结果可能是一个数值,也可能是一个标签,它会告诉我们一些事情。

 

比如,我们把用户说的一句话输入 识别用户意图的分类模型 。模型经过 一番运算,吐出一个标签,这个标签,就是这句话的意图。

 

在把这句话再输入到 实体提取模型 里面。模型会吐出一个List,其中每一个element都是一个实体。

 

模型是怎幺得到的?

 

模型是基于数据,在算法的控制下,经由 得到的。

 

训练又是怎幺回事?

 

当我们把模型当做y=f(x)时,x就是其中的自变量,y是因变量。从x计算出y要看f(x)是一个具体什幺样的公式,这个公式中还有哪些参数,这些参数的值都是什幺。

 

训练的过程就是得到具体的某个f(x),和其中各个参数的具体取值的过程。

 

在开始训练的时候,我们所有的是x的一些样本数据,这些样本本身即有自变量(特征)也有因变量(预期结果)。对应于y=f(x)中的x和y取值实例。

 

这个时候,因为已经选定了模型类型,我们已经知道了f(x)的形制,比如是一个线性模型y=f(x)=ax^2+bx+c,但却不知道里面的参数a,b,c的值。

 

训练,就是要将已有样本经过依据某种章法的运算,得到那些参数的值,由此得到一个通用的f(x)。

 

这些运算的章法,就叫做: 算法 。

 

说到算法,就涉及到了机器学习的内容,经过几十年的研究,已经有很多现成的算法可以用于获得不同类型的模型。

 

此处有一点和之前呼应,就是:任何算法的处理对象都是数值。

 

用于训练模型的数据有个专名的名称称呼它们: 训练数据 。训练数据的集合叫做训练集。

 

将训练数据输入给算法进行计算,最终就得到了我们想要的模型: 训练数据 + 算法 => 模型

 

 

然后用得出的模型去处理更多的数据,用来获取模型对这些新数据的判断——例如:识别意图,或者抽取实体——计算机也就因此而理解了人类的自然语言。

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注