-推荐关注-
理解N-Gram模型不仅是学习概率语言模型的基础,更是深入理解现代语言模型(如GPT)的重要前奏。GPT的核心思想正是对N-Gram思想的深度拓展和优化。因此,学习N-Gram模型是迈向GPT的第一步
N-Gram模型是什么? N-Gram定义 N-Gram的实现 N-Gram 模型的构建过程 "词"是什么? 优点 缺点 应用场景 -- 领取学习资料大礼包,见文末
近年来,GPT(Generative pre-trained transformer)以其卓越的语言生成能力在自然语言处理领域引起了广泛关注。它能够根据上下文生成连贯、自然的文本,从而在对话系统、机器翻译和文本生成等任务中展现出强大的性能。
GPT : 基于transformer的生成式预训练模型(Generative pre-trained transformer),一个人工智能语言模型系列
ChatGPT : 一个由OpenAI开发的聊天机器人/生成式预训练transformer模型
要了解GPT,我们先从一个简单的看起
比如这个推荐是怎么出来的?
研究自然语言处理的科学家们发现,要让计算机理解自然语言,就必须让它学会对语言中的词序列进行概率估计。这样,计算机才能判断哪些语句是符合自然语言规律的,哪些是不合逻辑的。这就为语言模型的诞生奠定了理论基础。
研究者开始尝试用统计方法来预测文本中的词序列概率,这种为了预测词汇出现的概率而使用的统计方法就是自然语言处理中的概率模型。它的基本思想是,给定一个词序列,计算下一个词出现的概率。然而,由于词序列可能非常长,计算整个序列的联合概率会变得非常复杂。这时,N-Gram 模型就派上了用场。
N-Gram模型是什么?
在 N-Gram 模型中,通过将文本分割成连续的N个词的组合(即N-Gram),来近似地描述词序列的联合概率。
这样第N个词出现的概率依赖于它前面的N-1个词的词序列。换句话说,我们利用有限的上下文信息(N-1个词)来近似地预测下一个词的概率。
N-Gram 模型是一种基于概率的语言模型。它被广泛应用于自然语言处理(NLP)领域。
N-Gram定义:
对于给出已有文字:“我爱吃”,来预测下一个词的场景中,可以表示为求下一个词 的概率:
为了实现下一个词的预测,我们首先需要建模整个句子的概率,假设一个句子/序列(我要吃)的出现概率可以用每个单词的条件概率乘积来表示(公式比较长,可以左右滑动):
由于计算每个词的完整条件概率(即)非常复杂,N-Gram模型做了马尔可夫假设,即假设当前单词的出现只与前 个单词有关,而不是所有前面的单词。
比如,当n=1、2、3时(n个词做为1组):
:Unigram(一元组):
1个词为一组,假设每个词的出现概率互不相关,只与当前单词本身有关。
:Bigram(二元组):
2个词为一组,假设每个词只依赖于它前面的一个词(n-1)。
:Trigram(三元组):
3个词为一组,假设每个词只依赖于它前面的两个词(n-1)
在二元组Bigram模型中(n=2,可以推广到3元组、n元组):
原来的预测 X 的任务就可以近似的表示为
那么,如何来计算这个概率
N-Gram的实现
为了实现 N-Gram 模型,我们需要对条件概率 进行估计(以Bigram为例:n=2)。
在实际中,我们无法直接获取这些概率值,但可以通过训练语料中的频率统计近似得到,得出 估计公式
其中,分子是词对 在语料中的共现次数,分母是 的出现次数
N-Gram 模型的构建过程
(1) 将给定的文本分割成连续的N个词的组合(N-Gram)
比如,在 Bigram 模型(2-Gram 模型,即二元模型)中,我们将文本分割成多个由相邻的两个词构成的组合,称它们为“二元组”(2-Gram)。
这里的“词”先以“一个字”举例
(2) 统计每个 2-Gram 在文本中出现的次数,也就是词频。
比如,二元组“我爱”在语料库中出现了3次(如下图所示),即这个二元组的词频为3。
(3) 为了得到一个词在给定上下文中出现的概率,我们可以利用条件概率公式计算。
具体来讲,就是计算给定前 N-1个词时,下一个词出现的概率。这个概率可以通过计算某个 N-Gram 出现的次数与前 N-1个词(前缀)出现的次数之比得到。
比如,二元组“我爱”在语料库中出现了3次,而二元组的前缀“我”在语料库中出现了 10 次,则给定“我”,下一个词为“爱”的概率为 30%
(4) 可以使用这些概率来预测文本中下一个词出现的可能性。
多次迭代这个过程甚至可以生成整个句子,比如,从一个字“我”,生成“爱”,再继续生成“吃”,直到“我爱吃肉”这个句子。
"词"是什么?
上面一直在提到“n个词“,那么这个“词”是什么?
在英文中可以指单词,也可以指字符,有时还可以指“子词”(Subword);而在中文中,可以指词或者短语,也可以指字。
子词分词算法将单词切分成更小的部分,即子词,以便更好地处理未登录词(语料库词汇表里面找不到的词)、拼写错误和词汇变化等问题。这种算法有助于减小词汇表大小,同时提高模型的泛化能力。
例如,如果我们使用子词分词算法将英文单词"embedding"进行切分,可能得到以下几个子词:["em",“bed","ding"]。这是一个简化的示例,实际上的子词分词可能更复杂。
在 BERT等自然语言处理模型中,常用的子词分词算法有 WordPiece 和 SentencePiece。这些算法可以根据训练数据集自动学习出高频子词
在自然语言处理中,一个非常关键的预处理环节就是按照需要对语料库,也就是自然语言数据集中的句子进行分词,分词之后,文本序列就形成了可以输入语言模型的一个个“元素”(或者称为“单元”),这个元素的英文名叫作“Token”。当你看到Token,就应该知道,我们已经通过分词工具,把语料,也就是一个个句子,切成了能够被语言模型读取并处理的一个个元素。
优点:
简单高效:N-Gram模型易于实现,并且在小规模数据集上计算成本较低。 广泛适用:可以用在很多NLP任务中,如分词、文本生成。 灵活性:可以根据任务调整 n 的大小以平衡复杂度和性能。
缺点:
数据稀疏性:对于较大的 n,数据中的某些 N-Gram 可能没有出现过,导致概率为零。 上下文局限:N-Gram模型只能捕获有限长度的上下文,不能理解长距离依赖关系。 维度增长:随着 n 增大,存储n-gram的参数数量会显著增加。
应用场景:
拼写检查:根据上下文判断一个单词是否拼写正确。 机器翻译:利用目标语言的 N-Gram 模型生成更流畅的翻译结果。 文本生成:用训练好的 N-Gram 模型生成新的句子。
有需要的,在公众号「AI取经路」发消息「学习资料」即可获取。
--END--
点亮“赞”和“在看”,“分享”好友一起看