日本語ALBERTモデルをアップデートしました

前回の記事はこちら

日本語ALBERTモデルを再学習しました。v2として公開します。

え、また…?

日本語には不向きな前処理がかけられていたことを見落としていました。

具体的には以下のコードです。

outputs = unicodedata.normalize("NFKD", outputs)
outputs = "".join([c for c in outputs if not unicodedata.combining(c)])

(ALBERTのtokenization.pyから引用)

この2行を日本語において実行すると、なんと濁点が消えます。つらい。

「これはやばい」と直感したため再学習を決意しました。性能の差分を見たかったため、学習元のデータは前回と同じです。

性能

学習の結果、性能が僅かに上昇しました。

前回(v1):
    accuracy                           0.95      1473
   macro avg       0.94      0.95      0.94      1473
weighted avg       0.95      0.95      0.95      1473

今回(v2):
     accuracy                           0.96      1473
    macro avg       0.95      0.95      0.95      1473
 weighted avg       0.96      0.96      0.96      1473

前回との主な差分

今回のモデルではv1と比べて主に以下の変更があります。

* [前回学習時に残った問題点] ALBERTのコードベースを(学習開始時点での)最新まで持ち上げました。結果、pretrainingスクリプトが最後まで完走するようになりました。
* [前回学習時に残った問題点] wikiextractor実行からやり直しました。こちらもバージョン上げました。AHフォルダができました。
* sentencepieceの学習オプションが公開されたので本家に合わせました
* transformersライブラリで簡単に読み込めるようにしました。

transformersで簡単に使える話と謝辞

お名前出していいかわかりませんので具体名は控えますが、ある方から「transformersの公式サイトにアップロードすると簡単に使えるようになりますよ」と教えていただきました。ありがとうございます!!!

なんと、以下のコードでモデルを自動的にダウンロード&読み込まれます。超便利。

(分類問題を学習したい場合)

from transformers import AlbertTokenizer, AlbertForSequenceClassification
tokenizer = AlbertTokenizer.from_pretrained("ALINEAR/albert-japanese-v2")
model = AlbertForSequenceClassification.from_pretrained("ALINEAR/albert-japanese-v2", num_labels=分類数)

さいごに

なにかお気づきの点ありましたらまたコメントなどでご指摘ください。
どうぞよろしくお願いいたします。


この記事が気に入ったらサポートをしてみませんか?