You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:08:34