N元模型(N-Gram Model)是一种常用的序列建模方法,尤其是在处理数据稀疏问题时。该模型基于马尔可夫假设,即假设当前词的生成只依赖于其前面的 N − 1 N-1 N−1 个词。
N元模型的核心思想是使用前面 N − 1 N-1 N−1 个词的历史信息来估计当前词的条件概率,对于一个 N元模型,条件概率可以表示为:
p ( x t ∣ x 1 : ( t − 1 ) ) ≈ p ( x t ∣ x t − ( N − 1 ) : t − 1 ) p(x_t | \mathbf{x}_{1:(t-1)}) \approx p(x_t | x_{t-(N-1):t-1}) p(xt∣x1:(t−1))≈p(xt∣xt−(N−1):t−1)其中 x t − ( N − 1 ) : t − 1 x_{t-(N-1):t-1} xt−(N−1):t−1 表示从 x t − ( N − 1 ) x_{t-(N-1)} xt−(N−1) 到 x t − 1 x_{t-1} xt−1 的 N − 1 N-1 N−1 个词的序列。
这种马尔可夫性质的假设简化了概率建模的复杂性,但也带来了数据稀疏性的问题,特别是当 N 较大时,训练数据中包含的具体组合可能非常有限。为了解决数据稀疏问题,常常使用平滑技术(smoothing)来给没有出现在训练数据中的组合赋予一定的先验概率。加法平滑是一种常见的平滑技术,它通过在计算条件概率时加上一个小的常数 δ \delta δ,来避免分母为零的情况。
定义: 一元模型是N元统计模型中的特例,其中每个词的生成概率独立于其他词,无关上下文。
建立模型:
一元模型中每个词在序列中的出现是独立的,对于给定的序列 x 1 : T \mathbf{x}_{1:T} x1:T,其概率为:
p ( x 1 : T ; θ ) = ∏ t = 1 T p ( x t ) = ∏ k = 1 ∣ V ∣ θ k m k p(\mathbf{x}_{1:T}; \boldsymbol{\theta}) = \prod_{t=1}^{T} p(x_t)= \prod_{k=1}^{|V|} \theta_k^{m_k} p(x1:T;θ)=t=1∏Tp(xt)=k=1∏∣V∣θkmk其中, p ( x t ) p(x_t) p(xt) 是词 x t x_t xt 在整个词表中出现的概率。
一元模型的最大似然估计可以转化为约束优化问题
目标: 通过最大似然估计确定多项分布参数,使整个训练集的似然最大化。
约束优化: 引入拉格朗日乘子,得到频率估计。
具体过程
对数似然函数:
对于一组训练集 { x 1 : T n ( n ) } n = 1 N ′ \{\mathbf{x}^{(n)}_{1:T_n}\}_{n=1}^{N'} {x1:Tn(n)}n=1N′,对数似然函数为:
log ( ∏ n = 1 N ′ p ( x 1 : T n ( n ) ; θ ) ) = log ∏ k = 1 ∣ V ∣ θ k m k = ∑ k = 1 ∣ V ∣ m k log θ k \log \left( \prod_{n=1}^{N'} p(\mathbf{x}^{(n)}_{1:T_n}; \boldsymbol{\theta}) \right) = \log\prod_{k=1}^{|V|} \theta_k^{m_k}= \sum_{k=1}^{|V|} m_k \log \theta_k log n=1∏N′p(x1:Tn(n);θ) =logk=1∏∣V∣θkmk=k=1∑∣V∣mklogθk
其中, m k m_k mk 是第 k k k 个词在整个训练集中出现的次数。
最大似然估计问题:
这是一个最大似然估计问题,我们需要优化参数 θ \boldsymbol{\theta} θ 以最大化对数似然函数。
引入拉格朗日乘子:
引入拉格朗日乘子 λ \lambda λ,定义拉格朗日函数 Λ ( θ , λ ) \Lambda(\boldsymbol{\theta}, \lambda) Λ(θ,λ) 为:
Λ ( θ , λ ) = ∑ k = 1 ∣ V ∣ m k log θ k + λ ( ∑ k = 1 ∣ V ∣ θ k − 1 ) \Lambda(\boldsymbol{\theta}, \lambda) = \sum_{k=1}^{|V|} m_k \log \theta_k + \lambda \left( \sum_{k=1}^{|V|} \theta_k - 1 \right) Λ(θ,λ)=k=1∑∣V∣mklogθk+λ k=1∑∣V∣θk−1
对参数 θ k \theta_k θk 和 λ \lambda λ 分别求偏导数,并令其为零: ∂ Λ ( θ , λ ) ∂ θ k = m k θ k + λ = 0 , k = 1 , 2 , … , ∣ V ∣ \frac{\partial \Lambda(\boldsymbol{\theta}, \lambda)}{\partial \theta_k} = \frac{m_k}{\theta_k} + \lambda = 0, \quad k = 1, 2,… , |V| ∂θk∂Λ(θ,λ)=θkmk+λ=0,k=1,2,…,∣V∣ ∂ Λ ( θ , λ ) ∂ λ = ∑ k = 1 ∣ V ∣ θ k − 1 = 0 \frac{\partial \Lambda(\boldsymbol{\theta}, \lambda)}{\partial \lambda} = \sum_{k=1}^{|V|} \theta_k - 1 = 0 ∂λ∂Λ(θ,λ)=k=1∑∣V∣θk−1=0进一步求解得到 λ = − ∑ k = 1 ∣ V ∣ m k \lambda = -\sum_{k=1}^{|V|} m_k λ=−∑k=1∣V∣mk 和 θ k = m k m ˉ \theta_k = \frac{m_k}{\bar{m}} θk=mˉmk,其中 m ˉ = ∑ k ′ = 1 ∣ V ∣ m k ′ \bar{m} = \sum_{k'=1}^{|V|} m_{k'} mˉ=∑k′=1∣V∣mk′ 是文档集合的长度。
在 N 元模型中,条件概率 p ( x t ∣ x t − N + 1 : t − 1 ) p(x_t | x_{t-N+1:t-1}) p(xt∣xt−N+1:t−1) 表示在给定前面 N − 1 N-1 N−1 个词的情况下,第 t t t 个词出现的概率。这个概率可以通过最大似然估计得到:
p ( x t ∣ x t − N + 1 : t − 1 ) = m ( x t − N + 1 : t ) m ( x t − N + 1 : t − 1 ) p(x_t | x_{t-N+1:t-1}) = \frac{m(x_{t-N+1:t})}{m(x_{t-N+1:t-1})} p(xt∣xt−N+1:t−1)=m(xt−N+1:t−1)m(xt−N+1:t)
其中 m ( x t − N + 1 : t ) m(x_{t-N+1:t}) m(xt−N+1:t)表示在数据集中序列 x t − N + 1 : t x_{t-N+1:t} xt−N+1:t 出现的次数,而 m ( x t − N + 1 : t − 1 ) m(x_{t-N+1:t-1}) m(xt−N+1:t−1)表示在数据集中序列 x t − N + 1 : t − 1 x_{t-N+1:t-1} xt−N+1:t−1 出现的次数。
N元模型面临数据稀疏问题,尤其是在训练数据集相对较小的情况下。数据稀疏问题指的是由于训练样本不足而导致模型对一些可能出现但未在训练集中观察到的N元组合的概率估计为零,这会影响模型的泛化能力。在自然语言处理中,这一问题尤为显著,因为大多数自然语言中的词汇服从Zipf定律,即出现频率最高的单词远多于其他单词。
平滑技术是解决数据稀疏问题的一种方法,其基本思想是通过分配一些概率质量给未见过的事件,以减轻模型对未见事件的过度惩罚。下面介绍一些常见的平滑技术:
加法平滑(Add-One Smoothing):
加法平滑是一种简单而直观的平滑技术,通过在概率估计中添加一个小的常数 δ \delta δ 来避免零概率问题。对于N元模型中的条件概率,加法平滑的计算公式为:
p ( x t ∣ x ( t − N + 1 ) : ( t − 1 ) ) = m ( x ( t − N + 1 ) : t ) + δ m ( x ( t − N + 1 ) : ( t − 1 ) ) + δ ∣ V ∣ p(x_t | \mathbf{x}_{(t-N+1):(t-1)}) = \frac{m(\mathbf{x}_{(t-N+1):t}) + \delta}{m(\mathbf{x}_{(t-N+1):(t-1)}) + \delta |V|} p(xt∣x(t−N+1):(t−1))=m(x(t−N+1):(t−1))+δ∣V∣m(x(t−N+1):t)+δ
其中常数 δ \delta δ 在0到1之间取值,取 δ = 1 \delta = 1 δ=1时称为加1平滑。
Good-Turing平滑:
Good-Turing平滑是一种更复杂但更有效的平滑技术,根据观察到的频率和未观察到的事件的期望频率进行调整。它对低频事件进行加权,减小高频事件的估计。这个方法要求对训练数据进行频率分布统计。
Kneser-Ney平滑:
Kneser-Ney平滑是一种高级的平滑技术,特别适用于N元模型。它考虑了N-1元前缀和N元组合的频率,通过递归地考虑更短的前缀来提高模型的性能。