Python Colab中tokenize_and_split_data未定义及utilities库问题求助
解决NameError及数据集划分问题
问题根源
你注释掉了from utilities import *,导致tokenize_and_split_data函数未被导入,且无法安装utilities库,因此需要手动实现该函数的核心功能。
解决方案:手动实现数据集加载、分词与划分
以下是替换原有代码的完整实现,包含数据加载(支持本地文件或Hugging Face数据集)、分词、划分训练测试集的逻辑:
import datasets import tempfile import logging import random import config import os import yaml import time import torch import transformers import pandas as pd import jsonlines from sklearn.model_selection import train_test_split from transformers import AutoTokenizer from transformers import AutoModelForCausalLM from transformers import TrainingArguments logger = logging.getLogger(__name__) global_config = None model_name = "EleutherAI/pythia-70m" # 补充定义缺失变量(根据你的实际情况修改值) use_hf = False # True表示用Hugging Face数据集,False用本地文件 dataset_path = "your_dataset_file.jsonl" # 替换为你的数据集路径 training_config = { "model": { "pretrained_name": model_name, "max_length" : 2048 }, "datasets": { "use_hf": use_hf, "path": dataset_path }, "verbose": True } tokenizer = AutoTokenizer.from_pretrained(model_name) tokenizer.pad_token = tokenizer.eos_token # 手动实现tokenize_and_split_data函数 def tokenize_and_split_data(config, tokenizer): max_length = config["model"]["max_length"] use_hf = config["datasets"]["use_hf"] data_path = config["datasets"]["path"] # 加载数据 if use_hf: dataset = datasets.load_dataset(data_path) raw_data = dataset["train"] else: raw_data = [] with jsonlines.open(data_path) as reader: for line in reader: raw_data.append(line) raw_data = pd.DataFrame(raw_data) # 分词函数 def tokenize_function(examples): # 假设数据文本字段为"text",根据实际情况修改 texts = examples["text"] if isinstance(examples, dict) else examples["text"].tolist() return tokenizer( texts, truncation=True, max_length=max_length, padding="max_length", return_tensors="pt" ) # 分词处理 if use_hf: tokenized_data = raw_data.map(tokenize_function, batched=True) else: tokenized_data = tokenize_function(raw_data) tokenized_data = datasets.Dataset.from_dict(tokenized_data) # 划分训练集和测试集(比例可通过test_size调整) train_test_split = tokenized_data.train_test_split(test_size=0.2) train_dataset = train_test_split["train"] test_dataset = train_test_split["test"] return train_dataset, test_dataset # 调用自定义函数 train_dataset, test_dataset = tokenize_and_split_data(training_config, tokenizer) print(train_dataset) print(test_dataset)
关键说明
- 需根据实际数据集情况修改
use_hf和dataset_path的值。 - 分词逻辑默认使用
text作为文本字段,若你的数据集字段名不同(如content),需修改tokenize_function中的字段名。 - 本地数据加载默认支持JSONL格式,若使用CSV,可替换为
pd.read_csv(data_path)。 - 数据集划分比例设为8:2,可通过
test_size参数调整。
内容的提问来源于stack exchange,提问作者Gha
相关产品推荐
相关产品推荐

