自然语言处理 | (11) N-gram语言模型及其应用

目录

1.前言

2. 什么是N-Gram模型

3.利用N-Gram模型评估语句是否合理

4.N-Gram模型评估语句合理性的例子

5. N-Gram中N的选择及其对性能的影响

6.N-Gram语言模型的其他应用

7.使用N-Gram模型时的数据平滑算法

8.推荐阅读


1.前言

自然语言(Natural Language)其实就是人类的语言,自然语言处理(NLP)就是对人类语言的处理,当然主要利用计算机。自然语言处理是关于计算机科学和语言学的交叉学科,常见的研究任务包括:

  • 分词(Word Segmentation或Word Breaker,WB)
  • 信息抽取(Information Extraction,IE):命名实体识别和关系抽取(Named Entity Recognition & Relation Extraction,NER)
  • 词性标注(Part Of Speech Tagging,POS)
  • 指代消解(Coreference Resolution)
  • 句法分析(Parsing)
  • 词义消歧(Word Sense Disambiguation,WSD)
  •  语音识别(Speech Recognition)
  •  语音合成(Text To Speech,TTS)
  •  机器翻译(Machine Translation,MT)
  • 自动文摘(Automatic Summarization)
  • 问答系统(Question Answering)
  • 自然语言理解(Natural Language Understanding)
  • OCR
  • 信息检索(Information Retrieval,IR)

早期的自然语言处理系统主要是基于人工撰写的规则,这种方法费时费力,且不能覆盖各种语言现象。上个世纪80年代后期,机器学习算法被引入到自然语言处理中,这要归功于不断提高的计算能力。研究主要集中在统计模型上,这种方法采用大规模的训练语料(corpus)对模型的参数进行自动的学习,和之前的基于规则的方法相比,这种方法更具鲁棒性。

在这个大背景下产出了统计机器学习方法和统计自然语言处理方法,包括今天提到的统计语言模型。

推荐以下两本很流行的关于统计学习的书:统计学习方法统计自然语言处理

 

2. 什么是N-Gram模型

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。

每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

 

3.利用N-Gram模型评估语句是否合理

在介绍N-Gram模型在评估语句合理性这个应用之前,先看一个例子。

首先,从统计的角度来看,自然语言中的一个句子 s 可以由任何词构成,不过概率句子s出现的概率P(s) 有大有小。例如:

  • s_{1} = 我刚吃过晚饭
  • s_{2} = 刚我过晚饭吃

显然,对于中文而言s_{1}是一个通顺且有意义的句子,而s_{2}不是,所以对于中文来说,P(s_{1}) > P(s_{2}).但对于其他语言来说,概率值可能会出现反转。

其次,另外一个例子是,如果我们给出了某个句子的一个节选,我们其实可以能够猜测后续的词应该是什么,例如

  • the large green__. ('mountain' or 'tree'?)
  • Kate swallowed the large green__.('pill' or 'broccoli'?)

显然,如果我们知道一个句子片段更多前面内容的情况下,我们会得到一个更加准确的答案。所以,前面的(历史)信息越多,对后面未知信息的约束就越强。

如果我们有一个由m个词组成的序列/句子s,即s = w_{1},w_{2},...,w_{m},我们希望算的该句子出现的概率:

P(s)=P(w_{1},w_{2},...,w_{m}) = P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,...,w_{n-1})

上面这个联合概率链规则显然不好算,虽然它考虑了所有词和词之间的依赖关系,但是这样非常复杂,在实际中几乎没有办法使用。于是,我们需要用一种办法来近似这个公式,要求其效果要比独立性假设好(假设句子中每个词之间是独立的,没有任何关系,也就是下文中要提到的1-gram/uni-gram)。 这个办法就是著名的马尔可夫假设,即当前这个词仅仅跟前面几个有限的词相关,因此也就不必追溯到最开始的那个词,这样就可以大幅缩减上述算式的长度,即:

p(w_{1},w_{2},...,w_{m}) = \prod _{i} p(w_{i}|w_{i-n+1},...,w_{i-1})

特别地,n取值比较小时,下面给出一元/2元/3元模型:

  • 当n=1时,这是一个一元模型(独立性假设,各个词之间相互独立。1-gram/unigram)

  • 当n=2时,这是一个二元模型(2-gram/bigram):

  • 当n=3时,这是一个三元模型(3-gram/trigram):

下面的思路就比较简单了,在给定的训练语料中,利用贝叶斯定理,将上述的条件概率值都统计计算出来即可,然后相乘就可以得到整个句子出现的概率。公式如下:

  • 对于unigram来说,其中C(w_{1},...,w_{n})表示n-gram w_{1},...,w_{n}在训练语料中出现的次数,M是语料库中的总词数(如 对于yes,no,no,no,yes来说,M=5,以下符号都是同理)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值