type
status
date
slug
summary
tags
category
icon
password

8.3.1 学习语言模型

这里运用条件概率公式可以把联合概率展开
其中,由于各个概率相乘,且最小单位(也就是词频统计)是基于文本库的,如果先前没有这种组合,概率则会归零,严重影响计算
因此,我们可以采用拉普拉斯平滑(Laplace smoothing)
大概就是在分母加一个小常数,在概率本该为 0 的情况时转化为极小概率,避免归零

8.3.2 马尔可夫模型与 n 元词法

对于联合概率,我们可以利用条件概率展开
然而,也可以进行某种近似,这里给出三种概率公式,分别称为一元语法(unigram)、二元语法(bigram)、三元语法(trigram)

一元语法

每个词是独立的,不依赖上下文

二元语法

每个词只依赖它前一个词

三元语法

每个词只依赖它前两个词

8.3.3 自然语言统计

一些常常出现但没有很重要含义的词被称为停用词(stop words)
例如:the and of to,它们可以直接被过滤掉
通过绘制词频图,可以发现:词频以一种明确的方式迅速衰减。 将前几个单词作为例外消除后,剩余的所有单词大致遵循双对数坐标图上的一条直线
notion image
这代表单词频率满足齐普夫定律(Zipf’s law):
等价于:
其中: • :表示第 i 个最常用词的频率 • :是幂律分布中的指数参数 • :是常数项
这里再来对比一下不同词元模型的词元频率:
notion image
这张图中可以看出:
  1. unigram 之外,bigram 和 trigram 也遵循这个规律,只是指数 更小
  1. 高频的 bigram、trigram 词组没理论估计中随机排列组合的那么多,因此并非完全无序、随机,因而可以尝试通过模型来学习这些固定搭配
  1. trigram 中,很多词组出现次数极少,因而这里使用的拉普拉斯平滑对于概率分布有负面影响(把原本正常的概率稀释),应该尝试基于深度学习的模型

8.3.4 读取长序列数据

序列数据本质上是连续的,因此还需要考虑如何读取的问题
假设我们将使用神经网络来训练语言模型, 模型中的网络一次处理具有预定义长度 (例如 n 个时间步)的一个小批量序列。 现在的问题是如何随机生成一个小批量数据的特征和标签以供读取。
这里不同的偏移量会导致不同的划分,需要采用一些策略进行优化
比如使用随机偏移量进行划分,以获得 覆盖性(coverage)和 随机性(randomness)
notion image

8.3.4.1 随机采样 random sampling

✅ 方法:

  • 从整个原始序列中随机选择起始位置,然后截取一个长度为 n 的子序列作为样本。
  • 每次生成训练数据时都会重新随机抽样,保证训练数据的多样性。

🧠 特点:

  • 提高了覆盖度(coverage),因为不同轮训练中看到的子序列不同。
  • 有利于提高模型的泛化能力。
  • 缺点是:样本之间没有固定顺序,不能直接延续状态,比如 RNN 中的隐藏状态无法跨样本保留。

8.3.4.2 顺序分区 sequential partitioning

✅ 方法:

  • 将整个原始序列平均划分为多个不重叠的子序列
  • 每个子序列长度固定,例如每段都切出 n 个字符/词。
  • 每个 epoch 训练的数据划分是固定不变的。

🧠 特点:

  • 保持了样本之间的连续性,适合用于状态延续的模型(如 RNN 保持隐状态)。
  • 比较高效,不需要每次重新生成样本。
  • 缺点是:多次训练中看到的是同样的数据,缺乏随机性和覆盖度,容易过拟合。

8.3.5 小结

  • 语言模型是自然语言处理的关键。
  • n元语法通过截断相关性,为处理长序列提供了一种实用的模型。
  • 长序列存在一个问题:它们很少出现或者从不出现。
  • 齐普夫定律支配着单词的分布,这个分布不仅适用于一元语法,还适用于其他n元语法。
  • 通过拉普拉斯平滑法可以有效地处理结构丰富而频率不足的低频词词组。
  • 读取长序列的主要方式是随机采样和顺序分区。在迭代过程中,后者可以保证来自两个相邻的小批量中的子序列在原始序列上也是相邻的。
pytorch 项目8.1 序列模型
Loading...