【问题标题】:Encoding/tokenizing dataset dictionary (BERT/Huggingface)编码/标记数据集字典(BERT/Huggingface)
【发布时间】:2021-10-20 08:43:14
【问题描述】:

我正在尝试微调我的情绪分析模型。因此,我将我的 pandas 数据框(评论列,情绪分数列)拆分为训练和测试数据框,并将所有内容转换为数据集字典:

#Creating Dataset Objects
dataset_train = datasets.Dataset.from_pandas(training_data)
dataset_test = datasets.Dataset.from_pandas(testing_data)

#Get rid of weird columns
dataset_train = dataset_train.remove_columns('__index_level_0__')
dataset_test = dataset_test.remove_columns('__index_level_0__')

#Create Dataset Dictionary
data_dict = datasets.DatasetDict({"train":dataset_train,"test":dataset_test})

我正在将所有内容转换为数据集字典,因为我或多或少地遵循了一个代码并将其转移到我的问题上。无论如何,我正在定义要标记的函数:

from transformers import AutoModelForSequenceClassification
from transformers import Trainer, TrainingArguments
from sklearn.metrics import accuracy_score, f1_score

num_labels = 5
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
batch_size = 16
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)


def tokenize(batch):
    return tokenizer(batch, padding=True, truncation=True)

然后调用函数:


data_encoded = data_dict.map(tokenize, batched=True, batch_size=None)

在这一切之后我得到了这个错误:

ValueError: text input must of type str (single example), List[str] (batch or single pretokenized example) or List[List[str]] (batch of pretokenized examples).

我错过了什么?抱歉,我对整个 Huggingface 基础设施完全陌生……

【问题讨论】:

    标签: bert-language-model huggingface-tokenizers huggingface-datasets fine-tune


    【解决方案1】:

    我自己发现了错误,因为我必须指定必须标记化的列。正确的 Tokenizer 函数是:

    def tokenize(batch):
        return tokenizer(batch["text"], padding=True, truncation=True)
    

    而不是

    def tokenize(batch):
        return tokenizer(batch, padding=True, truncation=True)
    

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 2021-02-12
      • 2022-06-14
      • 2020-09-24
      • 2021-04-29
      • 2022-10-22
      • 2021-01-17
      • 2020-10-07
      • 2022-07-18
      相关资源
      最近更新 更多