如何准确计算词语概率:揭秘语言模型中普遍存在的“错误”

近年来,语言模型(LMs)在自然语言处理领域取得了巨大成功,其核心在于能够估计自然语言序列的概率分布。这种分布对于计算语言学研究中的困惑度和惊异度至关重要。虽然我们通常关心的是如何测量词语的这些值,但大多数语言模型实际上是基于子词进行操作的。尽管看起来很简单,但要根据一种单元的概率准确计算另一种单元的概率,需要格外小心。事实上,我们发现许多最近的语言学研究都错误地计算了这些值。

本文推导了计算词语概率的正确方法,重点介绍了依赖使用词首标记(bow)分词器的语言模型(例如 GPT 系列)时出现的问题。实证结果表明,纠正概率计算中普遍存在的“错误”会影响句子理解和词汇优化分析中的测量结果。

1. 引言

语言模型定义了概率分布。在接受语言数据训练后,这些模型可以用来估计字符序列 c ∈ C∗ 或上下文词 wt ∈ W 中词的概率,其中 w<t ∈ W ∗。虽然推导这种估计现在已经很少作为训练这种模型的明确目标,但这种用例在一些领域仍然至关重要。例如,估计字符序列的概率对于计算模型的困惑度是必要的,这是语言模型训练中的一个核心评价指标。估计一个词在上下文中的概率对于计算一个词的惊异度是必要的:− log p(wt | w<t),这是心理语言学和计算语言学中的一个重要值。

值得注意的是,大多数最近的语言模型都是在子词上运行的:经常一起出现的字符序列。这样做既是为了优化,也是为了效率。然而,子词并不一定构成实际的词,正如语言词典所定义的那样。至少从表面上看,从子词 p(s) 的概率分布转换为字符 p© 或词 p(w) 的概率分布似乎很简单。然而,一些技术细节很容易被忽视。例如,几个子词序列 s 可以映射到一个字符序列 c,这意味着准确计算 p© 应该边缘化这些选项。

在这项工作中,我们讨论了如何正确计算一个词的上下文概率:p(wt | w<t)。这个值的计算取决于用来定义语言模型词汇的分词器的选择。当使用词尾标记(eow)分词器时,计算 p(wt| w<t) 很简单。然而,当使用词首标记(bow)分词器时,正确计算这个值就不那么简单了。我们推导了这些分词方案的方法,我们将在图1中介绍。由于许多广泛使用的语言模型都采用了词首标记分词器(例如,GPT 模型、Pythia、Mistral),这突出了大多数最近的心理语言学和计算语言学工作在计算词语概率方面普遍存在的“错误”。

实证结果表明,纠正这种计算会影响先前两项实证分析的结果:一项是关于句子理解的,另一项是关于词汇的交际效率的。虽然这些研究的结论没有改变,但我们确实观察到,当使用正确的方法和有缺陷的方法计算词语概率时,测量结果之间存在统计学意义上的显著差异。我们得出结论,这种方法的选择有可能影响实证分析,未来的工作应该采用我们的修正。

2. 什么是词?

尽管经过了几十年的讨论和辩论,但对于什么是词,并没有一个统一的、被广泛接受的定义。通常,定义是针对语言中的某些系统做出的,例如其拼写法、音系学或语法。作为一个具体的例子,人们可以使用一种语言的声音系统来划分词语,假设它们划分了某些音系过程(如元音和谐)运作的范围。或者,人们可以将词语定义为语法元素(例如,词根加词缀),这些元素具有凝聚力,以固定的顺序出现,并具有连贯的意义。值得注意的是,语法词和音系词之间并不是一一对应的关系。例如,英语中的连字符元素,如 editor-in-chief 或 mother-in-law,通常被分析为一个包含多个音系词的语法词。

我们在此不讨论这个更广泛的问题。虽然我们使用的是自然语言处理应用程序中常见的定义——词语是按拼写法定义的——但我们的方法只假设存在一组确定性的规则,用于将字符串分割成词语。

3. 词语及其分布

令 W 为一个词典——一种语言中所有词语的(可能是无限的)集合——而 w ∈ W 是这个词典中的一个词语。此外,令 w ∈ W ∗ 为一个词语序列;W ∗ 表示所有有限长度词语序列的集合。现在,假设分布 p 描述了这种语言的用户产生序列 w 的概率。我们可以自回归地将这些概率分解为:

p ( w ) = p ( e o s ∣ w ) ∏ t = 1 ∣ w ∣ p ( w t ∣ w < t ) p(w) = p(eos | w) \prod_{t=1}^{|w|} p(w_t | w_{<t}) p(w)=p(eosw)t=1wp(wtw<t)

其中 eos 是一个特殊的序列结束符号,它使这个在 W ∗ 上的概率分布有效。本文关注的是使用预先训练好的语言模型来计算一个词在上下文中的概率的正确方法,即 p(wt | w<t)。为此,我们首先讨论它与其他量的等价性,这将最终揭示先前计算方法中的一个缺陷。我们首先定义一个概率函数 PW,它在字符串集 ΨW ⊆ W ∗ 上运行。

定义 1. 给定分布 p(w),我们定义概率函数 PW : P(W ∗) → [0, 1],它返回任何事件 w ∈ ΨW ⊆ W ∗ 发生的概率。由于这些事件是不相交的,PW(ΨW) 可以定义为:

P W ( Ψ W ) = def ∑ w ∈ Ψ W p ( w ) P_W(\Psi_W) \stackrel{\text{def}}{=} \sum_{w \in \Psi_W} p(w) PW(ΨW)=defwΨWp(w)

