基本概念
大规模语料库的出现为自然语言统计处理方法的实现提供了可能,一个句子s = w 1 w 2 ⋯ w m s = w 1 w 2 ⋯ w m 的先验概率如下:
p ( s ) = p ( w 1 ) × p ( w 2 | w 1 ) × p ( w 3 | w 1 w 2 ) × ⋯ × p ( w m | w 1 ⋯ w m − 1 ) = m ∏ i = 1 p ( w i | w 1 ⋯ w i − 1 ) p ( s ) = p ( w 1 ) × p ( w 2 | w 1 ) × p ( w 3 | w 1 w 2 ) × ⋯ × p ( w m | w 1 ⋯ w m − 1 ) = ∏ i = 1 m p ( w i | w 1 ⋯ w i − 1 )
上面的式子就是语言模型,w i w i 可以是字、词、短语或词类等,称为统计基元,通常以词代之,w i w i 的概率由w 1 , ⋯ , w i − 1 w 1 , ⋯ , w i − 1 决定,这个称为w i w i 的历史,随着历史基元数量的增加,不同的历史基元数量按照指数级增长,如果共有L L 个不同的基元,例如词汇表,那么对于第i i 个统计基元有L i − 1 L i − 1 种不同的历史情况,为了解决这个问题,将w 1 w 2 ⋯ w i − 1 w 1 w 2 ⋯ w i − 1 映射到等价类S ( w 1 w 2 ⋯ w i − 1 ) S ( w 1 w 2 ⋯ w i − 1 ) ,使等价类的数目远远小于原来不同历史基元的数目,有:
p ( w i | w 1 , ⋯ , w i − 1 ) = p ( w i | S ( w 1 , ⋯ , w i − 1 ) ) p ( w i | w 1 , ⋯ , w i − 1 ) = p ( w i | S ( w 1 , ⋯ , w i − 1 ) )
将两个历史映射到同一个等价类的条件是当且仅当这两个历史中的最近的n − 1 n − 1 个基元相同,即对于H 1 : w 1 w 2 ⋯ w i − n + 1 w i − n + 2 ⋯ w i − 1 w i ⋯ , H 2 : v 1 v 2 ⋯ v k − n + 1 v k − n + 2 ⋯ v k − 1 v k ⋯ H 1 : w 1 w 2 ⋯ w i − n + 1 w i − n + 2 ⋯ w i − 1 w i ⋯ , H 2 : v 1 v 2 ⋯ v k − n + 1 v k − n + 2 ⋯ v k − 1 v k ⋯ ,要使得S ( w 1 , w 2 , ⋯ , w i ) = S ( v 1 , v 2 , ⋯ , v k ) S ( w 1 , w 2 , ⋯ , w i ) = S ( v 1 , v 2 , ⋯ , v k ) ,需要满足:
H 1 : ( w i − n + 1 , ⋯ , w i ) = H 2 : ( v k − n + 1 , ⋯ , v k ) H 1 : ( w i − n + 1 , ⋯ , w i ) = H 2 : ( v k − n + 1 , ⋯ , v k )
上述的这种情况称为n n 元文法/语法模型(n-gram model):
n = 1:处于第i i 位上的基元w i w i 独立于历史,一元文法也被写为uni-gram,monogram
n = 2:2-gram,bi-gram一阶马尔可夫链
n = 3:3-gram,tri-gram二阶马尔科夫链
为了保证条件概率再i = 1 i = 1 的时候有意义,同时为了保证句子内所有字符串的概率和为1,即∑ s p ( s ) = 1 ∑ s p ( s ) = 1 ,可以在句子首尾增加两个标志:< B O S > w 1 w 2 ⋯ w m < E O S > < B O S > w 1 w 2 ⋯ w m < E O S > ,不失一般性,对于n > 2 n > 2 的n-gram,p ( s ) p ( s ) 可以分解为:
p ( s ) = m + 1 ∏ i = 1 p ( w i | w i − 1 i − n + 1 ) p ( s ) = ∏ i = 1 m + 1 p ( w i | w i − n + 1 i − 1 )
其中w j i w i j 表示词序列w i ⋯ w j w i ⋯ w j ,w i − n + 1 w i − n + 1 从w 0 w 0 开始,w 0 w 0 表示< B O S > < B O S > ,w m + 1 w m + 1 表示< E O S > < E O S > ,例如基于2元文法,< B O S > J o h n r e a d a b o o k < E O S > < B O S > J o h n r e a d a b o o k < E O S > 的概率表示:
p ( J o h n r e a d a b o o k ) = p ( J o h n | < B O S > ) × p ( r e a d | J o h n ) × p ( a | r e a d ) × p ( b o o k | a ) × p ( < E O S > | b o o k ) p ( J o h n r e a d a b o o k ) = p ( J o h n | < B O S > ) × p ( r e a d | J o h n ) × p ( a | r e a d ) × p ( b o o k | a ) × p ( < E O S > | b o o k )
应用1:音字转换问题
给定拼音串得到汉字串,根据下列推理
^ C S t r i n g = a r g m a x C S t r i n g p ( C S t r i n g | P i n y i n ) = a r g m a x C S t r i n g p ( P i n y i n | C S t r i n g ) × p ( C S t r i n g ) p ( P i n y i n ) = a r g m a x C S t r i n g p ( P i n y i n | C S t r i n g ) × p ( C S t r i n g ) = a r g m a x C S t r i n g p ( C S t r i n g ) C ^ S t r i n g = a r g m a x C S t r i n g p ( C S t r i n g | P i n y i n ) = a r g m a x C S t r i n g p ( P i n y i n | C S t r i n g ) × p ( C S t r i n g ) p ( P i n y i n ) = a r g m a x C S t r i n g p ( P i n y i n | C S t r i n g ) × p ( C S t r i n g ) = a r g m a x C S t r i n g p ( C S t r i n g )
也就是求所有可能的句子对应的概率
汉字分词问题
给定汉字串得到得到分词后的汉字串,例如(他|是|研究|生物|的)
^ S e g = a r g m a x S e g p ( S e g | T e x t ) = a r g m a x S e g p ( T e x t | S e g ) × p ( S e g ) p ( T e x t ) = a r g m a x S e g p ( T e x t | S e g ) × p ( S e g ) = a r g m a x S e g p ( S e g ) S ^ e g = a r g m a x S e g p ( S e g | T e x t ) = a r g m a x S e g p ( T e x t | S e g ) × p ( S e g ) p ( T e x t ) = a r g m a x S e g p ( T e x t | S e g ) × p ( S e g ) = a r g m a x S e g p ( S e g )
也就是求解不同分词情况下的概率,此时统计基元为词
参数估计
对于n-gram,参数p ( w i | w i − 1 i − n + 1 ) p ( w i | w i − n + 1 i − 1 ) 可由最大似然估计得到:
p ( w i | w i − 1 i − n + 1 ) = f ( w i | w i − 1 i − n + 1 ) = c ( w i i − n + 1 ) ∑ w i c ( w i i − n + 1 ) p ( w i | w i − n + 1 i − 1 ) = f ( w i | w i − n + 1 i − 1 ) = c ( w i − n + 1 i ) ∑ w i c ( w i − n + 1 i )
但是会出现由于数据匮乏(稀疏)(sparse data)引起零概率问题,需要数据平滑(data smoothing)
数据平滑
调整最大似然估计的概率值,使零概率增值,使非零概率下调,消除零概率,目的是使测试样本的语言模型困惑度越小越好,困惑度的定义如下:对于一个平滑的n-gram,其概率为p ( w i | w i − 1 i − n + 1 ) p ( w i | w i − n + 1 i − 1 ) ,可以计算句子的概率p ( s ) = ∏ m + 1 i = 1 p ( w i | w i − 1 i − n + 1 ) p ( s ) = ∏ i = 1 m + 1 p ( w i | w i − n + 1 i − 1 ) ,假设测试语料T T 由l T l T 个句子构成( t 1 , ⋯ , t l T ) ( t 1 , ⋯ , t l T ) ,则整个测试集的概率为p ( T ) = ∏ l T i = 1 p ( t i ) p ( T ) = ∏ i = 1 l T p ( t i ) ,模型p ( w i | w i − 1 i − n + 1 ) p ( w i | w i − n + 1 i − 1 ) 对于测试语料的交叉熵:
H p ( T ) = − 1 W T log 2 p ( T ) H p ( T ) = − 1 W T log 2 p ( T )
其中W T W T 是测试样本T T 的词数,模型p p 的困惑度P P p ( T ) P P p ( T ) 定义为:
P P p ( T ) = 2 H p ( T ) P P p ( T ) = 2 H p ( T )
加1法additive smoothing
每种情况出现的次数加1,以2-gram为例:
p ( w i | w i − 1 ) = 1 + c ( w i − 1 w i ) ∑ w i [ 1 + c ( w i − 1 w i ) ] = 1 + c ( w i − 1 w i ) | V | + ∑ w i c ( w i − 1 w i ) p ( w i | w i − 1 ) = 1 + c ( w i − 1 w i ) ∑ w i [ 1 + c ( w i − 1 w i ) ] = 1 + c ( w i − 1 w i ) | V | + ∑ w i c ( w i − 1 w i )
V V 为词汇量,即全部可能的基元数
减值法/折扣法discounting
修改训练样本中事件的实际计数,使样本中实际出现的不同事件的概率之和小于1,剩余的概率量分配给未见概率
Good-Turing估计
假设 N N 是原来训练样本数据的大小, n r n r 是在样本 中正好出现 r r 次的事件的数目(此处事件为 n-gram), 即出现 1 1 次的n-gram有 n 1 n 1 个,出现 2 2 次的 n-gram 有 n 2 n 2 个, ......,出现 r r 次的有 n r n r 个,那么N = ∑ ∞ r = 1 n r r N = ∑ r = 1 ∞ n r r ,由于N = ∑ ∞ r = 0 n r r ∗ = ∑ ∞ r = 0 ( r + 1 ) n r + 1 N = ∑ r = 0 ∞ n r r ∗ = ∑ r = 0 ∞ ( r + 1 ) n r + 1 ,所以r ∗ = ( r + 1 ) n r + 1 n r r ∗ = ( r + 1 ) n r + 1 n r ,那么Good-Turing估计在样本中出现r r 次的时间的概率为:
p r = r ∗ N p r = r ∗ N
实际应用中,一般直接用n r + 1 n r + 1 代替E ( n r + 1 ) E ( n r + 1 ) ,n r n r 代替E ( n r ) E ( n r ) ,这样原训练样本中所有时间的概率之和为:
∑ r > 0 n r × p r = 1 − n 1 N < 1 ∑ r > 0 n r × p r = 1 − n 1 N < 1
因此,有n 1 N n 1 N 的剩余的概率量可以均分给所有未见事件r = 0 r = 0 ,Good-Turing估计适用于大词汇集产生的符合多项式分布的大量的观察数据,计算步骤如下:
统计n r n r ,计算r ∗ r ∗
计算概率p r p r
得到p 0 = n 1 N p 0 = n 1 N
计算没有出现的情况的次数n 0 = | V T | − ∑ r > 0 n r n 0 = | V T | − ∑ r > 0 n r
得到那些零概率的概率p 0 n 0 p 0 n 0 ,例如在2-gram中就是那些在历史基元确定的情况下当前基元没有发生的那些情况
此时那些概率和不为0,最后一步为归一化
^ p r = p r ∑ r p r p ^ r = p r ∑ r p r
Back-off后备/后退方法
当某一事件在样本中出现的频率大于阈值K K (通常取K为0或1)时,运用最大似然估计的减值法来估计其概率,否则使用低阶的,即(n-1)gram的概率替代n-gram概率,这种代替需要受归一化因子α α 的作用,也就是对于每个计数r > 0 r > 0 的n元文法的出现次数减值,把因减值而节省下来的剩余概率根据低阶的(n-1)gram分配给未见事件,下面以二元文法为例,对于一个出现次数为r = c ( w i i − 1 ) r = c ( w i − 1 i ) 的2元语法w i i − 1 w i − 1 i ,使用如下公式计算修正的概率:
p k a t z ( w i | w i − 1 ) = { d r C ( w i − 1 w i ) C ( w i − 1 ) C ( w i − 1 w i ) = r > 0 α ( w i − 1 ) p M L ( w i ) C ( w i − 1 w i ) = 0 p k a t z ( w i | w i − 1 ) = { d r C ( w i − 1 w i ) C ( w i − 1 ) C ( w i − 1 w i ) = r > 0 α ( w i − 1 ) p M L ( w i ) C ( w i − 1 w i ) = 0
其中p M L ( w i ) p M L ( w i ) 表示w i w i 的最大似然估计概率,这个公式的意思是所有具有非零计数r r 的2元语法都根据折扣率d r ( 0 < d r < 1 ) d r ( 0 < d r < 1 ) 被减值,折扣率近似等于r ∗ r r ∗ r ,减值由Good-Turing估计方法预测,下面是α ( w i − 1 ) α ( w i − 1 ) 的求法:
∑ w i : r = 0 α ( w i − 1 ) p M L ( w i ) + ∑ w i : r > 0 p k a t z ( w i | w i − 1 ) = 1 α ( w i − 1 ) = 1 − ∑ w i : r > 0 p k a t z ( w i | w i − 1 ) ∑ w i : r = 0 p M L ( w i ) ∑ w i : r = 0 α ( w i − 1 ) p M L ( w i ) + ∑ w i : r > 0 p k a t z ( w i | w i − 1 ) = 1 α ( w i − 1 ) = 1 − ∑ w i : r > 0 p k a t z ( w i | w i − 1 ) ∑ w i : r = 0 p M L ( w i )
绝对减值法Absolute discounting
从每个计数r r 中减去同样的量,剩余的概率量由未见事件平分,设R R 为所有可能事件的数目(当事件为n-gram时,如果统计基元为词,且词汇集的大小为L L ,则R = L n R = L n ),那么,样本出现了r r 次的事件的概率可以由如下公式估计:
p r = { r − b N r > 0 b ( R − n 0 ) N n 0 r = 0 p r = { r − b N r > 0 b ( R − n 0 ) N n 0 r = 0
其中n 0 n 0 为样本中未出现的事件的数目,b b 为减去的常量,b ≤ 1 , b ( R − n 0 ) / N b ≤ 1 , b ( R − n 0 ) / N 是由于减值而产生的概率量,N N 为样本中出现了r r 次的事件总次数:n r × r n r × r ,其中b b 为自由参数,可以通过留存数据的方法求得b b 的上限为:
b ≤ n 1 n 1 + 2 n 2 < 1 b ≤ n 1 n 1 + 2 n 2 < 1
线性减值法
从每个计数r r 中减去与该计数成正比的量,剩余概率量α α 被n 0 n 0 个未见事件均分
p r = { ( 1 − α ) r N r > 0 α n 0 r = 0 p r = { ( 1 − α ) r N r > 0 α n 0 r = 0
自由参数α α 的优化值为n 1 N n 1 N
四种减值法的比较
Good-Turing 法:对非0事件按公式削减出现的次
数,节留出来的概率均分给0概率事件。
Katz 后退法:对非0事件按Good-Turing法计算减
值,节留出来的概率按低阶分布分给0概率事件。
绝对减值法:对非0事件无条件削减某一固定的出
现次数值,节留出来的概率均分给0概率事件。
线性减值法:对非0事件根据出现次数按比例削减
次数值,节留出来的概率均分给0概率事件。
删除插值法Deleted interpolation
从低阶语法估计高阶语法,即当3-gram的值不能从训练数据中准确估计时,用2-gram来替代,同样,当2-gram的值不能从训练语料中准确估计时,可以用1-gram的值来代替,插值公式:
p ( w 3 | w 1 w 2 ) = λ 3 p ′ ( w 3 | w 1 w 2 ) + λ 2 p ′ ( w 3 | w 2 ) + λ 1 p ′ ( w 3 ) p ( w 3 | w 1 w 2 ) = λ 3 p ′ ( w 3 | w 1 w 2 ) + λ 2 p ′ ( w 3 | w 2 ) + λ 1 p ′ ( w 3 )
其中λ 1 + λ 2 + λ 3 = 1 λ 1 + λ 2 + λ 3 = 1 ,λ 1 , λ 2 , λ 3 λ 1 , λ 2 , λ 3 的确定:将训练语料分为两部分,即从原始语料中删除一部分作为留存数据,第一部分用于估计p ′ ( w 3 | w 1 w 2 ) + p ′ ( w 3 | w 2 ) + p ′ ( w 3 ) p ′ ( w 3 | w 1 w 2 ) + p ′ ( w 3 | w 2 ) + p ′ ( w 3 ) ,第二部分用于计算λ 1 , λ 2 , λ 3 λ 1 , λ 2 , λ 3 ,使得语言模型对留存数据的困惑度最小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异