n-gram语言模型|n-gram Language Model

📅 发布时间:2026/7/9 10:32:54 👁️ 浏览次数:
n-gram语言模型|n-gram Language Model
-----------------------------------------------------------------------------------------------这是我在我的网站中截取的文章有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn这里还有很多有关计算机的知识欢迎进行留言或者来我的网站进行留言作者正在学习斯坦福大学的CS224N课程。此文章的图片均来自该课程视频之后会继续更新斯坦福大学CS224N课程以及加上补充的知识让我们一起探讨NLP的世界----------------------------------------------------------------------------------------------第一节什么是语言模型在自然语言处理NLP的广阔领域中语言模型Language Modeling是最基础且最重要的核心任务之一。简单来说它的目标是让计算机能够理解和生成人类的语言序列。1. 核心任务预测下一个词语言模型的核心任务非常直观给定一段已经出现的词序列预测下一个可能出现的词是什么。想象一下当你输入一段话“The students opened their ____”作为一个具备语言直觉的人类你可能会立刻想到“books”、“laptops”、“exams”或者更具哲学意味的“minds”。语言模型的工作就是通过数学方式为所有可能的单词分配一个概率告诉你哪一个词在当前语境下最合理。图中展示了语言模型如何根据前文预测后续单词的概率分布。2. 数学形式化表达为了让计算机能够处理这个任务我们需要将其定义为数学概率模型。假设我们有一组词序列 x(1), x(2), ... , x(t)。我们的目标是计算下一个词 x(t1) 的概率分布。用条件概率公式表示为其中x(t1) 可以是词汇表 V {w1, ... , w|V|}$ 中的任意一个单词。任何能够计算出这个概率分布的系统都被称为语言模型。3. 为整段文本赋予概率除了预测下一个词语言模型还可以用来评估一整段文本出现的可能性。当你读到一句话时语言模型可以告诉你这句话在现实语言场景中“听起来有多自然”。根据概率论的链式法则 (Chain Rule)一个包含 T 个词的文本序列的联合概率可以分解为利用连乘符号可以简写为图中展示了利用条件概率乘积计算整段文本概率的数学推导过程。这意味着如果一个模型能够精准地预测“下一个词”它也就具备了衡量整段话逻辑合理性的能力。这正是后续我们讨论机器翻译、语音识别纠错以及自动文本生成等技术的核心基石。第二节n-gram 语言模型核心思想既然我们已经定义了语言模型的目标是计算条件概率接下来的问题是如何高效地学习和估算这些概率在深度学习普及之前最主流的解决方案就是n-gram 语言模型。1. 什么是 n-gramn-gram是指文本中 n 个连续单词组成的序列或称之为“分块”。根据 n 取值的不同我们有不同的称呼unigrams (1-gram): 单个单词如 the, students, opened。bigrams (2-gram): 连续的两个词如 the students, students opened。trigrams (3-gram): 连续三个词如 the students opened, students opened their。four-grams (4-gram): 连续四个词如 the students opened their。图中展示了在相同句子下不同 n 值所对应的单词分块方式。2. 马尔可夫假设 (Markov Assumption)在上一节中我们看到计算 P(x(t1) x(t), ... , x(1)) 需要考虑前面出现的所有词。然而在实际应用中随着序列变长计算和存储这个全量上下文的概率会变得极其困难。为了简化问题我们引入了马尔可夫假设 (Markov Assumption)我们假定当前词的出现概率只取决于它前面的 n-1 个词。如果是bigram模型当前词只受前一个词影响。如果是trigram模型当前词受前两个词影响。数学表达式如下3. 如何估算这些概率有了马尔可夫假设我们就可以通过在大规模语料库Corpus中统计不同词组出现的频率来近似计算条件概率。根据条件概率的定义简单来说就是用“n-gram 出现的总次数”除以“前 n-1 个词作为前缀出现的总次数”。图中详细展示了基于马尔可夫假设的条件概率定义及其统计近似公式。这种基于统计频率的方法非常直观如果在你的语料库里“students opened their books” 出现了 400 次而 “students opened their” 总共出现了 1000 次那么在该语料库下模型预测下一个词是 “books” 的概率就是 0.4。第三节n-gram 模型实例演练为了更直观地理解统计概率是如何运作的让我们代入一个具体的场景。假设我们正在训练一个4-gram 语言模型并试图预测句子 the students opened their ____ 的下一个词。1. 寻找预测条件根据我们上一节提到的马尔可夫假设4-gram 模型在预测下一个词时只会关注当前词之前的3 个词即 n-1 个词。因此模型会丢弃更远处的背景信息。例如即使原文是 As the proctor started the clock, the students opened their ____模型也会直接“无视”掉关于监考老师proctor和时钟clock的描述仅仅根据students opened their来进行计算。图中红线部分展示了被模型丢弃的远端上下文以及被保留的条件前缀。2. 基于语料库的统计计算假设我们在一个包含数百万句子的庞大语料库中进行统计得到了以下数据students opened their出现的总次数 1000次students opened their books出现的次数 400次students opened their exams出现的次数 100次根据极大似然估计MLE我们可以算出不同后续词的概率3. 这种“丢弃”合理吗在上面的例子中我们注意到一个潜在的问题丢弃“proctor监考老师”这个上下文是否明智如果上下文包含“监考老师”那么下一个词是exams的概率理应比books更高。但由于 n-gram 模型的窗口限制n4模型无法感知到较远位置的关键词从而可能做出次优的预测。这暴露了 n-gram 模型的一个核心矛盾增加n值可以保留更多上下文使预测更精准。减小n值模型更简单但容易丢失长距离的逻辑关联。然而单纯地增加 n 并不是万能药它会直接引出我们下一节要讨论的噩梦——稀疏性问题。第四节稀疏性问题与对策在理想情况下语料库越大我们的模型就越准。但在现实中无论语料库多么庞大n-gram 模型都会不可避免地撞上一面墙——稀疏性Sparsity。当 n 逐渐增大时特定词组出现的频率会迅速稀释导致数学计算陷入困境。1. 稀疏性问题 1分子为 0问题描述如果前缀 students opened their 在数据中出现过但 students opened theirw其中 w 是某个具体的词如 tablets从未出现过该怎么办由于 count 0模型会分配 P(w) 0。这意味着在模型看来这种情况在宇宙中是绝对不可能发生的。这显然不合理因为这仅仅是因为我们的训练数据没覆盖到而不是语言本身逻辑不通。部分解决方案平滑 (Smoothing)我们会给词汇表 V 中的每一个单词都加上一个极其微小的正数 delta。这样即使某个组合没见过它也会拥有一个微小但非零的概率。2. 稀疏性问题 2分母为 0问题描述如果连前缀 students opened their 本身都从未在训练数据中出现过呢此时分母为 0数学公式将无法计算我们甚至没法为一个新词 w 计算任何概率。部分解决方案回退 (Backoff)如果我们没见过 students opened their那我们就退而求其次只去查最近的两个词opened their。如果连这也没见过就只查 their。通过降低 n 的值来寻找匹配的统计数据。图中总结了两种稀疏性问题的表现及其对应的补救措施。3. n 值的权衡与限制你可能会想既然 n 越大上下文越清晰那我们用 10-gram 不行吗不幸的是增加n会使稀疏性问题呈指数级恶化。当 n 增大时特定序列出现的概率会变得极低模型体积也会因为要存储海量的组合计数而变得臃肿不堪。核心结论在实际应用中n 通常不能大于5。这是一个在“上下文捕捉能力”与“计算可行性”之间妥协的结果。第五节文本生成与模型评估既然语言模型能够预测下一个词的概率分布我们就可以利用它来“写文章”。这一过程被称为文本生成 (Text Generation)。1. 生成逻辑采样 (Sampling)利用 n-gram 模型生成文本的过程是一个循环迭代的过程输入初始语料给定一个初始上下文例如 today the。获取概率分布模型根据当前上下文计算词汇表中所有单词的概率。采样 (Sample)根据概率分布随机选择一个词概率越高被选中的机会越大。滚动更新将选中的词加入上下文滑动窗口继续预测下一个词。图中展示了模型根据 today the 得到的概率分布并采样选中了 price。随着窗口不断向右滑动模型会基于最新的 n-1 个词持续生成后续内容。这两张图展示了生成过程的连续性从预测 price 之后接着预测出 of再预测出 gold。2. 效果评估通顺但“无脑”当我们让一个基于大规模语料训练的 n-gram 模型自由发挥时会得到一个非常有趣的现象。图中展示了一段由 n-gram 模型生成的长文本示例。通过观察生成的文本我们可以得出两个核心结论惊人的语法正确性 (Grammatical)由于模型学习了大量局部词组搭配生成的短句往往非常符合语法习惯。严重的逻辑不连贯 (Incoherent)由于 n-gram 模型只能看到最近的几个词它会“转头就忘”。一旦生成的内容超过了窗口长度例如 4 或 5 个词前后的逻辑就会迅速脱钩导致整段话读起来不知所云。3. 迈向神经网络的桥梁n-gram 语言模型作为 NLP 历史上的功勋臣子虽然简单直观且易于解释但其稀疏性问题和有限的上下文窗口限制了它的进一步发展。为了解决这些痛点研究者们开始思考是否可以用连续向量词嵌入来解决稀疏性让模型理解词与词之间的相似性是否可以用神经网络来捕捉更长跨度的依赖关系这正是从传统的统计语言模型向现代深度学习模型如 RNN, Transformer跨越的关键动因。----------------------------------------------------------------------------------------------这是我在我的网站中截取的文章有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn这里还有很多有关计算机的知识欢迎进行留言或者来我的网站进行留言作者正在学习斯坦福大学的CS224N课程。此文章的图片均来自该课程视频之后会继续更新斯坦福大学CS224N课程以及加上补充的知识让我们一起探讨NLP的世界----------------------------------------------------------------------------------------------