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

yasuokaの日記: ku-nlp/deberta-v2-base-japaneseのトークナイザをmecab-jumandic-utf8に切り替えるには

日記 by yasuoka

Google Colaboratoryの起動のたびにJuman++をインストールするのは、さすがに飽きてきたので、ku-nlp/deberta-v2-base-japaneseのトークナイザをmecab-jumandic-utf8に切り替えてみた。

!apt install mecab-jumandic-utf8
!pip install 'transformers>=4.24.0' sentencepiece fugashi
from transformers import BertJapaneseTokenizer,AutoModelForMaskedLM,FillMaskPipeline
from transformers.utils import cached_file
tkz=BertJapaneseTokenizer(vocab_file=None,spm_file=cached_file("ku-nlp/deberta-v2-base-japanese","spm.model"),word_tokenizer_type="mecab",mecab_kwargs={"mecab_dic":None,"mecab_option":"-d /var/lib/mecab/dic/juman-utf8 -r /etc/mecabrc"},subword_tokenizer_type="sentencepiece")
tkz._tokenize=lambda text:[sub_token.replace("〓",tkz.mask_token) for token in tkz.word_tokenizer.tokenize(text.replace(tkz.mask_token,"\u2581"),never_split=tkz.all_special_tokens) for sub_token in tkz.subword_tokenizer.tokenize(("\u2581"+token).replace("\u2581\u2581","〓"))]
mdl=AutoModelForMaskedLM.from_pretrained("ku-nlp/deberta-v2-base-japanese")
fmp=FillMaskPipeline(model=mdl,tokenizer=tkz)
print(fmp("夜の底が[MASK]なった。"))

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

[{'score': 0.29466712474823, 'token': 4130, 'token_str': '深く', 'sequence': '夜 の 底 が 深く なった 。'}, {'score': 0.10997577756643295, 'token': 19502, 'token_str': '暗く', 'sequence': '夜 の 底 が 暗く なった 。'}, {'score': 0.10800448060035706, 'token': 17340, 'token_str': '熱く', 'sequence': '夜 の 底 が 熱く なった 。'}, {'score': 0.07135284692049026, 'token': 27473, 'token_str': '浅く', 'sequence': '夜 の 底 が 浅く なった 。'}, {'score': 0.06170506030321121, 'token': 27949, 'token_str': '冷たく', 'sequence': '夜 の 底 が 冷たく なった 。'}]

「深く」「暗く」「熱く」「浅く」「冷たく」となっており、scoreも含め、一昨日の結果とほぼ同じである。まあ、もう少しヤヤコシイ単語になると、Juman++とmecab-jumandic-utf8で結果が違ってくるのだろう。せめてJuman++のインストールが、もう少し簡単になればいいのだけど。

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

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...