在9.2 节中,我们将看到如何将文本序列映射到标记中,其中这些标记可以被视为一系列离散的观察结果,例如单词或字符。假设文本序列中的标记长度T依次是 x1,x2,…,xT. 语言模型的目标是估计整个序列的联合概率:
其中可以应用第 9.1 节中的统计工具。
语言模型非常有用。例如,一个理想的语言模型将能够自行生成自然文本,只需一次绘制一个标记即可 xt∼P(xt∣xt−1,…,x1). 与使用打字机的猴子完全不同,从这种模型中出现的所有文本都将作为自然语言传递,例如英文文本。此外,只需在先前的对话片段上调节文本,就足以生成有意义的对话。显然,我们离设计这样一个系统还有很长的路要走,因为它需要理解文本,而不仅仅是生成语法合理的内容。
尽管如此,语言模型即使在其有限的形式下也能提供很好的服务。例如,“to recognize speech”和“to wreck a nice beach”这两个短语听起来非常相似。这可能会导致语音识别中出现歧义,这很容易通过一种语言模型来解决,该模型拒绝将第二种翻译认为是古怪的。同样,在文档摘要算法中,值得知道“狗咬人”比“人咬狗”更频繁,或者“我想吃奶奶”是一个相当令人不安的陈述,而“我想吃,奶奶”要温和得多。
No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
9.3.1. 学习语言模型
显而易见的问题是我们应该如何对文档甚至一系列标记进行建模。假设我们在单词级别标记文本数据。让我们从应用基本概率规则开始:
例如,包含四个单词的文本序列的概率为:
9.3.1.1. 马尔可夫模型和n-克
在9.1节的序列模型分析中,我们将马尔可夫模型应用到语言建模中。序列上的分布满足一阶马尔可夫性质,如果 P(xt+1∣xt,…,x1)=P(xt+1∣xt). 更高的阶数对应更长的依赖关系。这导致我们可以应用一些近似值来对序列建模: