Анализ тональности с помощью rusentimet_convers_bert

Добрый день. Хочу натренировать модель rusentiment_convers_bert на собственных данных для определения тональности. В конфиге модели в разделе dataset_reader я изменила путь к своим файлам и названия файлов для теста и тренировки. Подскажите, пожалуйста, что еще нужно поменять, потому что результат получаю неудовлетворительный и возникает ошибка:

2021-10-08 12:59:26.913 ERROR in ‘deeppavlov.core.common.params’[‘params’] at line 112: Exception in <class ‘deeppavlov.models.bert.bert_classifier.BertClassifierModel’>
Traceback (most recent call last):
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1356, in _do_call
return fn(*args)
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1341, in _run_fn
options, feed_dict, fetch_list, target_list, run_metadata)
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1429, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [3] rhs shape= [5]
[[{{node save/Assign_199}}]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/training/saver.py”, line 1286, in restore
{self.saver_def.filename_tensor_name: save_path})
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 950, in run
run_metadata_ptr)
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1173, in _run
feed_dict_tensor, options, run_metadata)
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1350, in _do_run
run_metadata)
File “/home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/tensorflow/python/client/session.py”, line 1370, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [3] rhs shape= [5]
[[node save/Assign_199 (defined at home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/deeppavlov/core/models/tf_model.py:54) ]]

Errors may have originated from an input operation.
Input Source operations connected to node save/Assign_199:
output_bias (defined at home/tanya/PycharmProjects/Semantic/venv/lib/python3.6/site-packages/deeppavlov/models/bert/bert_classifier.py:128)

Добрый день,

похоже на то, что сначала подгружается модель обученная на другом датасете.
Попробуйте поменять еще и пути до весов модели (save/load_path).

Добрый день. а подскажите, пожалуйста, save/load_path - это пусть к моей модели rusentiment_convers_bert? И еще один вопрос: я изменила save/load_path, но теперь при каждом запуске я получаю разные ответы. Подскажите, пожалуйста, почему так происходит?

save/load_path - это пусть к моей модели rusentiment_convers_bert?

Это путь по которому будет сохранена обученная модель на вашем датасете и по которому она потом будет загружаться для использования.

я изменила save/load_path, но теперь при каждом запуске я получаю разные ответы. Подскажите, пожалуйста, почему так происходит?

По этим путям есть обученная модель? Если нет, то модель инициализируется каждый раз случайными весами и получаются случайные предсказания. Нужно запустить обучение с измененными путями.

Спасибо, что помогаете!

Я немного не понимаю…в данном случае моя обученная модель находится в разделе “pretrained_bert”? и следовательно save/load_path нужно заменить на такой же путь, как и в pretrained_bert?
“bert_config_file”: “{DOWNLOADS_PATH}/bert_models/ru_conversational_cased_L-12_H-768_A-12/bert_config.json”,
“pretrained_bert”: “{DOWNLOADS_PATH}/bert_models/ru_conversational_cased_L-12_H-768_A-12/bert_model.ckpt”

Можете сюда скинуть ваш конфигурационный файл?

