【云驻共创】入门大语言模型(LLM)——从开源模型出发的学习之旅
随着人工智能技术的不断发展,大语言模型(Large Language Model,简称LLM)作为自然语言处理领域的重要分支,受到了越来越多的关注。LLM以其强大的文本生成和理解能力,在对话系统、智能问答、文本摘要等多个领域展现出广阔的应用前景。介绍LLM的学习路径,并推荐一些开源模型和资源,帮助初学者顺利入门。
一、理解大语言模型(LLM)的基本概念
大语言模型(Large Language Model,简称LLM)是近年来自然语言处理领域的一大突破。那些具有巨大参数规模的深度学习模型,这些模型经过大量的文本数据训练,能够处理复杂的语言任务。国产的平台如盘古大模型、文心一言等都是LLM方面的。
在学习LLM之前,建议先掌握深度学习的基础知识。这是因为LLM本质上是深度学习模型的一种,理解神经网络、反向传播等基本概念有助于更好地掌握LLM的原理和训练方法。还需要熟悉Python等编程语言以及相关的深度学习框架(如TensorFlow或PyTorch),这将有助于在实际应用中实现和调试LLM模型。
二、选择合适的开源模型
对于初学者来说,从开源模型开始学习是一个很好的选择。这不仅可以降低学习成本,还能参与开源社区,了解最新的技术动态。以下是一些推荐的开源LLM模型:这里推荐一个华为的模型库https://pangu.huaweicloud.com/gallery/asset-list.html?type=model
1.GPT系列
由OpenAI开发的GPT(Generative Pre-trained Transformer)系列模型是大语言模型中的佼佼者。GPT-4和GPT-5在文本生成、对话系统等方面表现出色。虽然GPT-5的模型规模庞大,但OpenAI提供了API接口,方便开发者使用。Transformers不用多说了吧,你必须装一下
pip install transformers
演示一个用于加载GPT-2模型并生成文本
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# 初始化tokenizer和model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2-medium')
model = GPT2LMHeadModel.from_pretrained('gpt2-medium')
# 设置要生成文本的起始文本
prompt = "松山湖的扫地僧真是厉害,"
input_ids = tokenizer.encode(prompt, return_tensors='pt')
# 生成文本
generated = 0
num_generate = 10 # 生成文本的长度
# 设置模型为评估模式
model.eval()
with torch.no_grad():
while generated < num_generate:
output = model.generate(input_ids, max_length=len(input_ids[0]) + num_generate)
output = output[0, len(input_ids[0]):]
input_ids = torch.cat((input_ids, output),
text = tokenizer.decode(input_ids[0], skip_special_tokens=True)
generated += len(output)
print(text)
# 如果生成的文本包含句尾符号,可以提前结束生成
if tokenizer.eos_token_id in output:
break
加载了GPT-2的tokenizer和模型。定义了一个起始文本prompt,并使用tokenizer将其转换为模型可以理解的输入格式input_ids。将模型设置为评估模式,并禁用梯度计算,以便进行文本生成。在while循环中,使用模型的generate方法生成文本。该方法根据当前的input_ids生成接下来的文本,并将结果追加到input_ids中。使用tokenizer将生成的input_ids解码为文本,并打印出来。循环会一直进行,直到生成的文本长度达到num_generate指定的长度,或者生成的文本中包含句尾符号(检查生成的output中是否包含eos_token_id来实现)。推荐使用华为模型https://pangu.huaweicloud.com/gallery/asset-detail.html?id=7556d643-7b38-4f7f-83c5-68ca83826b0a
2.BERT
BERT(Bidirectional Encoder Representations from Transformers)是一个基于Transformer的双向编码器模型,适用于各种NLP任务,如文本分类、命名实体识别、问答等。使用BERT模型进行文本分类任务。BERT这里你要确保已经安装了Transformers库和torch库:(比上面的多一个torch)
pip install transformers torch
我在举个栗子编写文本分类:
import torch
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
from sklearn.model_selection import train_test_split
from torch.utils.data import DataLoader, TensorDataset
# 加载BERT tokenizer和预训练模型
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) # 假设是二分类任务
# 准备数据
# 这里使用自定义的数据集
sentences = [
"华为遥遥领先",
"人工智能未来的科技发展之路.",
"我应该在我的博客中多写一些关于大语言模型的算法吧",
# .
]
labels = [1, 0, 1, # ... 对应每个句子的标签,1表示正面,0表示负面
# ... 更多标签
]
# 将文本转换为BERT模型的输入格式
inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
# 划分数据集为训练集和测试集
inputs_train, inputs_test, labels_train, labels_test = train_test_split(inputs['input_ids'], torch.tensor(labels), test_size=0.2, random_state=42)
# 创建DataLoader
train_dataset = TensorDataset(inputs_train, labels_train)
train_dataloader = DataLoader(train_dataset, batch_size=16, shuffle=True)
# 设置训练参数
training_args = TrainingArguments(
output_dir='./results', # 输出目录
num_train_epochs=3, # 训练轮数
per_device_train_batch_size=16, # 批量大小
warmup_steps=500, # 学习率热身步数
weight_decay=0.01, # 权重衰减
logging_dir='./logs', # TensorBoard日志目录
logging_steps=10, # 日志记录步数
)
# 定义训练函数(这里使用Transformers提供的Trainer类)
trainer = Trainer(
model=model, # 模型
args=training_args, # 训练参数
train_dataset=train_dataset, # 训练数据集
)
# 开始训练
trainer.train()
# 评估模型(这里仅作为示例,你可能需要添加自己的评估逻辑)
trainer.evaluate()
# 使用模型进行预测(示例)
with torch.no_grad():
predictions = model(**inputs_test).logits.argmax(-1)
print(predictions) # 输出预测的标签
加载了BERT的tokenizer和预训练模型,使用tokenizer将文本转换为模型可以理解的输入格式,数据集划分为训练集和测试集,创建DataLoader用于训练。设置了训练参数,使用Transformers库提供的Trainer类来简化训练过程。Trainer类负责模型的训练、验证和保存。调用train()方法开始训练,并使用evaluate()方法进行模型评估。使用训练好的模型进行预测,基本上所有的模型都是这样处理的。你可以来华为云模型库来学习https://pangu.huaweicloud.com/gallery/asset-detail.html?id=bce58703-4a50-451f-a262-eff9aa8d640c
3.T5
T5(Text-to-Text Transfer Transformer)是一个通用的文本到文本转换的模型,由Google Research开发。它可以被用于各种NLP任务,如问答、摘要、翻译等,因为它将每个任务都看作是一个文本到文本的转换问题。和上面一样装一下Transformers库和torch库,命令参考上面的就不掩饰了。用T5搞一个文本生成看看
import torch
from transformers import T5Tokenizer, T5ForConditionalGeneration
# 加载T5 tokenizer和预训练模型
tokenizer = T5Tokenizer.from_pretrained('t5-small')
model = T5ForConditionalGeneration.from_pretrained('t5-small')
# 定义一个输入文本前缀
input_text = "请说一下华为在在人工智能方面的优势:"
# 使用tokenizer将输入文本转换为模型可接受的格式
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# 生成文本
output = model.generate(input_ids, max_length=50, num_beams=4, early_stopping=True)
# 使用tokenizer将生成的ids解码为文本
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
加载T5的tokenizer和预训练模型。定义了一个输入文本前缀,使用tokenizer将其转换为模型可接受的格式。model.generate 方法用于生成文本。max_length参数来限制生成的文本长度,num_beams参数用于设置beam search的宽度(在这里使用beam search来寻找最可能的文本生成路径),early_stopping参数用于在生成到句尾符号时提前停止生成。tokenizer将生成的模型输出ids解码为文本。
三、学习资源推荐
在深入学习大语言模型(LLM)的过程中,除了理论知识的掌握,实践经验和技能的积累同样重要。华为云作为领先的云服务提供商,不仅提供了丰富的云计算资源,还提供了多种学习资源,帮助开发者更好地学习和应用大语言模型。
1.华为云学堂
https://edu.huaweicloud.com/ 华为云学堂是华为云官方推出的在线教育平台,提供了大量关于人工智能和大数据的课程,其中就包括大语言模型的相关内容。在这里,你可以找到从基础知识到高级应用的完整课程体系,在线学习的方式,逐步掌握LLM的核心原理和应用技巧。
2.沙箱实验环境
其实这也是云学堂中的一部分我常用的哦,包括华为云还提供了沙箱实验环境,让开发者能够在真实的环境中实践大语言模型。华为云提供的云服务器和预置的大语言模型软件,可以轻松搭建起自己的LLM实验环境,进行模型的训练、调优和应用开发。这种实践性的学习方式有助于加深对LLM的理解,并提升实际应用的能力。https://lab.huaweicloud.com/experiment-detail_484 新手建议使用这个沙箱来学习以下。
3.华为开发者社区
https://bbs.huaweicloud.com/ 包括博客、论坛等邀请业内专家和学者分享大语言模型的最新研究成果和实践经验。活动不仅为你提供了与同行交流的机会,还能够帮助你了解LLM的最新发展动态和趋势。
四、实践ModelArts项目
结合华为云产品,实践项目来展示大语言模型(LLM)的应用。在这个项目中,使用华为云提供的ModelArts服务来训练一个LLM模型,并将其应用于文本生成任务。https://www.huaweicloud.com/product/modelarts.html
步骤一:搭建LLM训练环境
登录华为云账号,并创建一个ModelArts数据集。ModelArts是华为云提供的一站式AI开发平台,它提供了丰富的计算资源和预置的深度学习框架,方便快速搭建LLM训练环境。在ModelArts中,可以创建一个训练作业,并指定所需的计算资源(如CPU或GPU实例)和深度学习框架(如TensorFlow或PyTorch)。还需要配置代码仓库和依赖项,以便在训练过程中能够加载代码和所需的库。
步骤二:准备和预处理文本数据集
需要准备一个用于训练LLM的文本数据集。这个数据集可以是一组文章、对话文本或其他形式的自然语言文本。需要对这些文本进行预处理,包括分词、去除停用词、构建词汇表等操作,以便将其转换为模型可以接受的格式。https://console.huaweicloud.com/modelarts/?region=cn-north-4#/dataset/create
步骤三:训练LLM模型
一旦数据集准备好,就可以开始训练LLM模型了。在ModelArts中,编写一个训练脚本,该脚本将加载数据集、构建模型结构、定义损失函数和优化器,并进行模型的训练。以下是一个简单的示例代码,展示了如何使用PyTorch框架在ModelArts中训练一个基于Transformer架构的LLM模型:
import torch
import torch.nn as nn
import torch.optim as optim
from transformers import AutoTokenizer, AutoModelForCausalLM
from torch.utils.data import DataLoader, Dataset
# 加载预训练模型和分词器
tokenizer = AutoTokenizer.from_pretrained('gpt2-medium')
model = AutoModelForCausalLM.from_pretrained('gpt2-medium')
# 自定义数据集类
class TextDataset(Dataset):
def __init__(self, texts):
self.texts = texts
self.encoded_texts = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
def __len__(self):
return len(self.texts)
def __getitem__(self, idx):
return self.encoded_texts['input_ids'][idx]
# 加载和预处理数据集
texts = [...]
dataset = TextDataset(texts)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss(ignore_index=tokenizer.pad_token_id)
optimizer = optim.Adam(model.parameters(), lr=1e-5)
# 训练模型
num_epochs = 10
for epoch in range(num_epochs):
for batch in dataloader:
input_ids = batch
outputs = model(input_ids, labels=input_ids[:, 1:])
loss = criterion(outputs.logits.view(-1, model.config.vocab_size), input_ids[:, 1:].view(-1))
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')
# 保存模型
torch.save(model.state_dict(), 'llm_model.pth')
Hugging Face的Transformers库来加载预训练的GPT-2模型,定义了一个自定义的数据集类来加载和预处理文本数据。定义了损失函数和优化器,使用DataLoader来迭代数据批次进行模型的训练。将训练好的模型参数保存下来。
步骤四:使用训练好的模型进行文本生成
一旦模型训练完成,就可以加载模型并使用它进行文本生成。在ModelArts中,可以编写一个推理脚本,该脚本将加载训练好的模型,并接受用户输入的文本前缀作为生成文本的起点。模型将根据学习到的语言规律和语义信息生成后续的文本内容。
本文参与华为云社区【内容共创】活动第26期。
任务31:想学习大语言模型(LLM),应该从哪个开源模型开始?
- 点赞
- 收藏
- 关注作者
评论(0)