首页 > 其他分享 >[NLP复习笔记] N-gram 及基本平滑方法

[NLP复习笔记] N-gram 及基本平滑方法

时间:2024-01-05 16:12:16浏览次数:20  
标签:dots NLP 概率 复习 text 模型 单词 gram

1. N-gram 模型

1.1 N-gram 模型介绍

\(\text{N-gram}\) 是一种基于统计语言模型的算法,用于预测文本中的单词,其中 \(\text{N}\) 一般指的是序列中的单词数量。其基本思想是将文本内容进行大小为 \(\text{N}\) 的滑动窗口操作来计算概率。

例如:

  • 当 \(\text{N}=1\) 时,模型被称为"unigram",即单词被当作独立的个体来考虑。

  • 当 \(\text{N}=2\) 时,模型被称为"bigram",此时考虑的是两个连续单词的序列。

  • 当 \(\text{N}=3\) 时,称为"trigram",考虑的就是连续三个单词的序列。


1.2 链式法则

假设有一个由 \(m\) 个单词组成的序列(句子),其概率定义为:

\[P(w_1, w_2, \dots , w_m) \]

其中 \(w_i\) 表示序列中的单词,\(i = 1, 2, \dots , m\)。

我们都知道条件概率公式:

\[P(B | A) = \frac{P(A, B)}{P(A)} \]

可以将条件概率改写为:

\[P(A, B) = P(A)P(B|A) \]

由此可以推广到 \(m\) 个变量的情况,也就是此时\(m\) 个单词组成的序列的情况:

\[P(w_1, w_2, \dots , w_m) = P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)\dots P(w_m|w_1, \dots, w_{m-1}) \]

这就是 链式法则。一个由 \(m\) 个单词组成的句子概率表示可以化简为如下形式:

\[P(w_1, w_2, \dots , w_m) = \prod_{i=1}^{m}P(w_i | w_1, w_2, \dots, w_{i-1}) \]


1.3 马尔科夫假设

前面由链式法则得到的句子概率表示,显然是难以计算的。所以,我们有必要引入 马尔可夫假设 (\(\text{Markov Assumption}\)).

对于一个句子的概率 \(P(w_1, w_2, \dots , w_m)\) ,一般的链式法则需要考虑到最开始的单词,而马尔科夫假设 只考虑前面的 \(k\) 个有限数量的单词。我们可以令 \(k = n - 1\),因此有如下形式化表示:

\[P(w_i | w_1, w_2, \dots, w_{i-1}) \approx P(w_i|w_{i-n+1}, \dots, w_{i-1}) \]

由此,我们可以得到一元模型,二元模型,三元模型的定义:

  • 当 \(\text{N}=1\) 时,即一元模型(unigram model):

    \[P(w_1, w_2, \dots, w_m) = \prod_{i=1}^m P(w_i) \]

  • 当 \(\text{N}=2\) 时,即二元模型(bigram model):

    \[P(w_1, w_2, \dots, w_m) = \prod_{i=1}^m P(w_i|w_{i-1}) \]

  • 当 \(\text{N}=3\) 时,即三元模型(trigram model):

    \[P(w_1, w_2, \dots, w_m) = \prod_{i=1}^m P(w_i|w_{i-2}, w_{i-1}) \]

以此类推,可以扩展到四元模型,五元模型。




2. N-gram 概率计算

2.1 极大似然估计

极大似然估计(\(\text{Maximum Likelihood Estimation,MLE}\))是统计学中用于从样本数据估计模型参数的一种方法。也称为最大似然估计。

对于 \(\text{N-gram}\) 概率计算问题,我们通过从语料库中获取计数并将计数归一化以使它们位于 0 和 1 之间来获得 \(\text{N-gram}\) 模型参数的 \(\text{MLE}\) 估计。

我们以一元语法模型为例,一个二元组的概率可表示为:

\[P(w_i | w_{i - 1}) = \frac{C(w_{i-1}, w_i)}{C(w_{i-1})} \]

其中 \(C\) 表示统计的个数。

推广到 \(\text{N-gram}\) 的情况:

