パスワードを忘れた? アカウント作成
15667236 journal
人工知能

yasuokaの日記: 青空文庫DeBERTaモデルdeberta-small-japanese-aozoraリリース

日記 by yasuoka

Transformers 4.19.0でDebertaV2TokenizerFastがサポートされたので、日本語DeBERTa(V2)モデルdeberta-small-japanese-aozoraを作ってみた。Unigramトークナイザ(トークン長は最大8文字・語彙数は最大32000)をDebertaV2TokenizerFastに組み上げ、以前に使ったモデルパラメータ(12層・隠れサイズ256・4ヘッド・トークン幅128)をDebertaV2Configに流用して、7772556文3億字(元データ2.37億字+異体字増量分0.64億字)をNVIDIA A100-SXM4-40GBで91086ステップ(256バッチ)学習させたところ、5時間28分で学習できた。Google Colaboratoryで動かしてみよう。

!pip install 'transformers>=4.19.0'
from transformers import AutoTokenizer,AutoModelForMaskedLM,FillMaskPipeline
tokenizer=AutoTokenizer.from_pretrained("KoichiYasuoka/deberta-small-japanese-aozora")
model=AutoModelForMaskedLM.from_pretrained("KoichiYasuoka/deberta-small-japanese-aozora")
pipeline=FillMaskPipeline(model,tokenizer)
print(pipeline("夜の底が[MASK]なった。"))

「夜の底が[MASK]なった。」を穴埋めさせてみたところ、私(安岡孝一)の手元では以下の結果となった。

[{'score': 0.265444815158844, 'token': 2114, 'token_str': '白く', 'sequence': '夜の底が白くなった。'}, {'score': 0.09430649876594543, 'token': 3493, 'token_str': '黒く', 'sequence': '夜の底が黒くなった。'}, {'score': 0.05403701588511467, 'token': 7, 'token_str': 'に', 'sequence': '夜の底がになった。'}, {'score': 0.05042510852217674, 'token': 12, 'token_str': 'と', 'sequence': '夜の底がとなった。'}, {'score': 0.047254811972379684, 'token': 85, 'token_str': 'そう', 'sequence': '夜の底がそうなった。'}]

なかなか素晴らしい。実は、このDeBERTa(V2)モデルを作る前に、RoBERTaモデルとの比較をおこなってみた(ここここ参照)のだが、品詞付与や係り受け解析を下流タスクとする場合、DeBERTa(V2)の方がRoBERTaより性能がいい。まあ、DebertaV2Tokenizerにはsplit_by_punctというオプションも準備されていて、トークナイザの動きを細かく制御できるのもあるが、やはりモデルのDisentangled Attentionが効いているようだ。とりあえず、もう少し大きなモデルも作ってみようかな。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...