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

yasuokaの日記: roberta-base-japanese-with-auto-jumanppのトークナイザはsentencepieceを必要としないのか 1

日記 by yasuoka

早稲田大学の河原研究室から、日本語RoBERTaモデルroberta-base-japanese-with-auto-jumanppがリリースされたので、早速、Google Colaboratoryで動かしてみた。

!test -d jumanpp-2.0.0-rc3 || curl -L https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc3/jumanpp-2.0.0-rc3.tar.xz | tar xJf -
!test -x /usr/local/bin/jumanpp || ( mkdir jumanpp-2.0.0-rc3/build && cd jumanpp-2.0.0-rc3/build && cmake .. -DCMAKE_BUILD_TYPE=Release && make install )
!pip install transformers pyknp sentencepiece
from transformers import pipeline
fmp=pipeline("fill-mask","nlp-waseda/roberta-base-japanese-with-auto-jumanpp")
print(fmp("国境の[MASK]トンネルを抜けると雪国であった。"))

2021年12月25日の日記と同様に、「国境の[MASK]トンネルを抜けると雪国であった。」の[MASK]を穴埋めさせてみたところ、私(安岡孝一)の手元では以下の結果になった。

[{'score': 0.12904559075832367, 'token': 3775, 'token_str': '女', 'sequence': '国境 の 女 トンネル を 抜ける と であった 。'}, {'score': 0.07489769905805588, 'token': 1568, 'token_str': '口', 'sequence': '国境 の 口 トンネル を 抜ける と であった 。'}, {'score': 0.06730563193559647, 'token': 464, 'token_str': 'か', 'sequence': '国境 の か トンネル を 抜ける と であった 。'}, {'score': 0.045510273426771164, 'token': 961, 'token_str': 'と', 'sequence': '国境 の と トンネル を 抜ける と であった 。'}, {'score': 0.039868827909231186, 'token': 1652, 'token_str': 'や', 'sequence': '国境 の や トンネル を 抜ける と であった 。'}]

動きが変だ。特に「雪国」が消えているのが、かなりおかしい。サブワードの処理がうまくいっておらず、「雪国」が未定義語になっている気がする。ちょっと確かめてみよう。

print(fmp.tokenizer.tokenize("国境の[MASK]トンネルを抜けると雪国であった。"))
print(type(fmp.tokenizer.subword_tokenizer))

私の手元では、以下の結果になった。

['国境', 'の', '[MASK]', 'トンネル', 'を', '抜ける', 'と', '[UNK]', 'であった', '。']
<class 'transformers.models.bert.tokenization_bert.WordpieceTokenizer'>

やはり、「雪国」のサブワード処理がうまくいっていない。というか、サブワード処理にはsentencepieceを使ってるはずなのに、なぜかWordpieceTokenizerが繋がれてしまってる。うーむ、これ、どうやって直せばいいんだろ。

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

人生unstable -- あるハッカー

読み込み中...