reppy4620 / Dialog

A PyTorch Implementation of japanese chatbot using BERT and Transformer's decoder
MIT License
72 stars 29 forks source link

notebookエラー Model name 'bert-base-japanese-whole-word-masking' was not found #16

Closed pometa0507 closed 3 years ago

pometa0507 commented 4 years ago

notebookのDialog-Evaluation.ipynbを実行したところ、 !python run_eval.pyのセルでエラーが発生しました。

Traceback (most recent call last):
  File "run_eval.py", line 15, in <module>
    tokenizer = Tokenizer.from_pretrained(Config.model_name)
  File "/usr/local/lib/python3.6/dist-packages/transformers/tokenization_utils_base.py", line 1591, in from_pretrained
    list(cls.vocab_files_names.values()),
OSError: Model name 'bert-base-japanese-whole-word-masking' was not found in tokenizers model name list (cl-tohoku/bert-base-japanese, cl-tohoku/bert-base-japanese-whole-word-masking, cl-tohoku/bert-base-japanese-char, cl-tohoku/bert-base-japanese-char-whole-word-masking). We assumed 'bert-base-japanese-whole-word-masking' was a path, a model identifier, or url to a directory containing vocabulary files named ['vocab.txt'] but couldn't find such vocabulary files at this path or url.

config.pyのmodel_nameを'cl-tohoku/bert-base-japanese-whole-word-masking'として追加でライブラリをインストールすればこのエラーは発生しなくなるのですが、次はモデル読み込みでレイヤー名が合わずエラーとなってしまいます。

Traceback (most recent call last):
  File "run_eval.py", line 21, in <module>
    model.load_state_dict(state_dict['model'])
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 1052, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for EncoderDecoder:
    Missing key(s) in state_dict: "encoder.embeddings.position_id

ちなみに、現時点でpipでインストールされるライブラリのVersionは下記となっております。 emoji-0.6.0 neologdn-0.4 sacremoses-0.0.43 sentencepiece-0.1.94 tokenizers-0.9.2 transformers-3.4.0

お手数をおかけしますが、解決方法をご教授ください。

reppy4620 commented 4 years ago

正確な原因はわかりませんが、おそらくtransformersのバージョンが原因だと思います。 このプロジェクトの開発時には、transformers==2.3.0を使用していました。 一応2.3.0で実行を再現した時の様子が #13 にあるので、参考にしてください。

pometa0507 commented 3 years ago

transformers==2.3.0を使用しましたが、別のエラーが発生しました。

ValueError: Can't find a vocabulary file at path '/root/.cache/torch/transformers/9e39cf0fa6e56630924b95c50c01943e8a656dd4f08c110a64fed80a4f4adec6'. To load the vocabulary from a Google pretrained model use `tokenizer = BertTokenizer.from_pretrained(PRETRAINED_MODEL_NAME)`
pometa0507 commented 3 years ago

一応自己流で解決できました。お騒がせしました。

下記の変更で動作できました。

最新のtransformers(3.5.1)を使用。 config.pyのmodel_name = 'bert-base-japanese-whole-word-masking' では現Verのbertモデルが読み込みできないため、 model_name = 'cl-tohoku/bert-base-japanese-whole-word-masking' と変更しました。 また、追加で必要となったライブラリをインストールしました。 !pip install fugashi ipadic

'cl-tohoku/bert-base-japanese-whole-word-masking'では、新にレイヤーencoder.embeddings.position_idsが増えたので、(他のレイヤーは同じ) run_eval.pyの18行目を以下に変更。 model.load_state_dict(state_dict['model'], strict=False)