gpt4 book ai didi

python-3.x - 如何在 Deeppavlov (NER) Python 3 中训练模型

转载 作者:行者123 更新时间:2023-12-02 19:51:20 25 4
gpt4 key购买 nike

首先,对于我所犯的任何新手错误表示歉意。但我无法弄清楚也找不到专门针对 deeppavlov (NER) 的来源图书馆。我正在尝试按照描述训练 ner_ontonotes_bert_mult here 。我想它可以从检查点进行训练,使其识别一些特定的模式,例如;

"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. 这可能吗?我意识到我不能使用“Round 23/22; 24,9 x 12,2 x 12,3”这样的样本。我需要它们是完整的句子。
  2. 在哪里可以找到与 Deeppavlov 模型相关的更多信息?
  3. 如何训练预训练的 deeppavlov 模型来识别我的自定义模式?

我什至不明白是否可能,但我决定放弃它并准备了 3 个 .txt 文件作为 "train.txt", “test.txt”“validation.txt”described in deeppovlov web page 。我将它们放在文件夹 '~/.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:

我意识到我不能使用“Round 23/22; 24,9 x 12,2 x 12,3”这样的样本。我需要它们是完整的句子。

更新:

这似乎是由于我的数据集而发生的。我的自定义数据集只有 3 个标签(B-PRODUCTI-PRODUCTB-QUANTITY),但预训练模型有 37 个他们。所有可用标签均可找到 here“可用标签列表及其描述如下。” 的句子下。 18个主标签(其中BI 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'

最佳答案

这里至少有两个问题:
1.代替validation.txt应该有一个valid.txt文件;
2.您正在尝试重新训练在具有不同标签集的不同数据集上预训练的模型,这是没有必要的。

要从头开始训练模型,您可以执行以下操作:

import json
from deeppavlov import configs, build_model, train_model

with configs.ner.ner_ontonotes_bert_mult.open(encoding='utf8') as f:
ner_config = json.load(f)

ner_config['dataset_reader']['data_path'] = '~/my_data_dir/' # directory with train.txt, valid.txt and test.txt files
ner_config['metadata']['variables']['NER_PATH'] = '~/where_to_save_the_model/'
ner_config['metadata']['download'] = [ner_config['metadata']['download'][-1]] # do not download the pretrained ontonotes model

ner_model = train_model(ner_config, download=True)



另一件可能出错的事情是标记化: "Round 23/22; 24,9 x 12,2 x 12,3"将按模型拆分为 ['Round', '23', '/', '22', ';', '24', ',', '9', 'x', '12', ',', '2', 'x', '12', ',', '3']而不是['Round', '23/22', ';', '24,9 x 12,2 x 12,3']

但是您可以预先标记您的文本:

ner_model([['Round', '23/22', ';', '24,9 x 12,2 x 12,3']])

关于python-3.x - 如何在 Deeppavlov (NER) Python 3 中训练模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com