🚀 日本語版RoBERTaベースモデル
このリポジトリは、ベースサイズの日本語RoBERTaモデルを提供しています。このモデルは、rinna Co., Ltd.によるGithubリポジトリrinnakk/japanese-pretrained-modelsのコードを使用して学習されました。
🚀 クイックスタート
モデルの読み込み方法
from transformers import AutoTokenizer, AutoModelForMaskedLM
tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-roberta-base", use_fast=False)
tokenizer.do_lower_case = True
model = AutoModelForMaskedLM.from_pretrained("rinna/japanese-roberta-base")
マスクトークン予測でのモデルの使用方法
注意事項1: [CLS]
の使用
マスクトークンを予測する際には、モデルが正しくエンコードできるように、文の前に [CLS]
トークンを必ず追加してください。これはモデルの学習時に使用されているためです。
注意事項2: トークン化後に [MASK]
を使用する
A) 入力文字列に直接 [MASK]
を入力することと、B) トークン化後にトークンを [MASK]
で置き換えることは、異なるトークンシーケンスを生成し、その結果、異なる予測結果をもたらします。トークン化後に [MASK]
を使用する方が適切です(これはモデルの事前学習方法と一致しています)。ただし、Huggingface Inference APIは入力文字列に [MASK]
を入力する方法のみをサポートしており、予測の堅牢性が低くなります。
注意事項3: position_ids
を明示的に引数として提供する
Roberta*
モデルに position_ids
が提供されない場合、Huggingfaceの transformers
は自動的にそれを構築しますが、0
ではなく padding_idx
から始まります(issue とHuggingfaceの実装の関数 create_position_ids_from_input_ids()
を参照)。残念ながら、対応するトークナイザーの padding_idx
が 0
ではないため、rinna/japanese-roberta-base
では期待通りに動作しません。したがって、position_ids
を自分で構築し、位置ID 0
から始めるようにしてください。
サンプルコード
text = "4年に1度オリンピックは開かれる。"
text = "[CLS]" + text
tokens = tokenizer.tokenize(text)
print(tokens)
masked_idx = 5
tokens[masked_idx] = tokenizer.mask_token
print(tokens)
token_ids = tokenizer.convert_tokens_to_ids(tokens)
print(token_ids)
import torch
token_tensor = torch.LongTensor([token_ids])
position_ids = list(range(0, token_tensor.size(1)))
print(position_ids)
position_id_tensor = torch.LongTensor([position_ids])
with torch.no_grad():
outputs = model(input_ids=token_tensor, position_ids=position_id_tensor)
predictions = outputs[0][0, masked_idx].topk(10)
for i, index_t in enumerate(predictions.indices):
index = index_t.item()
token = tokenizer.convert_ids_to_tokens([index])[0]
print(i, token)
"""
0 総会
1 サミット
2 ワールドカップ
3 フェスティバル
4 大会
5 オリンピック
6 全国大会
7 党大会
8 イベント
9 世界選手権
"""
🔧 技術詳細
モデルアーキテクチャ
12層、768ユニットの隠れ層を持つ、Transformerベースのマスク言語モデルです。
学習
このモデルは、Japanese CC-100 と Japanese Wikipedia を使用して、8台のV100 GPUで約15日間、マスク言語モデリングの目的関数を最適化するように学習されました。CC-100からサンプリングされた開発セットでは、約3.9のパープレキシティに達しています。
トークン化
このモデルは、sentencepiece ベースのトークナイザーを使用しています。語彙は、公式のsentencepiece学習スクリプトを使用して日本語Wikipediaで学習されました。
📄 ライセンス
The MIT license
📚 引用方法
@misc{rinna-japanese-roberta-base,
title = {rinna/japanese-roberta-base},
author = {Zhao, Tianyu and Sawada, Kei},
url = {https://huggingface.co/rinna/japanese-roberta-base}
}
@inproceedings{sawada2024release,
title = {Release of Pre-Trained Models for the {J}apanese Language},
author = {Sawada, Kei and Zhao, Tianyu and Shing, Makoto and Mitsui, Kentaro and Kaga, Akio and Hono, Yukiya and Wakatsuki, Toshiaki and Mitsuda, Koh},
booktitle = {Proceedings of the 2024 Joint International Conference on Computational Linguistics, Language Resources and Evaluation (LREC-COLING 2024)},
month = {5},
year = {2024},
pages = {13898--13905},
url = {https://aclanthology.org/2024.lrec-main.1213},
note = {\url{https://arxiv.org/abs/2404.01657}}
}