\[P(w_i|w_{i-n+1}, \dots, w_{i-1}) = \frac{C(w_{i-n+1}, \dots , w_i)}{C(w_{i-n+1}, \dots , w_{i-1}} \]


2.2 典型示例

用二元语法进行概率计算,采用 \(\text{MLE}\) 估计。在计算之间,我们首先需要在每个句子的开头添加一个特殊的符号 \(\text{<s>}\),为我们提供第一个单词的二元上下文。 我们还需要一个特殊的结束符号 \(\text{</s>}\)

注意

在计算概率时,采用传统的乘法,也许会导致 下溢出(underflow),此时就需要转换为对数形式进行计算:

\[\text{log}(p_1 \times p_2 \times p_3) = \text{log}p_1 + \text{log}p_2 + \text{log}p_3 \]

即:

\[p_1 \times p_2 \times p_3 = \text{exp}(\text{log}p_1 + \text{log}p_2 + \text{log}p_3) \]

概率(根据定义)小于或等于 1,所以我们相乘的概率越多,乘积就越小。 将足够多的 n-gram 相乘会导致数值下溢。 通过使用对数概率而不是原始概率,得到的数字并不那么小。




3. 困惑度

困惑度(Perplexity) 是衡量语言模型性能的一种指标,其衡量的是模型预测一个样本序列的能力有多好。适用于评估诸如 \(\text{N-gram}\) 模型、循环神经网络(RNN)以及其他更现代的模型如Transformer和BERT等。

一个好的语言模型是可以最优地预测未遇到过的测试集,使得句子的概率最大化。困惑度是测试集的逆向概率,并由单词总数 N 进行归一化处理。

困惑度有如下公式:

\[\begin{split} \text{PP}(W) &= P(w_1, w_2, \dots, w_N)^{ - \frac{1}{N}} \\ &= \sqrt[N]{\frac{1}{P(w_1, w_2, \dots, w_N)}} \end{split} \]

显然 困惑度越小即则概率越大

若计算的是一元困惑度,则表示为:

\[\text{PP}(W) = \sqrt[N]{\prod_{i=1}^N \frac{1}{P(w_i)}} \]

若计算的是二元困惑度,则表示为:

\[\text{PP}(W) = \sqrt[N]{\prod_{i=1}^N \frac{1}{P(w_i | w_{i-1})}} \]

在理想情况下,如果模型对每个单词的预测都是完美的,则困惑度为 1。通常情况下,困惑度会大于 1,困惑度值越小表示模型预测能力越好




4. 平滑方法

在NLP中,数据平滑技术通常用来解决极大似然估计遇到的零概率问题。

4.1 加一平滑

加一平滑(Additive smoothing),也称为拉普拉斯平滑(Laplace smoothing),核心思想是给每个统计单元出现的次数加一,此时便不会有零概率值。

最大似然估计如下:

\[P_{\text{MLE}}(w_i | w_{i-1}) = \frac{C(w_i, w_{i-1})}{w_{i-1}} \]

经过加一平滑后,变为:

\[P_{\text{Add-1}}(w_i | w_{i-1}) = \frac{C(w_i, w_{i-1}) + 1}{C(w_{i-1}) + |V|} \]

其中 \(|V|\) 为词汇表大小,也就是模型考虑的不同的词的数量。

不过,拉普拉斯平滑方法比较粗糙,尤其是在词汇量很大或者数据集很大的时候,每次都增加一个单位可能会导致概率估计偏向于不太准确。


4.2 线性插值平滑

线性插值平滑(Interpolation smoothing)基本思想就是利用低元N-grams模型对高元N-grams模型进行线性插值。

\[P_{\text{Int}}(w_i | w_{i-1}, w_{i-2}) = \lambda_3 P_{\text{MLE}}(w_i | w_{i-1}, w_{i-2}) + \lambda_2 P_{\text{MLE}}(w_i | w_{i-1}) + \lambda_1 P_{\text{MLE}}(w_i) \]

\[\lambda_3 + \lambda_2 + \lambda_1 = 1, \quad 0 \le \lambda_i \le 1 \]


4.3 回退平滑

回退算法(Katz smoothing)又称为 Back-off 回退。当有足够计数时,使用N元语法;否则使用N-1,N-2,… ,bigrams, unigrams。

\[P_{\text{Katz}} = \begin{cases} d_{w_{i-n+1}\cdots w_i}\frac{C(w_{i-n+1}\dots w_i)}{C(w_{i-n+1}\dots w_{i-1})}, & \text{if}\; C(w_{i-n+1}\dots w_i) > k \\ \alpha_{w_{i-n+1}\cdots w_i}P_{\text{Katz}}(w_i | w_{i-n+2}\dots w_{i-1}) & \text{else} \end{cases} \]

其中 \(\alpha\) 和 \(d\) 为归一化参数,保证 \(\sum P_{\text{Katz}} = 1\)。\(k\) 一般选择为0,也可以选其它的值。




参考

自然语言处理中N-Gram模型介绍

了解N-Gram模型

基于统计语言模型的平滑算法

NLP中的Good-Turing与Katz平滑方法

标签:dots,NLP,概率,复习,text,模型,单词,gram
From: https://www.cnblogs.com/MAKISE004/p/17947487

相关文章

  • (五十)C#编程基础复习——C#堆栈
    在C#中,堆栈类表示一个后进先出的对象集合,当你需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。一、堆栈类中的属性下表列出了堆栈类中的一些常用的属性二、堆栈类中的方法下面列出了堆栈类中一些常用的方法示例......
  • 无涯教程-Seaborn - 直方图(Histogram)
    直方图表示数据分布,方法是沿数据范围形成条形图,然后绘制条形图以显示落入每个条形图的观察数。Seaborn附带了一些数据集,在前几章中只使用了很少的数据集。无涯教程已经学习了如何加载数据集以及如何查找可用数据集列表。importpandasaspdimportseabornassbfrommatplot......
  • 软件工程 之 (XMUT)Java期末复习题及答案-选择题
    软件工程实用案例教程https://www.cnblogs.com/IvanKK/p/17712702.htmlJava期末复习题及答案https://www.cnblogs.com/IvanKK/p/17712704.html计算机网络复习题库https://www.cnblogs.com/IvanKK/p/17712719.html(XMUT)Java期末复习题及答案-选择题分数1作者张峰单位......
  • vue 2实战系列 —— 复习Vue
    复习Vue近期需要接手vue2的项目,许久未写,语法有些陌生。本篇将较全面复习vue2。Tip:项目是基于ant-design-vue-proant-design-vue-pro由于cms是基于这个项目开发的,所以笔者就将其下载下来。下载后运行//按照依赖yarninstall//本地启动yarnrunserve根据提......
  • 算法复习
    目录渐近记号O记号Ω记号Θ记号分治策略分治算法的效率分析迭代法求运行时间递归树法求运行时间主定理法求运行时间渐近记号O记号渐近上界记号O(大O)渐近地给出了一个函数在常量因子内的上界:O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}f(n......
  • 生物统计复习
    1.绪论1.1统计学研究数据的收集、整理、分析和解释的科学,是处理数据中变异性的科学和艺术。统计分析可分为统计描述和统计推断两部分统计描述:用统计图表、统计指标或几个特征数描述资料的数据特征和分布规律统计推断:用样本信息来推断总体特征目的:求得可靠的结......
  • ASP.NET Core 6(.NET 6) Program.cs中使用读取appsettings.json配置文件
    ​ 在ASP.NETCore6(.NET6)中,可以使用Json格式的appsettings.json配置文件来配置应用程序,用于存储应用程序的配置信息,方便我们灵活的配置应用程序。本文主要介绍Program.cs中,使用读取appsettings.json配置文件的方法,以及相关的示例代码。1、通过配置实体类的方式1)配置实体......
  • java基础语言期末复习
    一.类的封装1.类的封装是指将类的实现细节隐藏起来,仅向外部提供有限的接口进行访问。这样可以保护数据的安全性和完整性,同时也能够降低代码的耦合度。具体来说,类的封装可以通过以下方式实现:将类的成员变量设为私有属性,只能在类的内部访问。对于需要被外部访问的成员变量,可以......
  • 网络摄像头漏洞扫描工具 Ingram
    简介主要针对网络摄像头的漏洞扫描框架,目前已集成海康、大华、宇视、dlink等常见设备安装请在Linux或Mac系统使用,确保安装了3.8及以上版本的Python,尽量不要使用3.11,因为对许多包的兼容不是很好克隆该仓库:gitclonehttps://github.com/jorhelp/Ingram.git进入项目......
  • 2025考研指南丨考研复习计划
    2020考研指南丨考研复习计划2020-03-23   2019考研进入复试的尾声阶段,2020的考研学子已经准备好了武器准备战斗,今天安徽文都小编就为2020考研党准备一份考研日历吧。2019年3月份确定目标院校和专业根据自己学习的专业、学习基础、个人兴趣等因素,初步确定考......