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

153 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
language:
- ja
library_name: transformers
pipeline_tag: text-generation
base_model: google/gemma-3-270m-it
tags:
- 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形式
### GGUF`gguf/` 配下)
- `gguf/gemma3-270m-pred-dpo-f16.gguf`
- `gguf/gemma3-270m-pred-dpo-q4_k_m.gguf`
---
## 入力フォーマット(重要)
固定プロンプトは以下です。
```text
キーボードの予測変換として[---]に続く言葉を予測変換してください。[---]より前はこれまでのユーザー入力です。
ユーザー入力と予測変換の間には境界 [---]を入れてください。
ーーーー以下が予測変換対象ーーーー
```
- `ーーーー以下が予測変換対象ーーーー` の後ろに、**ユーザー入力 + 境界 `[---]` + 未確定の先頭**(途中まで入力した語)を続けてください。
- 出力は **`[---]` を含む1行**を想定(運用では **1行目だけ採用**が簡単で安定します)。
### 例
入力(ユーザー):
```text
キーボードの予測変換として[---]に続く言葉を予測変換してください。[---]より前はこれまでのユーザー入力です。
ユーザー入力と予測変換の間には境界 [---]を入れてください。
ーーーー以下が予測変換対象ーーーー
これに関してはどんな[---]もて
```
出力(モデル):
```text
これに関してはどんな[---]問題/でしょ/う/か/
```
- `"[---]"` より後ろを `/` で split すると、候補列として扱えます。
- IME組み込みでは、`[---]` 以降だけ取り出してUIに反映するのが簡単です。
---
## 使い方Transformers
```python
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
```bash
./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の利用規約/ライセンス)を確認のうえ利用してください。