这句话有多可能出现? Lec 2 · Aug 27 · Lec 3 · Sep 1 回顾
读到一句话的前半段时,我们往往已经能猜到后面可能接什么词。语言模型(language model)就是把这种猜测变成概率:有些词更可能出现,有些词不太可能出现。这样,我们既能比较完整的句子,也能预测下一个词。
这两种看法紧密相连。下面第一个式子问整句话出现的概率;第二个式子问,已经知道前面的词之后,下一个词出现的概率:
两者都可以用来描述语言模型。例如,\(P(\text{its water is so transparent that you can see the bottom})\) 就是联合概率 \(P(\text{its}, \text{water}, \text{is}, \ldots, \text{bottom})\),表示这些词按照这个顺序一起出现的概率。
给语言算概率,有什么用? Lec 2 · Aug 27
只要系统需要在几种说法之间作选择,概率就能派上用场。它既可以帮助系统决定接下来写什么,也可以帮助系统理解不够清楚的输入。
- 生成文本:模型给出下一个词的概率,我们就能据此选择接着写哪个词。
- 识别语音:两串词可能听起来很像,但其中一串更符合日常表达。例如,\(P(\text{I saw a van}) \gg P(\text{eyes awe of an})\)。
- 纠正拼写和语法:结合前后文,系统可以判断哪个词更像作者本来想写的。我们会期待 \(P(\text{I'm about fifteen minutes away}) > P(\text{I'm about fifteen minuets away})\),也会期待 \(P(\text{high winds tonight}) > P(\text{large winds tonight})\)。同样的思路也能帮助比较 “I will be back soonish” 与 “I will be bassoon dish”,以及 “Your so silly” 与 “You're so silly”。
- 摘要和问答:这些任务同样需要选择合适的词,组织成句子。
知道了用途,接下来的问题就是:这些概率怎样从文本中算出来?
把一句话拆成一步一步的预测 Lec 2 · Aug 27
以 “its water is so transparent” 为例。我们先看 its 出现的概率,再看 its 后面接 water 的概率,然后看 its water 后面接 is 的概率,依此类推。把这些条件概率乘起来,就得到整句话的概率。
\(P(\text{its water is so transparent}) = P(\text{its}) \cdot P(\text{water} \mid \text{its}) \cdot P(\text{is} \mid \text{its water}) \cdot P(\text{so} \mid \text{its water is}) \cdot P(\text{transparent} \mid \text{its water is so})\)
这就是概率的链式法则(chain rule)。下面的紧凑写法只是把刚才的步骤推广到任意长度的句子。第一个位置前面没有词,因此第一个因子就是首词本身的概率。
链式法则是精确成立的等式。到这里为止,我们还没有假设任何较早出现的词可以被忽略。
从出现次数估计概率 Lec 2 · Aug 27 · Lec 4 · Sep 3 再次使用
先看一个更简单的问题。一枚硬币正面朝上的概率是未知的 \(p\)。我们抛了四次,得到 (H, H, H, T),也就是三次正面、一次反面。很自然的估计是 \(p = 3/4 = 0.75\)。
这个选择有数学依据。观察到这串结果的概率是 \(p \cdot p \cdot p \cdot (1-p)\)。改变参数,就会改变模型认为这串结果出现的可能性。对这个式子求导并令导数为零,可以求得最大值出现在 \(p = 0.75\)。
这种做法叫最大似然估计(maximum likelihood estimation,MLE):选择让已观测数据最有可能出现的参数。这里得到的是估计,不是对硬币真实概率的保证;正面概率为 0.5 的公平硬币,也可能碰巧抛出三次正面。
预测词 \(w\) 后面接什么,与抛硬币的估计思路相同,只是候选结果从正反两面变成了词表里的所有词。数出每个候选词在这个上下文后出现了多少次,再除以上下文的总出现次数即可。推导逻辑回归的损失函数时,我们还会用到这个思想,只是会把它写成“条件最大似然”。
为什么不能一直数完整的前半句话?
原则上,我们可以直接数某段前文出现了多少次,以及它后面有多少次接了目标词:
如果这段前文在数据里出现过,这个比例就能算出来。难点在于,可能的前文实在太多。一段较长的前文可能只出现一次,也可能一次都没出现:前者几乎没有足够的证据,后者连分母都是零。因此,我们需要缩短上下文,让不同句子的观察结果能够合在一起使用。
先只看最近几个词 Lec 2 · Aug 27 · Lec 3 · Sep 1 回顾
与其保留 “its water is so transparent” 全部五个词,不如只保留 “transparent”,或者 “so transparent”。上下文变短后,我们就更有机会在训练文本的其他地方找到相同片段。
这种简化叫马尔可夫假设(Markov assumption),名称来自数学家 Andrei Markov。它用最近几个词来近似完整前文提供的信息:
放回刚才的例子,就是 \(P(\text{that} \mid \text{its water is so transparent}) \approx P(\text{that} \mid \text{transparent})\),或者 \(\approx P(\text{that} \mid \text{so transparent})\)。这里用的是近似号,因为我们主动忽略了一部分较早的词;这与精确成立的链式法则不同。
一阶模型只看前一个词。阅读课件时要注意两种计数方式:\(k\)-gram 模型看的是前 \(k-1\) 个词,因为窗口里还包括当前要预测的词。“阶数”数的是上下文;“gram”数的是整个窗口。
- 语言模型为整句话和下一个词分配概率。
- 这些概率能帮助生成文本、理解有歧义的输入,以及纠正写作错误。
- 最大似然估计通过观察到的次数来估计概率。
- 马尔可夫假设缩短上下文,使我们更容易收集到足够的计数。
- 下一页用一个具体的词组语言模型把这些步骤串起来。