yuuki14202028/kanakanji-edge-33m
kanakanji-edge-33m
日本語かな漢字変換モデル(33.5M パラメータ)。カタカナ読みと左文脈を入力として漢字かな混じり文を出力します。 エッジデバイス(スマートフォンの IME)で動かすことを前提に、4bit 量子化で 20MB 枠に収まるよう設計しています。
A 33.5M-parameter Japanese kana-kanji conversion model for on-device IMEs. Input: katakana reading (+ optional left context). Output: mixed kanji-kana text.
アーキテクチャ
標準の LlamaForCausalLM(カスタムコード不要)。
zenz-v2.5-dataset(1.89 億件)でゼロから 6 エポック学習。オプティマイザは ScheduleFree(AdamC + 反復平均)。
評価
held-out 5,000 件の CE(fp32): 0.0537。
GGUF は torch と同じ入力で AJIMEE-Bench 200 件を回し、出力が異なる件数を数えてあります。
プロンプト形式
Private Use Area の Unicode 文字を制御トークンとして使います。
入力: \uEE02<left_context>\uEE00<katakana>\uEE01
出力: <converted text></s>使い方(transformers)
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
repo = "yuuki14202028/kanakanji-edge-33m"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo).eval()
def convert(kana: str, left_context: str = "") -> str:
prompt = f"\uEE02{left_context}\uEE00{kana}\uEE01"
ids = tok.encode(prompt, add_special_tokens=False, return_tensors="pt")
with torch.no_grad():
out = model.generate(ids, max_new_tokens=64, do_sample=False,
eos_token_id=tok.eos_token_id, pad_token_id=tok.pad_token_id)
return tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True)
print(convert("ニホンゴ")) # 日本語
print(convert("ノイライガクルヨウニ", "きっかけで、漫画の仕事")) # の依頼が来るように
print(convert("キョウハイイテンキデスネ")) # 今日はいい天気ですね使い方(llama.cpp)
3 つの制御トークンは GGUF 上で CONTROL トークンです。トークナイズは `parse_special=true` で呼んでください (false だと各制御文字が 3 バイトに割れて出力が壊れます)。貪欲は temperature 0, top_k 1。
llama-cli -m kanakanji-edge-33m-Q8_0.gguf -p $'\uEE02\uEE00ニホンゴ\uEE01' --temp 0 --top-k 1 -n 32制約
- 入力はカタカナ読みを想定しています(訓練データの仕様)。ひらがな入力は保証しません。
- 数字・記号を含む入力、長い文脈(訓練時の最大長 192 トークン)は精度が落ちます。
- 33M の小モデルなので、5bit 以下の量子化では出力が目に見えて変わります(Q5KM で AJIMEE Acc@1 が約 -0.04)。
ライセンス
- モデルの重み(
model.safetensors,*.ggufの重みテンソル): Apache-2.0。 ゼロから学習しており、他モデルの重みは含みません。 - トークナイザ(
tokenizer.jsonの語彙と merges。GGUF にも同じ語彙が埋め込まれています): ku-nlp/gpt2-small-japanese-char (京都大学 黒橋研究室)の byte-level BPE 語彙をそのまま使用。CC-BY-SA 4.0。 本モデル側で追加した 3 つの制御トークン(id 6000〜6002)は Apache-2.0。 - 訓練データ: Miwa-Keita/zenz-v2.5-dataset (CC-BY-SA 4.0 の Wikipedia 由来部分と ODC-BY の llm-jp-corpus-v3 由来部分)。
トークナイザは重みと併用されるだけで翻案されていないため、CC-BY-SA の継承条項は重みには及びません。 重みを fine-tune・蒸留・量子化して再配布する場合は Apache-2.0 の条件(帰属と変更の明示)だけが適用されます。 トークナイザファイルを再配布する場合は ku-nlp への帰属を保ってください。
評価ベンチマーク
- AJIMEE-Bench(azooKey)
- Anthy corpus.1(Anthy 付属のテストコーパス)
学習コード
<https://github.com/yuuki14202028/gpt2-kanakanji>(リポジトリ名は初代の GPT-2 版の名残)
