本文参考自https://github.com/HqWu-HITCS/Awesome-Chinese-LLM?tab=readme-ov-file和Huggingface中的ModelCard(https://huggingface.co/)
LLM主要类别架构
LLM本身基于transformer架构。自2017年,attention is all you need诞生起,transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用encoder或decoder,有些模型同时使encoder+decoder。
LLM分类一般分为三种:自编码模型(encoder)、自回归模型(decoder)和编解码器模型(encoder-decoder)。
自编码器模型(AutoEncoder model,AE)
BERT
BERT base model (uncased)
使用掩码语言建模 (masked language modeling-MLM) 目标对英语进行预训练的模型。该模型不区分大小写:它不会区分english和English。
模型描述
BERT 是一个以自监督方式在大量英语数据上进行预训练的 Transformer 模型。这意味着它只在原始文本上进行预训练,没有任何人工标记(这就是它可以使用大量公开数据的原因),并有一个自动流程从这些文本中生成输入和标签。更准确地说,它进行了两个预训练目标:
掩码语言建模 (MLM):取一个句子,模型随机掩码输入中的 15% 的单词,然后通过模型运行整个掩码句子,并预测被掩码的单词。这与通常一个接一个地看到单词的传统循环神经网络 (RNN) 或内部掩码未来标记的 GPT 等自回归模型不同。它允许模型学习句子的双向表示。
下一句预测 (NSP):模型在预训练期间将两个掩码句子连接起来作为输入。有时它们对应于原文中彼此相邻的句子,有时则不是。然后,模型必须预测这两个句子是否彼此相连。
通过这种方式,模型可以学习英语的内部表征,然后可以使用该表征提取对下游任务有用的特征:例如,如果您有一个带标签的句子数据集,则可以使用 BERT 模型生成的特征作为输入来训练标准分类器。
请注意,此模型主要针对使用整个句子(可能被屏蔽)进行决策的任务进行微调,例如序列分类、标记分类或问答。对于文本生成等任务,您应该考虑 GPT2 之类的模型。
模型变体
如何使用
以下是如何在 PyTorch 中使用该模型获取给定文本的特征:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
训练数据
BERT 模型在 BookCorpus 上进行了预训练,BookCorpus 是一个包含 11,038 本未出版的书籍和英文维基百科(不包括列表、表格和标题)的数据集。
训练过程
Preprocessing
使用 WordPiece 将文本小写化并标记化,词汇量为 30,000。模型的输入形式如下:
[CLS] Sentence A [SEP] Sentence B [SEP]
句子 A 和句子 B 对应于原始语料库中的两个连续句子的概率为 0.5,在其他情况下,则是语料库中的另一个随机句子。请注意,这里所指的句子是一段连续的文本,通常比单个句子长。唯一的限制是,包含两个“句子”的结果的总长度小于 512 个标记。
每个句子的掩蔽过程的细节如下:
- 15% 的 token 被屏蔽。
- 在 80% 的情况下,屏蔽的 token 被 [MASK] 替换。
- 在 10% 的情况下,屏蔽的 token 被替换为与它们所替换的 token 不同的随机 token。
- 在剩余的 10% 的情况下,屏蔽的 token 保持原样。
Pretraining
该模型在 4 个云 TPU(共 16 个 TPU 芯片)上进行训练,训练步骤为 100 万步,批处理大小为 256。90% 的步骤的序列长度限制为 128 个标记,其余 10% 的步骤的序列长度限制为 512 个标记。使用的优化器是 Adam,学习率为 1e-4, β 1 = 0.9 \beta_1=0.9 β1=0.9 和 β 2 = 0.999 \beta_2=0.999 β2=0.999,权重衰减为 0.01,学习率预热 10,000 步,之后学习率线性衰减。
Evaluation results
在下游任务上进行微调后,该模型可实现以下结果:
Glue test results:
Task | MNLI-m/mm | QQP | QNLI | SST-2 | CoLA | STS-B | MRPC | RTE | Average |
---|---|---|---|---|---|---|---|---|---|
Score | 84.6/83.4 | 71.2 | 90.5 | 93.5 | 52.1 | 85.8 | 88.9 | 66.4 | 79.6 |
自回归模型(Autoregressive model,AR)
GPT
GPT-2
在此处测试整个生成功能:https://transformer.huggingface.co/doc/gpt2-large
使用因果语言建模 (CLM) 目标对英语进行预训练的模型。
模型描述
GPT-2 是一个以自监督方式在大量英语数据上进行预训练的 transformers 模型。这意味着它只在原始文本上进行预训练,没有任何人以任何方式标记它们(这就是它可以使用大量公开数据的原因),并自动从这些文本中生成输入和标签。更准确地说,它被训练来猜测句子中的下一个单词。
更准确地说,输入是一定长度的连续文本序列,目标是相同的序列,向右移动一个标记(单词或单词片段)。该模型在内部使用掩码机制来确保对标记 i 的预测仅使用从 1 到 i 的输入,而不使用未来的标记。
这样,该模型学习了英语的内部表示,然后可用于提取对下游任务有用的特征。然而,该模型最擅长的是它预训练的目的,即根据提示生成文本。
这是 GPT-2 的最小版本,具有 124M 个参数。
如何使用
以下是如何在 PyTorch 中使用该模型获取给定文本的特征:
from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
训练数据
OpenAI 团队希望在尽可能大的语料库上训练这个模型。为了构建它,他们从 Reddit 上获得至少 3 个 karma 的出站链接中抓取了所有网页。请注意,所有维基百科页面都已从此数据集中删除,因此该模型未在维基百科的任何部分上进行训练。生成的数据集(称为 WebText)重达 40GB 文本,但尚未公开发布。您可以在此处找到 WebText 中存在的前 1,000 个域的列表。
训练过程
Preprocessing
使用字节级版本的字节对编码 (BPE)(用于 Unicode 字符)和 50,257 个词汇量对文本进行标记。输入是 1024 个连续标记的序列。
较大的模型在 256 个云 TPU v3 核心上进行训练。训练持续时间未披露,训练的具体细节也未披露。
Evaluation results
该模型无需任何微调(零样本)即可实现以下结果:
Dataset | LAMBADA (PPL) | LAMBADA (ACC) | CBT-CN (ACC) | CBT-NE (ACC) | WikiText2 (PPL) | PTB (PPL) | enwiki8 (BPB) | text8 (BPC) | WikiText103 (PPL) | 1BW (PPL) |
---|---|---|---|---|---|---|---|---|---|---|
Metric | 35.13 | 45.99 | 87.65 | 83.4 | 29.41 | 65.85 | 1.16 | 0.17 | 37.50 | 75.20 |
序列到序列模型(Sequence to Sequence Model)
T5
模型描述
Text-To-Text Transfer Transformer (T5) 的开发人员写道:
借助 T5,我们建议将所有 NLP 任务重新定义为统一的文本到文本格式,其中输入和输出始终是文本字符串,而 BERT 样式的模型只能输出类标签或输入的跨度。我们的文本到文本框架允许我们在任意 NLP 任务上使用相同的模型、损失函数和超参数。
T5-Base 是具有 2.2 亿个参数的检查点。
直接利用和下游利用
开发人员在一篇博客文章中写道,该模型:
我们的文本到文本框架允许我们在任何 NLP 任务上使用相同的模型、损失函数和超参数,包括机器翻译、文档摘要、问答和分类任务(例如情绪分析)。我们甚至可以将 T5 应用于回归任务,通过训练它来预测数字的字符串表示而不是数字本身。
有关更多详细信息,请参阅博客文章和研究论文。
训练数据
该模型在 Colossal Clean Crawled Corpus (C4) 上进行了预训练,该语料库是在与 T5 相同的研究论文背景下开发和发布的。
该模型在无监督 (1.) 和监督任务 (2.) 的多任务混合上进行了预训练。因此,以下数据集用于 (1.) 和 (2.):
- 用于无监督去噪目标的数据集:
- C4
- Wiki-DPR
- 用于监督文本到文本语言建模目标的数据集
- 句子可接受性判断
CoLA Warstadt et al., 2018 - 情感分析
SST-2 Socher et al., 2013 - 释义/句子相似性
MRPC Dolan and Brockett, 2005
STS-B Ceret al., 2017
QQP Iyer et al., 2017 - 自然语言推理
MNLI Williams et al., 2017
QNLI Rajpurkar et al.,2016
RTE Dagan et al., 2005
CB De Marneff et al., 2019 - 句子完成
COPA Roemmele et al., 2011 - 词义消歧
WIC Pilehvar and Camacho-Collados, 2018 - 问答
MultiRC Khashabi et al., 2018
ReCoRD Zhang et al., 2018
BoolQ Clark et al., 2019
训练过程
模型开发人员在摘要中写道:
在本文中,我们通过引入一个统一的框架来探索 NLP 迁移学习技术的前景,该框架将每个语言问题转换为文本到文本格式。我们的系统研究比较了数十种语言理解任务的预训练目标、架构、未标记数据集、迁移方法和其他因素。
引入的框架 T5 框架涉及一个将本文研究的方法结合在一起的训练程序。有关更多详细信息,请参阅研究论文。
Evaluation
测试数据、因素和指标
开发人员根据 24 项任务评估该模型,请参阅研究论文了解详细信息(https://jmlr.org/papers/volume21/20-074/20-074.pdf)。
结果
有关 T5-Base 的完整结果,请参阅研究论文表 14(https://jmlr.org/papers/volume21/20-074/20-074.pdf)。