【n-grams】基于统计方法的语言模型
基于统计方法的语言模型
- 语言模型
- 语言模型的发展
- 基于统计方法的语言模型
- n-grams 语言模型定义
- 主流 n-grams 语言模型
- n-grams 语言模型举例
语言模型
语言是一套复杂的符号系统。语言符号通常在音韵、词法、句法的约束下构成,并承载不同的语义。语言的符号具有不确定性。同样的语义可以由不同的音韵、词法、句法构成的符号来表达。同样的音韵、词法、句法构成的符号也可以在不同的语境下表达不同的语义。因此,语言是概率的。 并且,语言的概率性与认知的概率性也存在密不可分的关系。
语言模型(Language Models,LMs)旨在准确预测语言符号的概率。从语言学的角度,语言模型可以赋能计算机掌握语法、理解语义,以完成自然语言处理任务。但从认知科学的角度,准确预测语言符号的概率可以赋能计算机描摹认知、演化智能。
语言模型的发展
从ELIZA到GPT-4,语言模型经历了从 规则模型 到 统计模型,再到 神经网络模型 的发展历程,逐步从呆板的机械式问答程序成长为具有强大泛化能力的大语言模型。语言模型系列内容,将沿着发展历程展开,从基于统计方法的 n-grams 语言模型,到基于循环神经网络 RNN 的语言模型,再到基于 Transformer 的语言模型。本博文内容,为基于统计方法的 n-grams 语言模型。
基于统计方法的语言模型
语言模型通过对 语料库(Corpus) 中的语料进行统计学习从而获得预测语言符号概率的能力。通常,基于统计的语言模型通过直接统计语言符号在语料库中 出现的频率 来预测语言符号的概率。
n-grams 语言模型是最具代表性的统计语言模型。其基于 马尔可夫假设 和 离散变量的极大似然估计 给出语言符号的概率。本节内容将首先给出 n-grams 语言模型的计算方法,然后讨论 n-grams 语言模型如何在马尔可夫假设的基础上应用离散变量极大似然估计给出语言符号出现的概率。
定义:n 阶马尔可夫建设
对序列 { w 1 , w 2 , . . . , w N } \{w_1, w_2, ..., w_N\} {w1,w2,...,wN},当前状态 w N w_N wN 出现的概率只与前 n n n 个状态 { w N − n , . . . , w N − 1 } \{w_{N-n}, ...,w_{N-1}\} {wN−n,...,wN−1} 有关,即: P ( w N ∣ w 1 , w 2 , . . . , w N − 1 ) ≈ P ( w N ∣ w N − n , . . . , w N − 1 ) P(w_N|w_1, w_2, ..., w_N-1)≈P(w_N|w_{N-n}, ..., w_{N-1}) P(wN∣w1,w2,...,wN−1)≈P(wN∣wN−n,...,wN−1)
n-grams 语言模型定义
设包含 N 个元素的语言符号可以表示为 w 1 : N = { w 1 , w 2 , . . . , w N } w_{1:N}=\{w_1, w_2, ..., w_N\} w1:N={w1,w2,...,wN}( e . g . e.g. e.g. 我喜欢苹果={我,喜欢,苹果})。 w 1 : N w_{1:N} w1:N 代表一段文本,其每一个元素 w i ∈ w 1 : N w_i∈w_{1:N} wi∈w1:N 称为代表词。
n-grams 语言模型中 n-gram 指的是长度为 n 的词序列。举例来说 n=2 时,考虑上一个词对下一个词的影响。通过依次统计文本中的 n-gram 及其对应的 (n-1)-gram 在语料库中出现的相对频率来计算文本 w 1 : N w_{1:N} w1:N 出现的概率。
计算公式如下所示:
P n − g r a m s ( w 1 : N ) = Π i = n N C ( w i − n + 1 : i ) C ( w i − n + 1 : i − 1 ) P_{n-grams}(w_{1:N})=\Pi ^N _{i=n}\frac {C(w_{i-n+1:i})} {C(w_{i-n+1:i-1})} Pn−grams(w1:N)=Πi=nNC(wi−n+1:i−1)C(wi−n+1:i)其中:
- C ( w i − n + 1 : i ) C(w_{i-n+1:i}) C(wi−n+1:i) 为词序列 { w i − n + 1 , . . . , w i } \{w_{i-n+1}, ..., w_i\} {wi−n+1,...,wi} 在语料库中出现的次数
- C ( w i − n + 1 : i − 1 ) C(w_{i-n+1:i-1}) C(wi−n+1:i−1) 为词序列 { w i − n + 1 , . . . , w i − 1 } \{w_{i-n+1}, ..., w_{i-1}\} {wi−n+1,...,wi−1} 在语料库中出现的次数
主流 n-grams 语言模型
n-grams 语言模型根据 n 值,有如下主流模型:
- n = 1 n=1 n=1,称 unigram,不考虑文本上下文关系: P u n i g r a m ( w 1 : N ) = Π i = 1 N C ( w i ) C ( w i : i − 1 ) = 词 w i 语料库中出现的次数 语料库中词的总数 P_{unigram}(w_{1:N})=\Pi^N_{i=1}\frac{C(w_{i})} {C(w_{i:i-1})}=\frac {词 w_i 语料库中出现的次数} {语料库中词的总数} Punigram(w1:N)=Πi=1NC(wi:i−1)C(wi)=语料库中词的总数词wi语料库中出现的次数
- n = 2 n=2 n=2,称 bigrams,对前一个词作考虑: P b i g r a m s ( w 1 : N ) = Π i = 2 N C ( w i − 1 : i ) C ( w i − 1 ) = 词序列 { w i − 1 : w i } 语料库中出现的次数 词 w i − 1 语料库中出现的次数 P_{bigrams}(w_{1:N})=\Pi^N_{i=2}\frac {C(w_{i-1:i})} {C(w_{i-1})}=\frac {词序列 \{w_{i-1}:w_i\} 语料库中出现的次数} {词 w_{i-1} 语料库中出现的次数} Pbigrams(w1:N)=Πi=2NC(wi−1)C(wi−1:i)=词wi−1语料库中出现的次数词序列{wi−1:wi}语料库中出现的次数
- n = 3 n=3 n=3,称 trigrams,对前两个词作考虑: P t r i g r a m s ( w 1 : N ) = Π i = 3 N C ( w i − 2 : i ) C ( w i − 2 : i − 1 ) P_{trigrams}(w_{1:N})=\Pi^N_{i=3}\frac {C(w_{i-2:i})} {C(w_{i-2:i-1})} Ptrigrams(w1:N)=Πi=3NC(wi−2:i−1)C(wi−2:i)
- …
n-grams 语言模型举例
假设语料库(Corpus)中包含有5个句子:
基于该语料库,应用 bigrams 语言模型,对文本 w 1 : N = 长颈鹿脖子长 = { 长颈鹿,脖子,长 } w_{1:N}=长颈鹿脖子长=\{长颈鹿,脖子,长\} w1:N=长颈鹿脖子长={长颈鹿,脖子,长} 出现的概率进行计算,公式如下: P b i g r a m ( 长颈鹿,脖子,长 ) = C ( 长颈鹿,脖子 ) C ( 长颈鹿 ) ∗ C ( 脖子,长 ) C ( 脖子 ) P_{bigram}(长颈鹿,脖子,长)=\frac {C(长颈鹿,脖子)} {C(长颈鹿)}*\frac {C(脖子,长)} {C(脖子)} Pbigram(长颈鹿,脖子,长)=C(长颈鹿)C(长颈鹿,脖子)∗C(脖子)C(脖子,长) 根据语料库内容统计, C ( 长颈鹿,脖子 ) = 2 C(长颈鹿,脖子)=2 C(长颈鹿,脖子)=2、 C ( 脖子,长 ) = 2 C(脖子,长)=2 C(脖子,长)=2、 C ( 长颈鹿 ) = 5 C(长颈鹿)=5 C(长颈鹿)=5、 C ( 脖子 ) = 6 C(脖子)=6 C(脖子)=6。故, P b i g r a m ( 长颈鹿,脖子,长 ) = 2 15 P_{bigram}(长颈鹿,脖子,长)=\frac 2 {15} Pbigram(长颈鹿,脖子,长)=152 由此可见,虽然文本并未出现在语料库中,但是 bigram 模型仍然判断该文本出现的概率为 2 15 \frac 2 {15} 152,可以说,n-grams 模型对未知文本是具备初步泛化能力。
但是,这种泛化能力会随着 n 的增大而逐渐减弱。如我们在应用 trigram 模型对文本 “长颈鹿脖子长” 进行概率计算时, P t r i g r a m ( 长颈鹿,脖子,长 ) = C ( 长颈鹿,脖子,长 ) ( 长颈鹿,脖子 ) = 0 P_{trigram}(长颈鹿,脖子,长)=\frac {C(长颈鹿,脖子,长)} {(长颈鹿,脖子)}=0 Ptrigram(长颈鹿,脖子,长)=(长颈鹿,脖子)C(长颈鹿,脖子,长)=0
因此,在 n-grams 语言模型中,n 代表了拟合语料库的能力与对未知文本的泛化能力之间的权衡。
- 当 n 过于大时,语料库中很难找到与 n-gram 一模一样的词序列,可能出现大量”零概率“现象。
- 在 n 过小时,n-gram 难以承载足够的语言信息,不足以反应语料库的特性。
所以,在 n-grams 语言模型中,n 值的选择是影响性能的关键因素。