现在,令 ◦ 表示连接(在字符串或字符串集之间),而 w ◦ W ∗ 表示所有以 w 为前缀的字符串的集合:{w◦w′ | w′ ∈ W ∗}。我们可以通过对 PW 的两次评估来计算我们想要的条件分布:

p ( w ∣ w < t ) = P W ( w < t ◦ w ◦ W ∗ ) P W ( w < t ◦ W ∗ ) p(w | w_{<t}) = \frac{P_W(w_{<t} ◦ w ◦ W^∗)}{P_W(w_{<t} ◦ W^∗)} p(ww<t)=PW(w<tW)PW(w<twW)

请注意,这是对概率联合规则的简单调用:条件 p(w | w<t) 等于观察到前缀 w<t ◦ w 的概率(由 PW(w<t ◦ w ◦ W ∗) 表示)除以观察到前缀 w<t 的概率(由 PW(w<t ◦ W ∗) 表示)。我们称 PW(w ◦ W ∗) 形式的概率为 w 的前缀概率。

拼写法. 我们在这里假设这种语言可以书写,并且它有一个标准化的拼写惯例。形式上,给定一种语言的字母表 C,每个字符串 w 都可以通过函数 S W ∗→C∗ : W ∗→ C∗ 映射到一个字符序列 c ∈ C∗。此外,我们假设这种语言允许从拼写法中直接进行分割。因此,给定一个字符序列 c,我们可以提取一个词语序列,如

S C ∗ → W ∗ − 1 ( c ) = w . S^{-1}_{C∗→W ∗} (c) = w. SCW1(c)=w.

4. 子词和语言模型

大多数现代语言模型不是直接定义为词语 w 的分布,而是定义为子词的分布。这些子词本身是由分词器的选择来定义的。在本节中,我们将首先介绍分词器,以及它们如何将词语映射到子词(以及反向映射)。然后,我们将使用这些构建块来展示如何从子词概率中计算出词语概率。

4.1 从词语到子词,再回到词语

分词器带有一个词汇表 S,其元素是子词 s ∈ S;每个子词代表一个字符序列 c ∈ S∗→C∗ : S ∗ → C∗。然后,可以通过简单地将一个子词序列映射到它们所代表的字符并将它们连接在一起来定义一个去分词化函数 S S∗→C∗。分词器还提供了一个分词化函数 C∗ → S ∗,它接受一个字符序列作为输入,并将其映射到一个子词序列。值得注意的是,多个子词序列可以映射到同一个字符序列;然而,大多数分词器会选择其中一个子词序列作为规范选择,并使用一个确定性的分词化函数。

总的来说,我们定义的映射函数使我们能够在词语和子词之间进行转换,这在使用子词分布计算词语概率时是必要的。我们将词语到子词的映射写成:

S W ∗ → S ∗ = def S W ∗ → C ∗ ⋅ S C ∗ → S ∗ , S_{W ∗→S∗} \stackrel{\text{def}}{=} S_{W ∗→C∗} \cdot S_{C∗→S∗}, SWS=defSWCSCS,

S S ∗ → W ∗ = def S S ∗ → C ∗ ⋅ S C ∗ → W ∗ S_{S∗→W ∗} \stackrel{\text{def}}{=} S_{S∗→C∗} \cdot S_{C∗→W ∗} SSW=defSSCSCW

重要的是,这些函数在应用为 S S∗→W ∗ (S W ∗→S∗ (w)) = w 时会相互逆转,但在以相反顺序应用时却不一定。这意味着每个 w 都映射到一个唯一的 s,并且每个 w 都可以用某个 s 来表示;但是,有些子词序列不会被我们的分词化函数映射到。例如,如果一个分词器将词语 probability 映射到子词 [_prob, ability],那么子词序列 [_p, r, o, b, …] 就永远不会被映射到。我们将未映射的子词序列表示为:

S x = def S ∗ ∖ { S W ∗ → S ∗ ( w ) ∣ w ∈ W ∗ } S^x \stackrel{\text{def}}{=} S^∗ \setminus \{S_{W ∗→S∗}(w) | w ∈ W ∗\} Sx=defS{ SWS(w)wW}

4.2 从词语概率到子词概率

现在,令 pθ 为一个具有参数 θ 和词汇表 S 的语言模型。这个模型定义了所有有限子词序列 s ∈ S ∗ 的集合上的概率分布,并且它的参数经过优化,以便在给定以下条件的情况下,对子词的真实分布提供良好的估计:

p ( s ) = ∑ w ∈ W ∗ p ( w ) 1 { s = S W ∗ → S ∗ ( w ) } p(s) = \sum_{w \in W ∗} p(w) \mathbf{1} \{s = S_{W ∗→S∗}(w)\} p(s)=wWp(w)1{ s=SWS(w)}

由于并非所有子词序列都被映射到,并且因为 W ∗→S∗ 中的每个映射都是唯一的,所以我们可以将此分布改写为:

p ( s ) = { p ( w ) if  s = S W ∗ → S ∗ ( w ) 0 if  s ∈ S x p(s) = \begin{cases} p(w) & \text{if } s = S_{W ∗→S∗}(w) \\ 0 & \text{if } s ∈ S^x \end{cases} p(s)={ p(w)0if s=SWS(w)if sSx

在本文中,我们关注的是精确的语言模型,我们将其定义为与 p 具有相同支持度的 pθ;形式上,当 p(s) = 0 时,pθ(s) = 0。然而,我们将在下一节简要讨论如何将我们的发现推广到非精确模型。

4.3 从子词概率到词语概率

等式 (7) 提出了一种从语言模型中提取词语概率的方法;我们可以简单地使用以下等价关系:

p ( w ) = p ( s ) ,  for  s = S W ∗ → S ∗ ( w ) p(w) = p(s), \text{ for } s = S_{W ∗→S∗}(w)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值