SciIE データセットで SciBERT モデルを微調整しました。リポジトリは AllenNLP を使用してモデルを微調整します。トレーニングは次のように実行されます。
python -m allennlp.run train $CONFIG_FILE --include-package scibert -s "$@"
トレーニングが成功すると、出力として model.tar.gz ファイルが作成されます。このファイルには、weights.th、config.json、およびボキャブラリー フォルダーが含まれています。allenlpプレディクターにロードしようとしました:
from allennlp.predictors.predictor import Predictor
predictor = Predictor.from_path("model.tar.gz")
しかし、次のエラーが表示されます。
ConfigurationError:bert-pretrained は、dataset_reader.token_indexers.bert.type の許容可能な選択肢にありません: ['single_id', 'characters', 'elmo_characters', 'spacy', 'pretrained_transformer', 'pretrained_transformer_mismatched']. --include-package フラグを使用して正しいモジュールがロードされていることを確認するか、構成ファイルで {"model": "my_module.models.MyModel"} のような完全修飾クラス名を使用して自動的にインポートする必要があります。 .
私は allenNLP を使用したことがないので、どうすればよいかかなり迷っています。
参考までに、これはトークン インデクサーを記述する構成の一部です。
"token_indexers": {
"bert": {
"type": "bert-pretrained",
"do_lowercase": "false",
"pretrained_model": "/home/tomaz/neo4j/scibert/model/vocab.txt",
"use_starting_offsets": true
}
}
私はallenlpバージョンを使用しています
名前: allennlp バージョン: 1.2.1
編集:
私は多くの進歩を遂げたと思います。モデルのトレーニングに使用したのと同じバージョンを使用する必要があり、次のようにモジュールをインポートできます。
from allennlp.predictors.predictor import Predictor
from scibert.models.bert_crf_tagger import *
from scibert.models.bert_text_classifier import *
from scibert.models.dummy_seq2seq import *
from scibert.dataset_readers.classification_dataset_reader import *
predictor = Predictor.from_path("scibert_ner/model.tar.gz")
dataset_reader="classification_dataset_reader")
predictor.predict(
sentence="Did Uriah honestly think he could beat The Legend of Zelda in under three hours?"
)
今、私はエラーが発生します:
モデル タイプ bert_crf_tagger のデフォルトの予測子がありません。\n予測子を明示的に指定してください
predictor_name
を使用して予測子を明示的に指定できることは知っていますが、どの名前を選択すればそれが機能するかについては、まったくわかりません。