Files
gemma3-270m-pred-dpo/README.md
ModelHub XC 53f8e25184 初始化项目,由ModelHub XC社区提供模型
Model: katsukiono/gemma3-270m-pred-dpo
Source: Original Platform
2026-06-18 04:08:16 +08:00

4.4 KiB
Raw Permalink Blame History

language, library_name, pipeline_tag, base_model, tags
language library_name pipeline_tag base_model tags
ja
transformers text-generation google/gemma-3-270m-it
gemma3
japanese
ime
predictive-text
gguf
llama.cpp
mobile

gemma3-270m-pred-dpo

日本語IMEキーボードの予測変換用途に最適化した Gemma 3 270M の軽量モデルです。
入力テキスト中の境界 [---] の“後ろ”に続く言葉を予測変換として生成します。

  • ベースモデル: google/gemma-3-270m-it
  • 学習: SFT → DPO選好最適化
  • 配布: Transformers形式HF + GGUFf16 / Q4_K_M

iOS 実測(参考)

実行環境・スレッド数・量子化設定で変動します。

  • 12 ms/token
  • 82.94 tokens/sec
  • 34 ms TTFT

配布ファイル

Transformers (Hugging Face)

  • リポジトリ直下に model.safetensors などTransformers形式

GGUFgguf/ 配下)

  • gguf/gemma3-270m-pred-dpo-f16.gguf
  • gguf/gemma3-270m-pred-dpo-q4_k_m.gguf

入力フォーマット(重要)

固定プロンプトは以下です。

キーボードの予測変換として[---]に続く言葉を予測変換してください。[---]より前はこれまでのユーザー入力です。
ユーザー入力と予測変換の間には境界 [---]を入れてください。

ーーーー以下が予測変換対象ーーーー
  • ーーーー以下が予測変換対象ーーーー の後ろに、ユーザー入力 + 境界 [---] + 未確定の先頭(途中まで入力した語)を続けてください。
  • 出力は [---] を含む1行を想定(運用では 1行目だけ採用が簡単で安定します)。

入力(ユーザー):

キーボードの予測変換として[---]に続く言葉を予測変換してください。[---]より前はこれまでのユーザー入力です。
ユーザー入力と予測変換の間には境界 [---]を入れてください。

ーーーー以下が予測変換対象ーーーー
これに関してはどんな[---]もて

出力(モデル):

これに関してはどんな[---]問題/でしょ/う/か/
  • "[---]" より後ろを / で split すると、候補列として扱えます。
  • IME組み込みでは、[---] 以降だけ取り出してUIに反映するのが簡単です。

使い方Transformers

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "katsukiono/gemma3-270m-pred-dpo"

tok = AutoTokenizer.from_pretrained(model_id, use_fast=True)
if tok.pad_token is None:
    tok.pad_token = tok.eos_token

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto",
).eval()

prompt = """キーボードの予測変換として[---]に続く言葉を予測変換してください。[---]より前はこれまでのユーザー入力です。
ユーザー入力と予測変換の間には境界 [---]を入れてください。

ーーーー以下が予測変換対象ーーーー
これに関してはどんな[---]もて
"""

chat = [{"role": "user", "content": prompt}]
text = tok.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)

with torch.inference_mode():
    out = model.generate(
        **inputs,
        do_sample=False,
        max_new_tokens=96,
    )

gen = tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(gen.splitlines()[0].strip())

使い方GGUF / llama.cpp

./llama-cli \
  -m gguf/gemma3-270m-pred-dpo-q4_k_m.gguf \
  -p "(上の固定プロンプト + 入力)" \
  -n 96 \
  --temp 0

推奨後処理(運用メモ)

  • 生成が複数行になる場合があるため、まずは 1行目のみ採用が簡単です。
  • "[---]" が欠落する出力が稀にあり得るため、プロダクションでは [---] の有無チェックを推奨します。
  • 候補列の取得例:
    • 出力を split("[---]", 1) → 後半を split("/")(空要素は除外)で候補化

ライセンス / 利用条件

本モデルは google/gemma-3-270m-it をベースにしています。
利用にあたっては、ベースモデル側の利用条件Gemmaの利用規約/ライセンス)を確認のうえ利用してください。