🚀 日本語GPT - NeoX 36億パラメータ指令微調整モデル
本プロジェクトでは、36億のパラメータを持つ日本語GPT - NeoXモデルを提供しています。このモデルはrinna/japanese - gpt - neox - 3.6b
をベースに構築され、微調整されており、指令に従う対話エージェントとして利用できます。
🚀 クイックスタート
入出力形式
入力を構築するために特殊な形式を採用しています:
- 入力プロンプトは、
ユーザー
とシステム
の間の対話としてフォーマットされます。
- 各入力文は、以下の部分で構成されます:(1) 話者(
"ユーザー"
または"システム"
);(2) コロン (":"
);(3) スペース (" "
);(4) 文のテキスト(例:"世界で最も高い山はどれですか?"
)。
- 入力プロンプトは
"システム: "
で終わる必要があり、モデルに応答を生成するよう指示します。
- モデルのトークナイザーは
"\n"
を認識できないため、特殊な改行記号"<NL>"
を使用します。
- 入力と出力文のすべての改行文字は
"<NL>"
に置き換える必要があります。
- 入力プロンプト内のすべての文は
"<NL>"
で区切られます。
以下は、対話から入力を構築する例です:
prompt = [
{
"speaker": "ユーザー",
"text": "日本の観光名所をいくつか教えてください。"
},
{
"speaker": "システム",
"text": "どの地域の観光名所を知りたいですか?"
},
{
"speaker": "ユーザー",
"text": "渋谷の観光名所を教えてください。"
}
]
prompt = [
f"{uttr['speaker']}: {uttr['text']}"
for uttr in prompt
]
prompt = "<NL>".join(prompt)
prompt = (
prompt
+ "<NL>"
+ "システム: "
)
print(prompt)
モデルの使用方法
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft")
if torch.cuda.is_available():
model = model.to("cuda")
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
with torch.no_grad():
output_ids = model.generate(
token_ids.to(model.device),
do_sample=True,
max_new_tokens=128,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):])
output = output.replace("<NL>", "\n")
print(output)
"""分かりました。以下の観光名所をおすすめします:
1. 忠犬ハチ公像。忠犬ハチ公像は日本で人気の観光名所の一つです。
2. 渋谷スクランブル交差点。これは人が多く往来する大きな交差点で、観光客に人気の名所です。
3. 109ビル。109ビルはショッピングとエンターテインメントの場所です。
4. 道玄坂。道玄坂は日本の商業地区の坂道です。</s>"""
✨ 主な機能
モデルアーキテクチャ
これはTransformerベースの言語モデルで、36層あり、隠れ層のサイズは2816です。
微調整データ
微調整データは、以下のデータセットのサブセットで、日本語に翻訳されています:
これらのデータは公開されません。
モデルシリーズ
バリエーション |
リンク |
36億パラメータPPO |
https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-ppo |
36億パラメータSFT - v2 |
https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-sft-v2 |
36億パラメータSFT |
https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-sft |
36億パラメータ事前学習 |
https://huggingface.co/rinna/japanese-gpt-neox-3.6b |
貢献者
公開日
2023年3月17日
🔧 技術詳細
トークナイズ
モデルはsentencepieceベースのトークナイザーを使用しています:
- トークナイザーの語彙数は32000です。
- sentencepieceのバイトバックオフ機能を使用して、未知のテキスト断片をUTF - 8バイト断片に分解し、
<UNK>
トークンの生成を避けます。
- sentencepieceの
--add_dummy_prefix
オプションは無効になっているため、自動的に先頭のスペースが追加されません。
print(tokenizer.tokenize("吾輩は猫である"))
# ['吾', '輩', 'は', '猫', 'である']
# rinna/japanese-gpt-1bのように ['▁', '吾', '輩', 'は', '猫', 'である'] ではなく
- sentencepieceの
--remove_extra_whitespaces
オプションは無効になっているため、先頭、末尾、および重複するスペースが保持されます。
print(tokenizer.tokenize(" 吾輩は 猫である "))
# ['▁', '▁', '吾', '輩', 'は', '▁', '▁', '猫', 'である', '▁', '▁', '▁']
# rinna/japanese-gpt-1bのように ['▁', '吾', '輩', 'は', '▁猫', 'である'] ではなく
- 上記の機能を正常に動作させるには、必ず
use_fast=False
を設定してください。
good_tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b", use_fast=False)
bad_tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b")
print(good_tokenizer.decode(good_tokenizer.encode("გამარჯობა 吾輩は 猫である ")))
# 'გამარჯობა 吾輩は 猫である </s>'
print(bad_tokenizer.decode(bad_tokenizer.encode("გამარჯობა 吾輩は 猫である ")))
# 'გამარ[UNK]ობა 吾輩は 猫である </s>'
📚 ドキュメント
引用形式
@misc{rinna-japanese-gpt-neox-3.6b-instruction-sft,
title = {rinna/japanese-gpt-neox-3.6b-instruction-sft},
author = {Zhao, Tianyu and Sawada, Kei},
url = {https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-sft}
}
@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}}
}
📄 ライセンス
MITライセンス