当前位置: 首页>后端>正文

N-gram语言模型

本系列原理涉及较少,多为学习过程中遇到并初步了解的相关知识,具有科普性。

从20世纪80年代或更早的时候起,学者们研究了很多的分词方法,这些方法大致可以分为三大类:

基于词表的分词方法 - 正向最大匹配法(forward maximum matching method, FMM) - 逆向最大匹配法(backward maximum matching method, BMM) - N-最短路径方法
基于统计模型的分词方法 - 基于N-gram语言模型的分词方法
基于序列标注的分词方法 - 基于HMM的分词方法 - 基于CRF的分词方法 - 基于词感知机的分词方法 - 基于深度学习的端到端的分词方法

本篇我们初步介绍一下N-gram语言模型。

首先,我们需要一些数学基础:


N-gram语言模型,第1张
概率公式

还有贝叶斯公式和全概率公式:


N-gram语言模型,第2张
贝叶斯公式
N-gram语言模型,第3张
全概率公式

下面,我们就可以理解N-gram语言模型了。

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。
每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

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

如果我们有一个由 m 个词组成的序列(或者说一个句子),我们希望算得概率 N-gram语言模型,P(w_1,w_2,\cdots,w_m),第4张,根据链式规则,可得:

N-gram语言模型,第5张
链式法则

这个概率显然并不好算,不妨利用马尔科夫链的假设,即当前这个词仅仅跟前面几个有限的词相关,因此也就不必追溯到最开始的那个词(靠后的词的概率一般与开始的词无关),这样便可以大幅缩减上述算式的长度,提高运行效率。
N-gram语言模型,第6张
缩短为几个词

但是现实生活中,后面的词一般只与前面1,2,3个词有关,因此我们只考虑一元模型,二元模型,三元模型。

当 n=1, 一个一元模型(unigram model)即为 :
N-gram语言模型,P(w_1,w_2,\cdots,w_m)=\prod\limits_{i=1}^mP(w_i),第7张
当 n=2, 一个二元模型(bigram model)即为
N-gram语言模型,P(w_1,w_2,\cdots,w_m)=\prod\limits_{i=1}^mP(w_i|w_{i-1}),第8张
当 n=3, 一个三元模型(trigram model)即为
N-gram语言模型,P(w_1,w_2,\cdots,w_m)=\prod\limits_{i=1}^mP(w_i|w_{i-2}w_{i-1}),第9张
然后,利用贝叶斯定理,将上述的条件概率值统计出来:

N-gram语言模型,第10张
模型举例

数学推导过程如下:
N-gram语言模型,P(w_i|w_{i-1})=\frac{P(w_iw_{i-1})}{P(w_i)}=\frac{C(w_iw_{i-1})/C(all))}{C(w_i)/C(all)}=\frac{C(w_iw_{i-1})}{C(w_i)},第11张

这些模型计算的是某个句子出现的概率,也就是说这个句子像人话的可能性有多高,当这个概率越高,说明这个句子更像人话,更符合语言逻辑。

经过一些实体例子证明,二元模型Bi-gram的正确率比较高。
例:
假设我们现在有如下的一个语料库(一般包含很多句子,很多的词),其中N-gram语言模型,<s_1><s_2>,第12张是句首标记,N-gram语言模型,</s_1></s_2>,第13张是句尾标记(对于trigram来说,每个句子的第一个词之前要补两个开始标记,最后一个词之后要补两个结束标记。其他n-gram同理):

N-gram语言模型,第14张
资料中出现的各个词

那么这个句子出现的概率是多少呢,也就是说这个句子是人话的可能性有多大呢?


N-gram语言模型,第15张
句子

首先要计算用到的一些概率


N-gram语言模型,第16张
计算概率

经计算,我们得到其概率为0.05.
N-gram语言模型,第17张
概率

也就是说,这个句子是人话的可能性是0.05,但有的时候句子很长,会出现大量的小数,这时候我们就该考虑取对数来处理了。

关于其应用,我们在生活中见到了很多,比如我们的搜索栏:


N-gram语言模型,第18张
搜索栏

当你输入两个字时,网页会自动为你计算后面最可能出现的汉字。

除此之外,N-gram模型还应用于一些分词模型,比如jieba模型,我们后续再介绍相关知识。

参考博客[NLP:n-gram模型-CSDN博客] (https://blog.csdn.net/sinat_36226553/article/details/108731334)
参考知乎[自然语言处理中N-Gram模型介绍 - 知乎 (zhihu.com)] (https://zhuanlan.zhihu.com/p/32829048)
参考博客[自然语言处理 | (11) N-gram语言模型及其应用_3-gram-CSDN博客] (https://blog.csdn.net/sdu_hao/article/details/86893580)


https://www.xamrdz.com/backend/3h81940610.html

相关文章: