返回

LLM系列-1:NLP的发展

学技术前先读史,对后续有很帮助。下面介绍一下统计语言模型发展史。

N-gram 模型

其预测下一个词语的核心思想如下:

$$ P(w_n|w_1, w_2, \ldots, w_{n - 1}) $$

即下一个词语出现的概率取决于在句子中出现在它之前的所有词,但是,随着文本长度的增加,条件概率会变得越来越难以计算,因而在实际计算时会假设每个词语仅与它前面的N−1个词语有关,即

$$ P(w_i | w_1, w_2, \ldots, w_{i - 1}) = P(w_i | w_{i - N + 1}, w_{i - N + 2}, \ldots, w_{i - 1}) $$

这种假设被称为马尔可夫(Markov)假设,对应的语言模型被称为 N 元(N-gram)模型。比如N=2时基于前一个单词预测当前单词;N=3时考虑前两个单词来预测当前单词;而N=1时,模型实际上就是一个上下文无关模型。

通过统计语料库中 n - gram 序列的频率,估计给定前 n - 1 个元素后下一个元素出现的概率 ,从而选择概率最高的词作为预测结果。例如,在语料库中统计 “我喜欢” 后面接不同词的频率,若 “苹果” 出现次数最多,当输入 “我喜欢” 时,就可能预测下一个词是 “苹果” 。

NNLM 模型

NNLM 模型的思路与统计语言模型保持一致,它通过输入词语前面的N−1个词语来预测当前词。其结构如图所示:

image-20250412151005551

具体来说,模型首先从词表C中查询得到前面N-1个词语对应的词向量,然后将这些词向量拼接后输入到带有激活函数的隐藏层中,通过Softmax函数预测当前词语的概率。特别地,包含所有词向量的词表矩阵 C 也是模型的参数,需要通过学习获得。

Word2Vec 模型

真正将神经网络语言模型发扬光大的模型,Word2Vec 模型提供的词向量在很长一段时间里都是自然语言处理方法的标配。Word2Vec 的模型结构和 NNLM 基本一致,只是训练方法有所不同,分为 CBOW (Continuous Bag-of-Words) 和 Skip-gram 两种。

image-20250412151452618

其中 CBOW 使用周围的词语w(t-2),w(t-1),w(t+1),w(t+2)来预测当前词w(t),而 Skip-gram 则正好相反,它使用当前词w(t)来预测它的周围词语。Word2Vec 模型训练目标也更多地是为获得词向量服务。特别是同时通过上文和下文来预测当前词语的 CBOW 训练方法打破了语言模型“只通过上文来预测当前词”的固定思维。

通过将词汇表中的单词转换成高维空间向量来表示语义关系,为自然语言处理提供了有效的文本数值化方式,推动了深度学习在 NLP 领域的应用。

  • 数据:比如窗口大小设为 2,对于句子 “我 爱 自然 语言 处理” ,以 “自然” 为中心词,上下文词是 “我”“爱”“语言”“处理”
  • 初始化:为每个单词初始化一个随机词向量
  • 计算预测:CBOW 将上下文词向量相加输入隐藏层再到输出层,Skip - gram 则是将目标词向量输入隐藏层再到输出层,输出层都用 softmax函数计算词汇表中每个词作为预测结果的概率
  • 更新权重:根据预测结果和真实标签计算损失,通过反向传播算法使损失最小化,不断迭代优化词向量

ELMo 模型

为了更好地解决多义词问题,提出了 ELMo 模型(Embeddings from Language Models)。与 Word2Vec 模型只能提供静态词向量不同,ELMo 模型会根据上下文动态地调整词语的词向量。

image-20250412153156781

具体来说,ELMo 模型首先对语言模型进行预训练,使得模型掌握编码文本的能力;然后在实际使用时,对于输入文本中的每一个词语,都提取模型各层中对应的词向量拼接起来作为新的词向量。ELMo 模型采用双层双向 LSTM 作为编码器,从两个方向编码词语的上下文信息,相当于将编码层直接封装到了语言模型中。

训练完成后 ELMo 模型不仅学习到了词向量,还训练好了一个双层双向的 LSTM 编码器。对于输入文本中的词语,可以从第一层 LSTM 中得到包含句法信息的词向量,从第二层 LSTM 中得到包含语义信息的词向量,最终通过加权求和得到每一个词语最终的词向量。

但是 ELMo 模型存在两个缺陷:首先它使用 LSTM 模型作为编码器,而不是当时已经提出的编码能力更强的 Transformer 模型;其次 ELMo 模型直接通过拼接来融合双向抽取特征的做法也略显粗糙。

不久之后,将 ELMo 模型中的 LSTM 更换为 Transformer 的GPT、Bert模型就出现了。

BERT 模型

2018 年底随着 BERT 模型(Bidirectional Encoder Representations from Transformers)的出现,这一阶段神经网络语言模型的发展终于出现了一位集大成者。

BERT 模型采用和 GPT 模型类似的两阶段框架,首先对语言模型进行预训练,然后通过微调来完成下游任务。但是,BERT 不仅像 GPT 模型一样采用 Transformer 作为编码器,而且采用了类似 ELMo 模型的双向语言模型结构。因此 BERT 模型不仅编码能力强大,而且对各种下游任务,BERT 模型都可以通过简单地改造输出部分来完成。

image-20250412153653180

但是 BERT 模型的优点同样也是它的缺陷,由于 BERT 模型采用双向语言模型结构,因而无法直接用于生成文本。

在 BERT 模型取得成功之后,在其基础上又提出了诸如RoBERTa等改良模型,其中具有代表性的就是微软提出的UNILM模型(可以使Bert具备生成能力),它把 BERT 模型的 MASK 机制运用到了一个很高的水平。

BERT不能直接用于生成文本,原因如下:

  • 掩码语言模型(Masked Language Model, MLM):BERT 通过随机遮盖文本中 15% 的 token,让模型根据上下文来预测被遮盖的词。这种训练方式让模型学会融合双向上下文信息理解语义,使其在理解上下文语义时表现优异。

    但也导致了一个关键问题——生成任务需要单向、逐步的预测。通常是自回归的,即逐词生成,每个新词的预测只能依赖已生成的左侧上下文。而BERT的双向机制在生成时会引入未来信息,导致信息泄露,与实际生成过程矛盾。不像自回归模型,如 GPT 那样从左到右依次根据前面生成的内容预测下一个词,所以难以直接用于文本生成任务。

  • Encoder-only模型:BERT 架构只采用了 Transformer 的编码器部分,没有使用Transformer 解码器那样具备处理生成任务的结构设计。生成任务通常需要解码器逐步生成输出,按照顺序逐步生成下一个词,而 BERT 编码器缺乏这种从左到右、顺序生成的机制 。

补充知识

LLM分类

一般分为三种:自回归模型、自编码模型和序列到序列模型。

  • 自回归(Autoregressive model)模型:decoder-only模型。采用经典的语言模型任务进行预训练,即给出上文,预测下文,对应原始Transformer模型的解码器部分,其中代表模型是GPT系列。模型一般会用于NLG的任务,如文本生成。
  • 自编码(AutoEncoder model)模型:encoder-only模型。采用句子重建进行预训练,即预先通过某种方式破坏句子,掩码或打乱顺序,希望模型将被破坏的部分还原,对应原始Transformer模型的编码器部分,其中代表模型是BERT系列。与自回归模型不同,模型既可以看到上文信息,也可以看到下文信息,由于这样的特点,模型往往适用于NLU的任务,如文本分类、阅读理解等。
  • 序列到序列(Sequence to Sequence Model)模型:则是同时使用了原始的编码器与解码器。这种模型最自然的应用便是文本摘要、机器翻译等任务,事实上基本所有的NLP任务都可以通过序列到序列解决。

NLG - 自然语言生成;NLU - 自然语言理解

Transformer结构

标准的 Transformer 模型主要由两个模块构成:

  • Encoder:负责理解输入文本,为每个输入构造对应的语义表示
  • Decoder:负责生成输出,使用 Encoder 输出的语义表示结合其他输入来生成目标序列

这两个模块可以根据任务的需求而单独使用:

  • 纯 Encoder 模型:适用于只需要理解输入语义的任务,例如句子分类、命名实体识别
  • 纯 Decoder 模型:适用于生成式任务,例如文本生成
  • Encoder-Decoder 模型Seq2Seq:适用于需要基于输入的生成式任务,例如翻译、摘要

Transformer 模型本来是为了翻译任务而设计的。在训练过程中,Encoder 接受源语言的句子作为输入,而 Decoder 则接受目标语言的翻译作为输入。在 Encoder 中,由于翻译一个词语需要依赖于上下文,因此注意力层可以访问句子中的所有词语;而 Decoder 是顺序地进行解码,在生成每个词语时,注意力层只能访问前面已经生成的单词。

例如,假设翻译模型当前已经预测出了三个词语,我们会把这三个词语作为输入送入 Decoder,然后 Decoder 结合 Encoder 所有的源语言输入来预测第四个词语。

实际训练中为了加快速度,会将整个目标序列(真实值)都送入 Decoder,然后在注意力层中通过 Mask 遮盖掉未来的词语来防止信息泄露。因为若按顺序一个词一个词输入,效率很低。一次性输入整个目标序列,模型可以并行处理计算,大大加快训练速度 。

image-20250412170759018

其中,Decoder 中的第一个注意力层关注 Decoder 过去所有的输入,而第二个注意力层则是使用 Encoder 的输出,因此 Decoder 可以基于整个输入句子来预测当前词语。这对于翻译任务非常有用。

在 Encoder/Decoder 的注意力层中,我们还会使用 Attention Mask 遮盖掉某些词语来防止模型关注它们,例如为了将数据处理为相同长度而向序列中添加的填充 (padding) 字符。

总结 & 参考

可以看出,预测下一个词模型的基本范式都是学习融合上下文信息的每个词的嵌入表征,然后通过输出层(通常接 softmax 函数 ,维度大小是词库大小)计算词汇表中每个词作为下一个词的概率,从中选择概率最高的词或通过一定采样策略(如多项分布采样 )确定下一个词。

以 GPT 为例,它是自回归模型,从左到右依次根据已有的词预测下一个词 ;而 BERT 虽然主要用于完形填空任务(掩码语言模型),但也可以在微调后用于预测下一个词等生成任务 。

Transformers-第一章

Transformers-第二章

光终究会洒在你的身上,你也会灿烂一场!
本博客已稳定运行