28

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

 4 years ago
source link: https://flashgene.com/archives/79633.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

让计算机理解自然语言

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

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

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

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

人类如何理解自然语言

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

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

IrmUZjq.jpg!web

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

计算机如何理解自然语言

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

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

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

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

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

jErqAjJ.jpg!web

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

eQRfYvE.jpg!web

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

自然语言的数值化和计算

对于 计算机,当若干包含“苹果”一词的文档被输入进去的时候,“苹果”被转化为一个数值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)。

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

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

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

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

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

ja2Mvei.jpg!web

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK