语言模型的诞生和进化
咖哥:刚才说了嘛,语言模型是一种用于计算和预测自然语言序列概率分布的模型,它通过分析大量的语言数据,基于自然语言上下文相关的特性建立数学模型,来推断和预测语言现象。简单地说,它可以根据给定的上下文,预测接下来出现的单词。语言模型被广泛应用于机器翻译、语音识别、文本生成、对话系统等多个NLP领域。常见的语言模型有N-Gram模型、循环神经网络(RNN)模型、长短期记忆网络(LSTM)模型,以及现在非常流行的基于Transformer架构的预训练语言模型(Pre-trained Language Model,PLM),如BERT、GPT系列等,还有你正在学习的ChatGPT。
小冰:你这么说我还是不懂,能举个例子吗?
咖哥:你看,我这里有一堆词。
咖哥 一本书 学 零基础 机器学习 写了
那么,假设现在给我们一个自然语言处理任务,就是看看这些词的各种组合中,哪一个组合能够形成一个可以被理解和接受的句子。当然可能有很多组合,下面我们列出其中的两个组合。
句子1:咖哥零基础学一本书写了机器学习
句子2:咖哥写了一本书零基础学机器学习
哪个更像一个完整的句子?相信你能够给出答案。
但是,AI怎么做判断呢?这就需要基于统计的语言模型的帮助了。根据贾里尼克的假设:一个句子是否合理,取决于其出现在自然语言中的可能性的大小。
也就是说,假设我的语料库足够大,而句子2曾经在这个语料库中出现过,那么AI当然会说:OK,句子2更好,因为它在自然语言中存在的可能性大,概率高,如下图所示。我经常看到别人这样说,所以这样说应该正确(当然,概率高的事情可不一定百分之百正确,这是强大的大规模语言模型偶尔也会出错的主要原因,这是它的死穴)。这就是基于统计的语言模型的核心思路。这里画重点,你应该看得出来基于统计的语言模型是由数据驱动的,这就是它相对于基于语法和语义规则的NLP技术的优越性。
句子2正确的概率比较高
小冰:嗯,这样解释,我就有点明白了。
咖哥:别着急,我还没说完。
假设S表示一个有意义的句子,由一连串按特定顺序排列的词W1, W2,..., Wn组成。目标是求S在文本中出现的可能性,也就是P(S)。如果你统计了人类有史以来所有的句子,就可以得到P(S)[3]。
[3] 当然,这只是一种理想情况,实际上我们只能够统计可以搜集到的语料库(Corpus)中的句子。
我们可以利用模型来估算P(S):
P(S) = P(W1, W2, …, Wn)
利用条件概率公式计算P(W1, W2, …, Wn):
P(W1, W2, …, Wn)=P(W1)·P(W2|W1)·P(W3|W1, W2)…P(Wn|W1, W2, …, Wn-1)
根据马尔可夫假设(任意一个词出现的概率只同它前面的那一个词有关),就有:
P(W1, W2,…, Wn)≈P(W1)・P(W2|W1)·P(W3|W2)…P(Wn|Wn-1)
那么,通过条件概率公式和马尔可夫假设,你就可以得到一个句子是不是人类语言的概率!
基于统计的语言模型具有以下优点。
(1)可扩展性:可以处理大规模的数据集,从而可以扩展到更广泛的语言任务和环境中。
(2)自适应性:可以从实际的语言数据中自适应地学习语言规律和模式,并进行实时更新和调整。
(3)对错误容忍度高:可以处理错误或缺失的数据,并从中提取有用的信息。
(4)易于实现和使用:基于统计,并使用简单的数学和统计方法来搭建语言模型。