Классификация RoBERTa RuntimeError: фигура '[-1, 9]' недопустима для ввода размера 8 - PullRequest
0 голосов
/ 10 января 2020
    m = MultiLabelBinarizer()

    X = pd.read_csv('data/data.csv', sep=None, engine='python')
    X = X.dropna()

    Y_train = m.fit_transform(X['labels'])
    Y_train2 = [list(i) for i in Y_train]

    data = pd.DataFrame({'text': pd.Series(X[text_col]), 'labels': Y_train2})
    data = data.dropna()

    train_df, eval_df = train_test_split(data, test_size=0.2)

    numLabels = len(pd.unique(X['labels])) # count of the labels

    model = MultiLabelClassificationModel('roberta', 'roberta-base', num_labels=numLabels, use_cuda=False)

    model.train_model(pd.DataFrame(train_df))

Моя структура данных для столбца метки: [[0,1,0,0,0,1,0,0], [0,1,1,0,0,1,0, 0], [0,0,0,0,0,0,0,1] ....] для каждой строки существует один список меток, например [0,1,0,0,0,1,0, 0] в столбце метки

А для текстов в строке есть один текст (газетная статья).

(получено из этого источника: https://github.com/ThilinaRajapakse/simpletransformers#minimal -start- for-multilabel-классификация )

модель можно обучить, если я обучу ее только с 4 записями. Но когда я хочу обучить его всему набору данных, это дает мне следующее: RuntimeError: shape '[-1, 9]' недопустимо для ввода размера 8:

 File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/simpletransformers/classification/multi_label_classification_model.py", line 121, in train_model
    return super().train_model(train_df, multi_label=multi_label, eval_df=eval_df, output_dir=output_dir, show_running_loss=show_running_loss, args=args)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/simpletransformers/classification/classification_model.py", line 208, in train_model
    global_step, tr_loss = self.train(train_dataset, output_dir, multi_label=multi_label, show_running_loss=show_running_loss, eval_df=eval_df, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/simpletransformers/classification/classification_model.py", line 306, in train
    outputs = model(**inputs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in __call__
    result = self.forward(*input, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/simpletransformers/custom_models/models.py", line 117, in forward
    loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1, self.num_labels))
RuntimeError: shape '[-1, 9]' is invalid for input of size 8

Я понятия не имею, где это Размер 8 и что делать сейчас, так как он работает с очень небольшим количеством записей. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 03 мая 2020

[0,1,0,0,0,1,0,0] - это 8 размер, но ваша модель рассчитана на размер 9. Это означает, что ваш numLabels = 9. Если у вас 9 классов, то label-list в label-colum должен быть таким: [0,1,0,0,0,1,0,0,0]. Но я думаю, что вам просто нужно передать num_labels как 8

...