使用BERT做推文情感分析触发tokenize_data意外参数batched报错
报错根因
你混用了不同库的API参数,本质是参考教程时没有注意数据对象类型的区别:
- 你用
pd.read_csv读取得到的是Pandas DataFrame对象,它的apply方法原生不支持batched、remove_columns这两个入参,传入未定义的关键字参数就会抛出你看到的TypeError。 batched=True批量处理、remove_columns自动删列的参数,是Hugging Face Datasets库中Dataset.map()方法的专属参数,仅能在HF的Dataset对象上调用时生效。
修复方案
优先选择将Pandas DataFrame转为Hugging Face Dataset对象再做处理,这种方式处理完的数据集可以直接适配Transformers库的Trainer训练管线,不需要额外做格式转换,修改后的可运行代码如下:
import pandas as pd from transformers import AutoTokenizer from datasets import Dataset path = "/content/drive/MyDrive/CSV/test.csv" df = pd.read_csv(path) tokenizer = AutoTokenizer.from_pretrained('bert-base-cased') def transform_labels(example): label = example['Sentiment'] num_map = { 'Positive': 0, 'Negative': 1, 'Neutral': 2, 'Extremely Positive': 3, 'Extremely Negative':4 } return {'labels': num_map[label]} def tokenize_data(example): # 补充truncation=True,避免超过BERT最大序列长度的文本触发报错 return tokenizer(example['OriginalTweet'], padding='max_length', truncation=True) # 转换为HF Dataset格式 dataset = Dataset.from_pandas(df) # 批量分词 tokenized_dataset = dataset.map(tokenize_data, batched=True) # 转换标签并移除冗余列 remove_columns = ['UserName', 'ScreenName', 'Location', 'TweetAt', 'OriginalTweet', 'Sentiment'] final_dataset = tokenized_dataset.map(transform_labels, remove_columns=remove_columns)
补充说明:如果你坚持只用Pandas做数据处理,需要删掉
apply中所有不支持的参数,逐行重写分词、标签转换逻辑,但处理完的结果不能直接传入Transformers的训练接口,需要额外做格式对齐,性价比很低,不推荐使用。
内容的提问来源于stack exchange,提问作者user14489561
相关产品推荐
相关产品推荐

