Прежде всего, извините за любые ошибки новичка, которые я сделал.Но я не смог разобраться и не смог найти источник специально для библиотеки 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']]]
Мои вопросы (прежде чем я углублюсь в детали):
- Возможно ли это? И я понял, что не могу использовать образцы типа "Раунд 23/22; 24,9 х 12,2 х 12,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'