{
“dataset_reader”: {
“class_name”: “basic_classification_reader”,
“x”: “text”,
“y”: “label”,
“data_path”: “/home/tanya/PycharmProjects/Semantic”,
“train”: “train_main1.csv”,
“test”: “test_main1.csv”
},
“dataset_iterator”: {
“class_name”: “basic_classification_iterator”,
“seed”: 42,
“split_seed”: 23,
“field_to_split”: “train”,
“split_fields”: [
“train”,
“valid”
],
“split_proportions”: [
0.9,
0.1
]
},
“chainer”: {
“in”: [
“x”
],
“in_y”: [
“y”
],
“pipe”: [
{
“class_name”: “bert_preprocessor”,
“vocab_file”: “{DOWNLOADS_PATH}/bert_models/ru_conversational_cased_L-12_H-768_A-12/vocab.txt”,
“do_lower_case”: false,
“max_seq_length”: 64,
“in”: [
“x”
],
“out”: [
“bert_features”
]
},
{
“id”: “classes_vocab”,
“class_name”: “simple_vocab”,
“fit_on”: [
“y”
],
“save_path”: “{MODEL_PATH}/classes.dict”,
“load_path”: “{MODEL_PATH}/classes.dict”,
“in”: “y”,
“out”: “y_ids”
},
{
“in”: “y_ids”,
“out”: “y_onehot”,
“class_name”: “one_hotter”,
“depth”: “#classes_vocab.len”,
“single_vector”: true
},
{
“class_name”: “bert_classifier”,
“n_classes”: “#classes_vocab.len”,
“return_probas”: true,
“one_hot_labels”: true,
“bert_config_file”: “{DOWNLOADS_PATH}/bert_models/ru_conversational_cased_L-12_H-768_A-12/bert_config.json”,
“pretrained_bert”: “{DOWNLOADS_PATH}/bert_models/ru_conversational_cased_L-12_H-768_A-12/bert_model.ckpt”,
“save_path”: “{MODEL_PATH}/model”,
“load_path”: “{MODEL_PATH}/model”,
“keep_prob”: 0.5,
“learning_rate”: 1e-05,
“learning_rate_drop_patience”: 5,
“learning_rate_drop_div”: 2.0,
“in”: [
“bert_features”
],
“in_y”: [
“y_onehot”
],
“out”: [
“y_pred_probas”
]
},
{
“in”: “y_pred_probas”,
“out”: “y_pred_ids”,
“class_name”: “proba2labels”,
“max_proba”: true
},
{
“in”: “y_pred_ids”,
“out”: “y_pred_labels”,
“ref”: “classes_vocab”
}
],
“out”: [
“y_pred_labels”
]
},
“train”: {
“batch_size”: 64,
“epochs”: 100,
“metrics”: [
“f1_weighted”,
“f1_macro”,
“accuracy”,
{
“name”: “roc_auc”,
“inputs”: [
“y_onehot”,
“y_pred_probas”
]
}
],
“show_examples”: false,
“pytest_max_batches”: 2,
“validation_patience”: 5,
“val_every_n_epochs”: 1,
“log_every_n_epochs”: 1,
“evaluation_targets”: [
“train”,
“valid”,
“test”
],
“tensorboard_log_dir”: “{MODEL_PATH}/”
},
“metadata”: {
“variables”: {
“ROOT_PATH”: “~/.deeppavlov”,
“DOWNLOADS_PATH”: “{ROOT_PATH}/downloads”,
“MODELS_PATH”: “{ROOT_PATH}/models”,
“MODEL_PATH”: “{MODELS_PATH}/classifiers/rusentiment_convers_bert_v0/”
},
“download”: [
{
“url”: “http://files.deeppavlov.ai/deeppavlov_data/bert/ru_conversational_cased_L-12_H-768_A-12.tar.gz”,
“subdir”: “{DOWNLOADS_PATH}/bert_models”
},
{
“url”: “http://files.deeppavlov.ai/deeppavlov_data/classifiers/rusentiment_convers_bert_v0.tar.gz”,
“subdir”: “{MODELS_PATH}/classifiers/”
}
]
}
}

ага, тут есть

"MODEL_PATH": "{MODELS_PATH}/classifiers/rusentiment_convers_bert_v0/"

тогда достаточно заменить его на, например:

"MODEL_PATH": "{MODELS_PATH}/classifiers/my_model/"

и запустить обучение.

Пути до предобученной модели BERT менять не нужно.

Все заработало. Спасибо Вам огромное за помощь!

И еще один вопрос. Модель deeppavlov разделяет тексты на 5 категорий. обязательно ли в собственных данных тексты иметь тоже по 5 категориям. или можно оставить только три (позитив, негатив, нейтрально)?

Отлично! Рад, что все получилось.

В данном конфигурационном файле был использован только предобученный BERT (на задачах masked language modeling и next sentence prediction, а не на сентименте), поэтому он обучался задаче сентимента только на ваших данных и только на три класса, которые представлены в данных.

Поняла, еще раз спасибо!