[关闭]
@elibinary 2017-02-18T06:07:09.000000Z 字数 2220 阅读 694

初步理解自然语言处理

MachineLearning


最近一段时间一直在重拾那些被我遗忘的数学知识,以便能够更好的理解机器学习领域,经过这一小段时间的学习让我深刻的认识到以往念书时完全没有感受到的数学的统一和美妙,念书时学习线性代数这门课时简直像是在学习一门独立的完全不知所谓的说是数学但又有大量的需要死记硬背的规则和公式,学完之后完全就不知道这玩意到底是干啥用的,只记住了一大堆的莫名其妙的计算方法比如行列式矩阵的各种计算(好吧,其实之前连这些东西也都忘光了)。再一次深刻的理解到只有理解领会并转化为自己的东西才是能够长久的记忆并使用的东西,那些死记硬背的却又完全不知所云的知识会以和记忆时困难无比所不同的轻易就会忘记。好吧扯远了,下面开始简单说一下这段时间对自然语言处理的一些简单了解

人工智能

图灵测试: 这是图灵提出的一种验证及其是否有智能的方法,就是让人和机器进行交流,如果人无法判断自己交流的对象是人还是机器,就说明这个机器具备了智能。

首先语言的出现是为了人类之间的相互交流通信,在数学之美这本书中提到:字母、文字和数字实际上是信息编码的不同单位,任何一种语言都是一种编码的方式,而语言的语法规则就是编解码的算法。其过程类似于:
1. 要表达的意思 + 选择某种语言 -> 某种语言的一句话,用语言来表达出我们的意思其实就是用这种语言的编码方式对脑中信息进行一次编码,编码的结果就是一句话
2. 某种语言的一句话 -> 确定语言种类 -> 理解这句话的意思,这其实就是一个解码的过程,接收者使用这门语言的解码方式获得说话人要表达的信息。

这个过程就体现了语言的数学本质。

基于规则

在自然语言处理领域最早提出来的思想是基于语言规则的处理方法,就是语法规则、词性以及构词法这些东西,而且这些东西有非常容易用计算机的算法所描述。不过最终这种方法并不能解决现实中的一些实际问题。

其中最关键的部分就是无法处理各种各样的语义规则,自然语言中词的多义性很难用规则来描述,要依赖上下文才能定义甚至是常识这种意识的形式才能确定意义。

基于统计

基于统计的处理方法使自然语言处理有了突破性的进展,统计语言模型的成为了现今所有自然语言处理的基础,广泛应用于机器翻译、语音识别等各个领域

这种基于统计的方法可以描述为,现在有 S 这一句子

  1. S = w1w2w3w4...wn

这个句子有一连串顺序排列的词 w1,w2,w3...wn 组成,现在我们想知道 S 在文本中出现的概率。首先能想到的就是把人类史上的文本统计一下然后得出这句话可能出现的概率,很显然这种方法是行不通的。我们需要一种更加朴实的模型来估算。
首先把 P(S) 展开

  1. P(S) = P(w1,w2,w3...wn)

根据条件概率可知

  1. P(w1,w2,w3...wn) = P(w1) * P(w2|w1) * p(w3|w1,w2) ... P(wn|w1,w2...w(n-1))

理解起来很简单,其中 P(w1) 就是第一个词 w1 出现的概率,P(w2|w1) 是在已知第一个词的前提下,w2 出现的概率,以此类推 wn 这个词的出现概率依赖于前面所有的词。
另一种表述可能更清楚,把前面的词统一称为句子开头部分,那么当前词 wi 的概率就是这个词 wi 在句子开头条件下的概率。
这个模型中,前面出现的概率算起来还算容易但是越往后越难算当达到一定规模(这个规模比你想象的要小)就可能由于可能性太多而无法估算了。

在这种情况下,马尔可夫提出了一种偷懒的简化概念,那就是每当遇到这种情况就假设任意一个词 wi 出现的概率只与它前面的词 w(i-1) 有关,这样整个问题就变的简单起来。其数学公式也变得非常简单:

  1. P(w1,w2,w3...wn) = P(w1) * P(w2|w1) * p(w3|w2) ... P(wn|w(n-1))

这个公式对应的统计语言模型就是 Bigram Model,二元模型。

这样就来看下如何计算 P(wi|w(i-1)),通过遍历语料库可以见到那统计出词 w(i-1) 出现的次数和 (w(i-1),wi) 出现的次数,然后就可以使用公式

  1. P(wi|w(i-1)) = P(w(i-1),wi)/P(w(i-1))

计算 P(w(i-1),wi) , P(w(i-1)) 由于是统计这个语料库中出现的并不是世界上全部的(事实上也不可能),所以这只是个近似值,根据大数定理近似认为这个就是这个词的概率。

在数学与统计学中,大数定律又称大数法则、大数律,是描述相当多次数重复实验的结果的定律。根据这个定律知道,样本数量越多,则其平均就越趋近期望值。

是否感觉到数学的神奇,它能把一个复杂的问题变得如此统一简单。

当然二元模型虽然能够解决很多问题,但是由于太过简化而会有很多例外的词组。因此,更加普遍的假设是某个词和前面若干个词有关,关联词越多越准确。

N-1 阶马尔可夫假设,假设文本中的每个词 wi 和前面 n-1 个词有关,而与更前面的词无关,那么 wi 的概率就是 P(wi|w(i-n+1)...w(i-1)),其对应的语言模型称为 N元模型,N-Gram Model。
以此类推,当 N=1 时其实就是一个上下文无关模型,也就是假设当前词出现的概率与前面的词无关。

目前现实应用的最多的是 N=3 的三元模型,因为 N元模型的空间复杂度几乎是N的指数函数,因此N不能太大。但是就算是四元甚至更高阶的模型也是不可能覆盖所有的语言现象的。比如有时上下文中间的相关性可能跨度非常之大,甚至可以从一个段落到另一个段落,这就是马尔可夫假设的局限性。需要采用一些其他的手段来解决。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注