马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1. datasets 库核心方法
1.1. 列出数据集 使用 d atasets 库,你可以轻松列出全部 Hugging Face 平台上的数据集:
- from datasets import list_datasets
- # 列出所有数据集
- all_datasets = list_datasets()
- print(all_datasets)
复制代码 1.2. 加载数据集 你可以通过 load_dataset 方法加载任何数据集:
- from datasets import load_dataset
- # 加载GLUE数据集
- dataset = load_dataset("glue", "mrpc")
- print(dataset)
复制代码 1.3. 加载磁盘数据 你可以加载本地磁盘上的数据:
- from datasets import load_from_disk
- # 从本地磁盘加载数据集
- dataset = load_from_disk("./my_dataset")
- print(dataset)
复制代码 2. 分词工具与文字编码 2.1. 加载字典和分词工具 你可以使用 AutoTokenizer 自动加载分词工具:
- from transformers import AutoTokenizer
- # 加载中文BERT模型的分词器
- tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
复制代码 2.1. 批量编码句子 使用分词器,你可以批量对文本进行编码:
- # 批量编码句子
- sentences = ["我爱自然语言处理", "Hugging Face 很强大"]
- encoded_inputs = tokenizer(sentences, padding=True, truncation=True,
- return_tensors="pt")
- print(encoded_inputs)
复制代码 3. 模型微调的根本概念与流程
微调是指在预练习模型的基础上,通过进一步的练习来适应特定的卑鄙使命。BERT 模型通过预练习来 学习语言的通用模式,然后通过微调来适应特定使命,如情感分析、命名实体识别等。微调过程中,通 常冻结 BERT 的预练习层,只练习与卑鄙使命相干的层。本课件将先容怎样使用 BERT 模型进行情感分 析使命的微调练习。
4. 加载数据集 情感分析使命的数据通常包括文本及其对应的情感标签。使用 Hugging Face 的 datasets 库可以轻松地 加载和处理数据集
- from datasets import load_dataset
- # 加载数据集
- dataset = load_dataset('csv', data_files="data/ChnSentiCorp.csv")
- # 查看数据集信息
- print(dataset)
复制代码 4.1 数据集格式
Hugging Face 的 datasets 库支持多种数据集格式,如 CSV、JSON、TFRecord 等。在本案例中,使用 CSV 格式,CSV 文件应包罗两列:一列是文本数据,另一列是情感标签。
4.2 数据集信息
加载数据集后,可以查看数据集的根本信息,如数据集大小、字段名称等。这有助于我们了解数据的分 布情况,并在后续步调中进行适当的处理。
5. 制作 Dataset 加载数据集后,需要对其进行处理以适应模型的输入格式。这包括数据洗濯、格式转换等操作。
- 加载数据集后,需要对其进行处理以适应模型的输入格式。这包括数据清洗、格式转换等操作。
- from datasets import Dataset
- # 制作 Dataset
- dataset = Dataset.from_dict({
- 'text': ['位置尚可,但距离海边的位置比预期的要差的多', '5月8日付款成功,当当网显示5月10
- 日发货,可是至今还没看到货物,也没收到任何通知,简不知怎么说好!!!', '整体来说,本书还是不错
- 的。至少在书中描述了许多现实中存在的司法系统方面的问题,这是值得每个法律工作者去思考的。尤其是让
- 那些涉世不深的想加入到律师队伍中的年青人,看到了社会特别是中国司法界真实的一面。缺点是:书中引用
- 了大量的法律条文和司法解释,对于已经是律师或有一定工作经验的法律工作者来说有点多余,而且所占的篇
- 幅不少,有凑字数的嫌疑。整体来说还是不错的。不要对一本书提太高的要求。'],
- 'label': [0, 1, 1] # 0 表示负向评价,1 表示正向评价
- })
- # 查看数据集信息
- print(dataset)
复制代码 5.1 数据集字段
在制作 Dataset 时,需定义数据集的字段。在本案例中,定义了两个字段: text (文本)和 label (情感标签)。每个字段都需要与模型的输入和输出匹配。
5.2 数据集信息
制作 Dataset 后,可以通过 dataset.info 等方法查看其大小、字段名称等信息,以确保数据集的正确 性和完备性。
6. vocab 字典操作
在微调 BERT 模型之前,需要将模型的词汇表(vocab)与数据集中的文本匹配。这一步调确保输入的 文本能够被正确转换为模型的输入格式。
- from transformers import BertTokenizer
- # 加载 BERT 模型的 vocab 字典
- tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
- # 将数据集中的文本转换为 BERT 模型所需的输入格式
- dataset = dataset.map(lambda x: tokenizer(x['text'], return_tensors="pt"),
- batched=True)
- # 查看数据集信息
- print(dataset)
复制代码 6.1 词汇表(vocab)
BERT 模型使用词汇表(vocab)将文本转换为模型可以理解的输入格式。词汇表包罗全部模型已知的单 词及其对应的索引。确保数据集中的全部文本都能找到对应的词汇索引是至关重要的。
6.2 文本转换
使用 tokenizer 将文天职割成词汇表中的单词,并转换为相应的索引。此步调需要确保文本长度、特殊 字符处理等都与 BERT 模型的预练习设置相一致。
7. 卑鄙使命模型设计
在微调 BERT 模型之前,需要设计一个适应情感分析使命的卑鄙模型布局。通常包括一个或多个全连接 层,用于将 BERT 输出的特征向量转换为分类效果。
- from transformers import BertModel
- import torch.nn as nn
- class SentimentAnalysisModel(nn.Module):
- def __init__(self):
- super().__init__()
- self.bert = BertModel.from_pretrained('bert-base-chinese')
- self.drop_out = nn.Dropout(0.3)
- self.linear = nn.Linear(768, 2) # 假设情感分类为二分类
- def forward(self, input_ids, attention_mask):
- _, pooled_output = self.bert(
- input_ids=input_ids,
- attention_mask=attention_mask,
- return_dict=False
- )
- output = self.drop_out(pooled_output)
- return self.linear(output)
复制代码 7.1 模型布局
卑鄙使命模型通常包括以下几个部分: BERT 模型:用于生成文本的上下文特征向量。 Dropout 层:用于防止过拟合,通过随机抛弃一部分神经元来提高模型的泛化本领。 全连接层:用于将 BERT 的输出特征向量映射到具体的分类使命上。
7.2 模型初始化
使用 接层。初始化时,需要根据卑鄙使命的需求,定义合适的输出维度。 BertModel.from_pretrained() 方法加载预练习的 BERT 模型,同时也可以初始化自定义的全连
8. 自定义模型练习
模型设计完成后,进入练习阶段。通过数据加载器(DataLoader)高效地批量处理数据,并使用优化器 更新模型参数
- from torch.utils.data import DataLoader
- from transformers import AdamW
- # 实例化 DataLoader
- data_loader = DataLoader(dataset, batch_size=16, shuffle=True)
- # 初始化模型和优化器
- model = SentimentAnalysisModel()
- optimizer = AdamW(model.parameters(), lr=5e-5)
- # 训练循环
- for epoch in range(3): # 假设训练 3 个 epoch
- model.train()
- for batch in data_loader:
- optimizer.zero_grad()
- outputs = model(input_ids=batch['input_ids'],
- attention_mask=batch['attention_mask'])
- loss = nn.CrossEntropyLoss()(outputs, batch['labels'])
- loss.backward()
- optimizer.step()
复制代码 8.1 数据加载
使用 DataLoader 实现批量数据加载。 DataLoader 自动处理数据的批处理和随机打乱,确保练习的高 效性和数据的多样性。
8.2 优化器
AdamW 是一种实用于 BERT 模型的优化器,联合了 Adam 和权重衰减的特点,能够有效地防止过拟合。
8.3 练习循环
练习循环包罗前向流传(forward pass)、损失盘算(loss calculation)、反向流传(backward pass)、参数更新(parameter update)等步调。每个 epoch 都会对整个数据集进行一次遍历,更新 模型参数。通常练习过程中会跟踪损失值的变化,以判断模型的收敛情况。
9. 最终效果评估与测试
在模型练习完成后,加载模型练习权重测试其效果:
|