行业知识
bert模型实践
2026-10-26 06:08:00
来源:互联网转载
数据集构造
无论是机器学习还是深度学习对于数据集的构造都是十分重要。
()现记录一下PyTorch 的 torch.utils.data.Dataset 类的子类。Dataset 类是PyTorch框架中用于处理数据的基本组件,它允许用户定义自己的数据集类,以满足特定任务的需求。
Dataset是一个抽象基类,用于创建自定义数据集。它定义了两个核心方法:getitem 和 len,它们是所有数据集必须实现的方法。
()类定子类:
重写 init 方法来初始化数据集,可能需要加载数据、解析数据等。
重写 getitem 方法来根据索引返回数据集中的一个样本,通常会包含数据的加载、解码等操作。
重写 len 方法来返回数据集中样本的数量。
import pandas as pdfrom transformers import BertTokenizerFastimport torch# 读取数据df = pd.read_csv("./a.csv", encoding="utf-8")texts = df["content"][:10].tolist()labels = df["punish_result"][:10].tolist()texts = list(map(lambda x: str(x), texts))# texts和labels是一个list,可以自己构造一个# Hugging Face下载这个模型google-bert/bert-base-chinesemodel_name = "./bert-base-chinese" # 加载分词器tokenizer = BertTokenizerFast.from_pretrained(model_name)# 对文本进行编码# truncation=True 文本超过max_length进行截断处理# padding=True 文本不足max_length进行pad处理 补0train_encodings = tokenizer(texts, truncation=True, padding=True, max_length=32)# 封装数据为PyTorch Datasetclass TextDataset(torch.utils.data.Dataset): def __init__(self, encodings, labels): self.encodings = encodings self.labels = labels def __getitem__(self, idx): # item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} # 等价上面注释写法,for循环比较好理解 item = {} for key, val in self.encodings.items(): item[key] = torch.tensor(val[idx]) item["labels"] = torch.tensor(self.labels[idx]) return item def __len__(self): return len(self.labels)train_dataset = TextDataset(train_encodings, labels)for dta in train_dataset: print(dta) break# 打印数据如下:# {'input_ids': tensor([ 101, 1585, 511, 872, 1962, 8024, 2769, 6821, 6804, 3221, 976, 6858,# 7599, 6392, 1906, 4638, 511, 2769, 2682, 7309, 671, 678, 8024, 1493,# 6821, 6804, 7444, 6206, 6821, 671, 1779, 102]),# 'token_type_ids': tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,# 0, 0, 0, 0, 0, 0, 0, 0]),# 'attention_mask': tensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,# 1, 1, 1, 1, 1, 1, 1, 1]),# 'labels': tensor(0)# } 上述代码主要通过加载bert-base-chinese模型的分词器处理原始数据,之后实现一个Dataset的子类将数据封装到PyTorch框架可识别数据结构。