Дообучение модели NER, обученной на своих тегах

Добрый день!

Столкнулся с проблемой, которую пока сам решить не смог. Я обучил модель для решения NER задачи со своими тегами. У меня большое количество тегов 194 (будет еще больше). Для обучения train_model со следующим конфигом:

{'dataset_reader': {'class_name': 'conll2003_reader',
  'data_path': '/content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/data',
  'dataset_name': 'ontonotes',
  'provide_pos': False},
 'dataset_iterator': {'class_name': 'data_learning_iterator'},
 'chainer': {'in': ['x'],
  'in_y': ['y'],
  'pipe': [{'class_name': 'torch_transformers_ner_preprocessor',
    'vocab_file': 'bert-base-cased',
    'do_lower_case': False,
    'max_seq_length': 512,
    'max_subword_length': 15,
    'token_masking_prob': 0.0,
    'in': ['x'],
    'out': ['x_tokens',
     'x_subword_tokens',
     'x_subword_tok_ids',
     'startofword_markers',
     'attention_mask',
     'tokens_offsets']},
   {'id': 'tag_vocab',
    'class_name': 'simple_vocab',
    'unk_token': ['O'],
    'pad_with_zeros': True,
    'save_path': '/content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/tags/tag.dict',
    'load_path': '/content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/tags/tag.dict',
    'fit_on': ['y'],
    'in': ['y'],
    'out': ['y_ind']},
   {'class_name': 'torch_transformers_sequence_tagger',
    'n_tags': '#tag_vocab.len',
    'pretrained_bert': 'bert-base-cased',
    'attention_probs_keep_prob': 0.5,
    'use_crf': True,
    'encoder_layer_ids': [-1],
    'optimizer': 'AdamW',
    'optimizer_parameters': {'lr': 2e-05,
     'weight_decay': 1e-06,
     'betas': [0.9, 0.999],
     'eps': 1e-06},
    'clip_norm': 1.0,
    'min_learning_rate': 1e-07,
    'learning_rate_drop_patience': 30,
    'learning_rate_drop_div': 1.5,
    'load_before_drop': True,
    'save_path': '/content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/model_data/model',
    'load_path': '/content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/model_data/model',
    'in': ['x_subword_tok_ids', 'attention_mask', 'startofword_markers'],
    'in_y': ['y_ind'],
    'out': ['y_pred_ind', 'probas']},
   {'ref': 'tag_vocab', 'in': ['y_pred_ind'], 'out': ['y_pred']}],
  'out': ['x_tokens', 'y_pred']},
 'train': {'epochs': 5,
  'batch_size': 20,
  'metrics': [{'name': 'ner_f1', 'inputs': ['y', 'y_pred']},
   {'name': 'ner_token_f1', 'inputs': ['y', 'y_pred']}],
  'validation_patience': 100,
  'val_every_n_batches': 20,
  'log_every_n_batches': 20,
  'show_examples': False,
  'pytest_max_batches': 2,
  'pytest_batch_size': 8,
  'evaluation_targets': ['valid', 'test'],
  'class_name': 'torch_trainer'},
 'metadata': {'variables': {'ROOT_PATH': '~/.deeppavlov',
   'DOWNLOADS_PATH': '~/.deeppavlov/downloads',
   'MODELS_PATH': '~/.deeppavlov/models',
   'TRANSFORMER': 'bert-base-cased',
   'MODEL_PATH': '~/.deeppavlov/models/ner_ontonotes_bert_torch_crf'},
  'download': [{'url': 'http://files.deeppavlov.ai/v1/ner/ner_ontonotes_bert_torch_crf.tar.gz',
    'subdir': '~/.deeppavlov/models/ner_ontonotes_bert_torch_crf'}],
  'requirements': ['/usr/local/lib/python3.10/dist-packages/deeppavlov/requirements/torchcrf.txt',
   '/usr/local/lib/python3.10/dist-packages/deeppavlov/requirements/sentencepiece.txt',
   '/usr/local/lib/python3.10/dist-packages/deeppavlov/requirements/protobuf.txt',
   '/usr/local/lib/python3.10/dist-packages/deeppavlov/requirements/transformers.txt',
   '/usr/local/lib/python3.10/dist-packages/deeppavlov/requirements/pytorch.txt']}}

Многие классы в обучающей выборке встречались редко, поэтому хотел дополнительно повысить качество предсказаний. Попытался запустить обучение на дополнительном датасете (в котором не все классы из изначального датасета), но выходит ошибка о разных размерах классов в первой выборке и во второй: size mismatch for classifier.bias: copying a param with shape/
На форуме я нашел схожий вопрос Дообучение ner_ontonotes_bert_mult_torch на своих данных. К этому решению я тоже пришел (добавить в новый датасет по 1 экземпляру каждого класса). Но хотелось бы более простое решение. Можно как то запустить дообучение с не полным списком классов в новом датасете?
Заранее, спасибо.

Добрый день @Roman,

Спасибо за проявленный интерес к библиотеке DeepPavlov.

Можно попробовать дообучить модель на меньше количестве классов следующим образом:

  1. Скопируйте веса вашей модели (файл model.pth.tar) со 194 тегами в новую папку без словаря tag.dict;
  2. Укажите путь к этой модели в конфигурационном файле в metadata-MODEL_PATH (например, /content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/model_data/model/);
  3. Для класса ‘torch_transformers_sequence_tagger’ в конфигурационном файле измените save и load_path (например, /content/drive/My Drive/Colab_Notebooks/product_parsing/deeppavlov/model_data/model2);
  4. Запустите обучение на новом датасете.

По данному алгоритму при запуске обучения будет создан новый словарь тегов, и конфликтов возникнуть не должно, а новая модель должна сохраниться в файл model2.pth.tar.