Как разрешить кореференции без Интернета с помощью AllenNLP и coref-spanbert-large?
Требуется разрешить кореференции без Интернета с использованием модели AllenNLP и coref-spanbert-large. Я пытаюсь сделать это так, как описано здесь https://demo.allennlp.org/coreference-resolution
Мой код:
from allennlp.predictors.predictor import Predictor
import allennlp_models.tagging
predictor = Predictor.from_path(r"C:\Users\aap\Desktop\coref-spanbert-large-2021.03.10.tar.gz")
example = 'Paul Allen was born on January 21, 1953, in Seattle, Washington, to Kenneth Sam Allen and Edna Faye Allen.Allen attended Lakeside School, a private school in Seattle, where he befriended Bill Gates, two years younger, with whom he shared an enthusiasm for computers.'
pred = predictor.predict(document=example)
coref_res = predictor.coref_resolved(example)
print(pred)
print(coref_res)
Когда у меня есть доступ в Интернет, код работает правильно. Но когда у меня нет доступа к Интернету, я получаю следующие ошибки:
Traceback (most recent call last):
File "C:/Users/aap/Desktop/CoreNLP/Coref_AllenNLP.py", line 14, in <module>
predictor = Predictor.from_path(r"C:\Users\aap\Desktop\coref-spanbert-large-2021.03.10.tar.gz")
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\predictors\predictor.py", line 361, in from_path
load_archive(archive_path, cuda_device=cuda_device, overrides=overrides),
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\models\archival.py", line 206, in load_archive
config.duplicate(), serialization_dir
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\models\archival.py", line 232, in _load_dataset_readers
dataset_reader_params, serialization_dir=serialization_dir
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 604, in from_params
**extras,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 632, in from_params
kwargs = create_kwargs(constructor_to_inspect, cls, params, **extras)
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 200, in create_kwargs
cls.__name__, param_name, annotation, param.default, params, **extras
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 307, in pop_and_construct_arg
return construct_arg(class_name, name, popped_params, annotation, default, **extras)
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 391, in construct_arg
**extras,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 341, in construct_arg
return annotation.from_params(params=popped_params, **subextras)
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 604, in from_params
**extras,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\from_params.py", line 634, in from_params
return constructor_to_call(**kwargs) # type: ignore
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\data\token_indexers\pretrained_transformer_mismatched_indexer.py", line 63, in __init__
**kwargs,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\data\token_indexers\pretrained_transformer_indexer.py", line 58, in __init__
model_name, tokenizer_kwargs=tokenizer_kwargs
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\data\tokenizers\pretrained_transformer_tokenizer.py", line 71, in __init__
model_name, add_special_tokens=False, **tokenizer_kwargs
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\allennlp\common\cached_transformers.py", line 110, in get_tokenizer
**kwargs,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\transformers\models\auto\tokenization_auto.py", line 362, in from_pretrained
config = AutoConfig.from_pretrained(pretrained_model_name_or_path, **kwargs)
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\transformers\models\auto\configuration_auto.py", line 368, in from_pretrained
config_dict, _ = PretrainedConfig.get_config_dict(pretrained_model_name_or_path, **kwargs)
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\transformers\configuration_utils.py", line 424, in get_config_dict
use_auth_token=use_auth_token,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\transformers\file_utils.py", line 1087, in cached_path
local_files_only=local_files_only,
File "C:\Users\aap\Desktop\CoreNLP\corenlp\lib\site-packages\transformers\file_utils.py", line 1268, in get_from_cache
"Connection error, and we cannot find the requested files in the cached path."
ValueError: Connection error, and we cannot find the requested files in the cached path. Please try again or make sure your Internet connection is on.
Process finished with exit code 1
Скажите, пожалуйста, что мне нужно, чтобы мой код работал без интернета?
2 ответа
Вам понадобится локальная копия файла конфигурации и словаря модели преобразователя, чтобы токенизатору и индексатору токенов не нужно было их загружать:
from transformers import AutoConfig, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(transformer_model_name)
config = AutoConfig.from_pretrained(transformer_model_name)
tokenizer.save_pretrained(local_config_path)
config.to_json_file(local_config_path + "/config.json")
Затем вам нужно будет переопределить название модели трансформатора в файле конфигурации на локальный каталог (
local_config_path
) где вы сохранили эти вещи:
predictor = Predictor.from_path(
r"C:\Users\aap\Desktop\coref-spanbert-large-2021.03.10.tar.gz",
overrides={
"dataset_reader.token_indexers.tokens.model_name": local_config_path,
"validation_dataset_reader.token_indexers.tokens.model_name": local_config_path,
"model.text_field_embedder.tokens.model_name": local_config_path,
},
)
Я столкнулся с похожей проблемой при использовании Structured-Prediction-srl-bert без интернета, и я увидел в логах 4 пункт для загрузок:
- dataset_reader.bert_model_name = bert-base-uncased, Загрузка 4 файлов
- model INFO words.py — Загрузка словаря токенов из data/structured-prediction-srl-bert.2020.12.15/vocabulary. Скачивание... Файлы в 4 раза меньше
- Модели Spacy 'en_core_web_sm' не найдены
- позже, [nltk_data] Ошибка при загрузке punkt: <ошибка urlopen [Errno -3] Временная ошибка в разрешении имени> [nltk_data] Ошибка при загрузке wordnet: <ошибка urlopen [Errno -3] Временная ошибка в разрешении имени>
Я решил это с помощью следующих шагов:
- структурированный-прогноз-srl-bert:
- Я загрузил структурированный-предсказание-srl-bert.2020.12.15.tar.gz с https://demo.allennlp.org/semantic-role-labeling (вкладка «Карта модели») — https://storage.googleapis.com/allennlp-public-models/structured-prediction-srl-bert.2020.12.15.tar.gz
- Я распаковал его в ./data/structured-prediction-srl-bert.2020.12.15.
- Код:
pip установить allennlp ==2.10.0 allennlp-models==2.10.0
from allennlp.predictors.predictor import Predictor
predictor = Predictor.from_path("./data/structured-prediction-srl-bert.2020.12.15/")
- bert-base-без кожуха
- Я создал папку ./data/bert-base-uncased и скачал туда эти файлы с https://huggingface.co/bert-base-uncased/tree/main.
- config.json
- токенизатор.json
- tokenizer_config.json
- vocab.txt
- pytorch_model.bin
Кроме того, мне пришлось изменить «bert_model_name» с «bert-base-uncased» на путь «./data/bert-base-uncased», более ранний вызывает загрузку. Это нужно сделать в ./data/structured-prediction-srl-bert.2020.12.15/config.json, и есть два случая.
- скачать python -m spacy en_core_web_sm
- python -c 'импортировать nltk; nltk.download("пункт"); nltk.download("wordnet")'
После этих шагов allennlp больше не нуждался в Интернете.