日本語の学習済みモデルを使用する際は、東北大学が公開してくれている学習済みのモデルを使用することが一般的だと思います(多分)。
そんな状況が続いていたのですが、当然ながら学習データもやや古くなり新しい使われ方をし始めた言葉(コロナなど)に対して、精度が下がるようになっている現状がありました。
ということで、新しい学習済みのモデルを探していたのですが、その導入で躓くポイントが有ったので知見として残しておこいたいと思います。
やりたいこと
東北大学が公開している日本語版学習済みBERTモデルの最新のものを使用したい。
https://huggingface.co/cl-tohoku/bert-base-japanese-v2
ちなみに、よく探すと出てくる事前学習済みのモデルは下記になりますが、
https://huggingface.co/cl-tohoku/bert-base-japanese-char-whole-word-masking
The model is trained on Japanese Wikipedia as of September 1, 2019.
※bert-base-japanese-char-whole-word-masking
と、2019年時点のデータを用いて学習しているようなので最新の情勢を反映したいようなタスクの場合には適していません。
それに対し、新たに公開された「bert-base-japanese-v2」は
The training corpus is generated from the Wikipedia Cirrussearch dump file as of August 31, 2020.
※bert-base-japanese-v2
となっており、新型コロナウィルスで大きく情勢が変わっている部分も学習データにある程度含まれています。
そのため、コロナウィルス関連やリモートワーク等に関する情報も適切に処理するために新しいモデルの使用を検討しました。
モデル読み込み時に起きた問題
(少なくとも)上記に書いたようなメリットがあるため、新しいモデルが作られたなら候補に入れたいと考えていたのですが、初っ端からつまづきました。
huggingfaceのmodel hubにこの事前学習済みモデルは公開されており、該当のモデルのページにはtransformers(ライブラリ)からモデルを使用する方法が丁寧に書かれています。
なのですが、そちらを参考にして実行したところ、
transformersのバージョンが2.3.0の場合は
1 |
<span class="ansi-red-fg">ValueError</span>: Can't find a vocabulary file at path '/home/jovyan/.cache/torch/transformers/f9fbd17560cc2e7ee8db0dd3e52060729d7409af7dc67c23ce13a012dbaafa0b'. To load the vocabulary from a Google pretrained model use `tokenizer = BertTokenizer.from_pretrained(PRETRAINED_MODEL_NAME)` |
というようなエラーが出ましました。
どうやらライブラリ内に読み込み先の定義がされており、新しく公開されたものを読み込めないようでした。
解決方法
リポジトリからのダウンロードではなく、ローカルに置いたファイルでも動作するように作られています。
なのでgit でダウンロードしてダウンロードしたものを読み込みましょう
1 2 |
git lfs install git clone https://huggingface.co/cl-tohoku/bert-base-japanese-char-v2 |
1 2 3 4 5 6 7 |
import copy import torch from transformers import AutoTokenizer, AutoModel model_path = '../models/bert-base-japanese-v2' bert_tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModel.from_pretrained(model_path) |
まとめ
最新版のライブラリを使いましょう。また運用時などでも出来る限り最新版のライブラリを使えるような工夫をしているとみんな幸せになれそうですね…。