5

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を使用して予測子を明示的に指定できることは知っていますが、どの名前を選択すればそれが機能するかについては、まったくわかりません。

4

1 に答える 1