Как тренировать свою модель в диппавлове (NER) Python 3 - PullRequest
0 голосов
/ 26 сентября 2019

Прежде всего, извините за любые ошибки новичка, которые я сделал.Но я не смог разобраться и не смог найти источник специально для библиотеки deeppavlov (NER) .Я пытаюсь тренировать ner_ontonotes_bert_mult, как описано здесь .Я полагаю, что с его контрольной точки его можно научить распознавать некоторые конкретные шаблоны, такие как

"Round 23/22; 24,9 x 12,2 x 12,3"

как

[[['Round', '23/22', ';', '24,9 x 12,2 x 12,3']], [['B-PRODUCT', 'I-PRODUCT', 'B-QUANTITY']]]

Мои вопросы (прежде чем я углублюсь в детали):

  1. Возможно ли это? И я понял, что не могу использовать образцы типа "Раунд 23/22; 24,9 х 12,2 х 12,3".Мне нужно, чтобы они были в полных предложениях.
  2. Где я могу найти больше информации о ней, конкретно связанной с моделями (ами) Диппавлова?
  3. Как я могу обучить предварительно обученную модель диппавлова распознавать мои пользовательские образцы?

Я даже не понимаю, возможно ли это, но я решил попробовать и подготовил 3 .txt файла как "train.txt", "test.txt" и "validation.txt" как , описанные на веб-странице Дипповлова..И я положил их в папку '~/.deeppavlov/downloads/ontonotes/ner_ontonotes_bert_mult'.Мой набор данных выглядит так:

Round B-PRODUCT
23/22 I-PRODUCT
24,9 x 12,2 x 12,3 B-QUANTITY
Ring B-PRODUCT
HDFAA I-PRODUCT
12,7 x 10 B-QUANTITY

и так далее ... Вот код, который я пытаюсь обучить:

import os
# Force tensorflow to use CPU instead of GPU.
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
from deeppavlov import configs, train_model
from deeppavlov.core.commands.utils import parse_config

config_dict = parse_config(configs.ner.ner_ontonotes_bert_mult)

print(config_dict['dataset_reader']['data_path'])

from deeppavlov import configs, train_model

ner_model = train_model(configs.ner.ner_ontonotes_bert_mult)

Но я получаю эту ошибку:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [3] rhs shape= [37]
     [[{{node save/Assign_280}}]]

Полный возврат:

2019-09-26 15:50:27.63 ERROR in 'deeppavlov.core.common.params'['params'] at line 110: Exception in <class 'deeppavlov.models.bert.bert_ner.BertNerModel'>
Traceback (most recent call last):
  File "/home/custom_user/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1356, in _do_call
    return fn(*args)
  File "/home/custom_user/.local/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/custom_user/.local/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= [37]
     [[{{node save/Assign_280}}]]

ОБНОВЛЕНИЕ 2:

И я понял, что не могу использовать сэмплы типа "Раунд 23/22;24,9 х 12,2 х 12,3 ".Мне нужно, чтобы они были в полных предложениях.

ОБНОВЛЕНИЕ:

Похоже, это происходит из-за моего набора данных.Мой пользовательский набор данных имеет только 3 тега (B-PRODUCT, I-PRODUCT и B-QUANTITY), но у предварительно обученной модели их 37.Все доступные теги можно найти здесь под предложением "The list of available tags and their descriptions are presented below.".18 основных тегов (с тегами B и I 36) и тег O («O» означает отсутствие объекта.)). Общее количество всех 37 тегов должно присутствовать в наборе данных. Мне удалось пропустить эту ошибку, добавив фиктивные предложения, пометив их все отсутствующими тегами.Это ужасный обходной путь, так как я охотно разрушаю свой собственный набор данных.Я все еще ищу «логичный» способ тренировки ...

PS: Теперь я получаю эту ошибку.

Traceback (most recent call last):
  File "/home/custom_user/.PyCharm2019.2/config/scratches/scratch_9.py", line 13, in <module>
    ner_model = train_model(configs.ner.ner_ontonotes_bert_mult)
  File "/home/custom_user/.local/lib/python3.6/site-packages/deeppavlov/__init__.py", line 31, in train_model
    train_evaluate_model_from_config(config, download=download, recursive=recursive)
  File "/home/custom_user/.local/lib/python3.6/site-packages/deeppavlov/core/commands/train.py", line 121, in train_evaluate_model_from_config
    trainer.train(iterator)
  File "/home/custom_user/.local/lib/python3.6/site-packages/deeppavlov/core/trainers/nn_trainer.py", line 294, in train
    self.train_on_batches(iterator)
  File "/home/custom_user/.local/lib/python3.6/site-packages/deeppavlov/core/trainers/nn_trainer.py", line 234, in train_on_batches
    self._validate(iterator)
  File "/home/custom_user/.local/lib/python3.6/site-packages/deeppavlov/core/trainers/nn_trainer.py", line 150, in _validate
    metrics = list(report['metrics'].items())
AttributeError: 'NoneType' object has no attribute 'items'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...