【深度学习】序列生成模型(三):N元统计模型

2024-07-30 11:26:59 浏览数 (2)

N元统计模型

  N元模型(N-Gram Model)是一种常用的序列建模方法,尤其是在处理数据稀疏问题时。该模型基于马尔可夫假设,即假设当前词的生成只依赖于其前面的

N-1

个词。   N元模型的核心思想是使用前面

N-1

个词的历史信息来估计当前词的条件概率,对于一个 N元模型,条件概率可以表示为:

p(x_t | mathbf{x}_{1:(t-1)}) approx p(x_t | x_{t-(N-1):t-1})

其中

x_{t-(N-1):t-1}

表示从

x_{t-(N-1)}

x_{t-1}

N-1

个词的序列。

N = 1

时,称为一元(Unigram)模型。

  • 每个词的生成只与它自身有关,与前面的任何词无关。

N = 2

时,称为二元(Bigram)模型。

  • 每个词的生成仅依赖于其前一个词。

N = 3

时,称为三元(Trigram)模型。

  • 每个词的生成依赖于其前两个词。

  • 以此类推,当
N

增大时,模型考虑的历史信息也随之增加。

  这种马尔可夫性质的假设简化了概率建模的复杂性,但也带来了数据稀疏性的问题,特别是当 N 较大时,训练数据中包含的具体组合可能非常有限。为了解决数据稀疏问题,常常使用平滑技术(smoothing)来给没有出现在训练数据中的组合赋予一定的先验概率。加法平滑是一种常见的平滑技术,它通过在计算条件概率时加上一个小的常数

delta

,来避免分母为零的情况。

1. 一元模型

1.1 概述
  • 定义: 一元模型是N元统计模型中的特例,其中每个词的生成概率独立于其他词,无关上下文。
  • 建立模型:   一元模型中每个词在序列中的出现是独立的,对于给定的序列
mathbf{x}_{1:T}

,其概率为:

p(mathbf{x}_{1:T}; boldsymbol{theta}) = prod_{t=1}^{T} p(x_t)= prod_{k=1}^{|V|} theta_k^{m_k}

其中,

p(x_t)

是词

x_t

在整个词表中出现的概率。

1.2 生成概率
  • 多项分布假设: 词的生成概率符合多项分布,参数为每个词的概率。   在一元模型中,每个词的概率仅取决于该词在整个词表中的出现频率。这可以用多项分布来建模,其中
boldsymbol{theta} = [theta_1, theta_2, ldots, theta_{|V|}]

是多项分布的参数,表示每个词在序列中的选择概率。

1.3 最大似然估计
  • 一元模型的最大似然估计可以转化为约束优化问题
    • 目标: 通过最大似然估计确定多项分布参数,使整个训练集的似然最大化。
    • 约束优化: 引入拉格朗日乘子,得到频率估计。
  • 具体过程
    • 对数似然函数: 对于一组训练集
    {mathbf{x}^{(n)}_{1:T_n}}_{n=1}^{N'}

    ,对数似然函数为:

    log left( prod_{n=1}^{N'} p(mathbf{x}^{(n)}_{1:T_n}; boldsymbol{theta}) right) = logprod_{k=1}^{|V|} theta_k^{m_k}= sum_{k=1}^{|V|} m_k log theta_k

    其中,

    m_k

    是第

    k

    个词在整个训练集中出现的次数。

    • 最大似然估计问题:   这是一个最大似然估计问题,我们需要优化参数
    boldsymbol{theta}

    以最大化对数似然函数。

    • 引入拉格朗日乘子: 引入拉格朗日乘子
    lambda

    ,定义拉格朗日函数

    Lambda(boldsymbol{theta}, lambda)

    为:

Lambda(boldsymbol{theta}, lambda) = sum_{k=1}^{|V|} m_k log theta_k lambda left( sum_{k=1}^{|V|} theta_k - 1 right)
theta_k

lambda

分别求偏导数,并令其为零:

frac{partial Lambda(boldsymbol{theta}, lambda)}{partial theta_k} = frac{m_k}{theta_k} lambda = 0, quad k = 1, 2,… , |V|
frac{partial Lambda(boldsymbol{theta}, lambda)}{partial lambda} = sum_{k=1}^{|V|} theta_k - 1 = 0

进一步求解得到

lambda = -sum_{k=1}^{|V|} m_k

theta_k = frac{m_k}{bar{m}}

,其中

bar{m} = sum_{k'=1}^{|V|} m_{k'}

是文档集合的长度。

  • 最终结果:   最终,一元模型的最大似然估计等价于频率估计,参数
theta_k

的估计值为

frac{m_k}{bar{m}}

2. N元模型

  在 N 元模型中,条件概率

p(x_t | x_{t-N 1:t-1})

表示在给定前面

N-1

个词的情况下,第

t

个词出现的概率。这个概率可以通过最大似然估计得到:

p(x_t | x_{t-N 1:t-1}) = frac{m(x_{t-N 1:t})}{m(x_{t-N 1:t-1})}

其中

m(x_{t-N 1:t})

表示在数据集中序列

x_{t-N 1:t}

出现的次数,而

m(x_{t-N 1:t-1})

表示在数据集中序列

x_{t-N 1:t-1}

出现的次数。

3. 平滑技术

3.1 数据稀疏问题
  • 挑战: N元模型面临数据稀疏问题,尤其是对未见N元组合。 数据稀疏导致模型对未见N元组合的情况下概率为零。
3.2 平滑技术

  N元模型面临数据稀疏问题,尤其是在训练数据集相对较小的情况下。数据稀疏问题指的是由于训练样本不足而导致模型对一些可能出现但未在训练集中观察到的N元组合的概率估计为零,这会影响模型的泛化能力。在自然语言处理中,这一问题尤为显著,因为大多数自然语言中的词汇服从Zipf定律,即出现频率最高的单词远多于其他单词平滑技术是解决数据稀疏问题的一种方法,其基本思想是通过分配一些概率质量给未见过的事件,以减轻模型对未见事件的过度惩罚。下面介绍一些常见的平滑技术:

  1. 加法平滑(Add-One Smoothing):   加法平滑是一种简单而直观的平滑技术,通过在概率估计中添加一个小的常数
delta

来避免零概率问题。对于N元模型中的条件概率,加法平滑的计算公式为:

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|}

其中常数

delta

在0到1之间取值,取

delta = 1

时称为加1平滑

  1. Good-Turing平滑:   Good-Turing平滑是一种更复杂但更有效的平滑技术,根据观察到的频率和未观察到的事件的期望频率进行调整。它对低频事件进行加权,减小高频事件的估计。这个方法要求对训练数据进行频率分布统计。
  2. Kneser-Ney平滑:   Kneser-Ney平滑是一种高级的平滑技术,特别适用于N元模型。它考虑了N-1元前缀和N元组合的频率,通过递归地考虑更短的前缀来提高模型的性能。

4. 应用

  • 广泛应用: N元模型在自然语言处理领域中得到广泛应用,包括语音识别、机器翻译、拼音输入法等。

0 人点赞