jtok-eucalyptus-v3
日本語向けの BPE トークナイザ(語彙 49,152、v3 系列)。HF tokenizers 形式で、前処理なしで任意の文字列を decode(encode(text)) == text で復元できます。
v1 / v2 との非互換について
v1 系列(j-llm/j72-tokenizer)・v2 系列(j-llm/j48-tokenizer-v2 ほか)は SentencePiece Unigram で、本モデルとは方式・コーパス・語彙がすべて異なります。トークン ID 列と分割結果に互換性はありません。
ファイル
| ファイル | 内容 |
|---|---|
tokenizer.json |
HF tokenizers のトークナイザ本体 |
tokenizer_config.json / special_tokens_map.json |
transformers の AutoTokenizer 用設定 |
tokenizer.sha256 |
tokenizer.json の SHA-256 |
tokenizer.json の SHA-256:
8bee9b74eed12955041e29670e046edde9b7ee68ed8ca3be8227501a691d7f52
仕様
| 項目 | 値 |
|---|---|
| 方式 | BPE(byte fallback あり) |
| 語彙数 | 49,152(学習で得たトークン 48,863、merge 39,176) |
| 最大トークン長 | 15 文字 |
| 正規化 | なし |
| pre-tokenizer | 空白文字(\n \t 半角空白 U+3000)の連続を 1 区切りとして分離し、数字は 1 桁ずつ分割 |
| 空白の扱い | 空白は他の文字と結合しません。空白同士の連続(\n\n など)だけが 1 トークンになり得ます |
| decoder | ByteFallback + Fuse(▁ への置換なし) |
| post-processor | なし(encode は BOS/EOS を付与しません) |
予約 ID
| ID | トークン | 種別 |
|---|---|---|
| 0–3 | <unk> <s> </s> <pad> |
特殊トークン |
| 4–7 | <|system|> <|user|> <|assistant|> <|turn_end|> |
特殊トークン(チャット用) |
| 8–11 | <|cast|> <|outline|> <|scene|> <|story|> |
追加トークン(小説の登場人物・あらすじ・場面・本文の見出し用) |
| 12–27 | <character0> 〜 <character15> |
追加トークン(登場人物の枠) |
| 28–32 | \n\n \n \t 半角空白 U+3000 |
空白 |
| 33–288 | <0x00> 〜 <0xFF> |
byte fallback |
ID 8–27 は special=False の追加トークンです。本文中に同じ文字列(例: <|cast|>)がそのまま現れた場合も、その ID に変換されます。ID 0–7 は、下記「注意」の設定で使う限り、本文中の同じ文字列からは生成されません。
学習データ
約 30 億字(3,000,051,617 字)。重複除去と評価用データとの漏洩除外を行ったうえで、文字数基準で次の比率に配合しました。
| 分野 | 比率 | 主な出典 |
|---|---|---|
| 小説 | 46.5% | web 小説 |
| 小説(R18) | 10.1% | web 小説 |
| 一般 | 13.5% | FineWeb-2 Edu(日本語)ほか |
| ノンフィクション | 8.4% | Wikipedia 日本語版 |
| 難解文 | 7.5% | 文語体・学術書・古文・漢文訓読など |
| 技術文書 | 6.9% | WARP PDF(llm-jp-corpus v4)ほか |
| 古典 | 4.4% | 国立国会図書館のパブリックドメイン資料、Pleias の日本語パブリックドメイン資料 |
| 会話 | 2.7% | 国会会議録 |
供給の少ない分野(小説 R18 と難解文)では、同じ文書を最大 2 回まで採用しています(合計 5,003 万字)。
品質検査
評価用 11,196 文書(各分野の評価データ、英語、ソースコード)とストレステキスト 32 件で、次の項目をすべて満たすことを確認しています。
decode(encode(text)) == text(skip_special_tokensの有無の両方)- 空白・数字が pre-token の境界を越えて結合しないこと
- 本文中の制御文字列(
<s></s><|system|>など)から ID 0–7 が生成されないこと transformersのPreTrainedTokenizerFastと ID 列が一致すること- llama.cpp で GGUF に変換した場合と ID 列が一致すること
評価データでの圧縮率は平均 1.96 字/トークンです。
使い方
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("j-llm/jtok-eucalyptus-v3")
text = "吾輩は猫である。\n名前はまだ無い。"
ids = tok.encode(text)
assert tok.decode(ids) == text
tokenizers だけで使う場合:
from huggingface_hub import hf_hub_download
from tokenizers import Tokenizer
tok = Tokenizer.from_file(hf_hub_download("j-llm/jtok-eucalyptus-v3", "tokenizer.json"))
tok.encode_special_tokens = True # 本文中の "</s>" などを特殊トークンとして解釈しない
ids = tok.encode("吾輩は猫である。", add_special_tokens=False).ids
注意
- 本文中の
<s></s><|user|>などの文字列は、特殊トークン(ID 0–7)ではなく通常の文字列として分割する前提です。AutoTokenizerでは同梱の設定(split_special_tokens: true)でこの動作になります。tokenizersを直接使う場合はencode_special_tokens = Trueを設定してください。特殊トークンは ID を直接挿入してください。 tokenizersの一部の版(0.23.3 で確認)はencode_special_tokensを無視します。tok.encode("</s>").idsが[2]になる場合は、tokenizer.jsonのadded_tokensから ID 0–7 を除いて読み込んでください(ID と decode 結果は変わりません)。動作確認はtokenizers0.22.2 /transformers4.57.6 で行っています。encodeは BOS/EOS を付与しません。必要な場合は呼び出し側で ID 1 / 2 を追加してください。- 空白を前の語に溶かし込まないため、空白の多い英語やソースコードでは、Metaspace 方式のトークナイザよりトークン数が増えます。
ライセンス
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support