初始化项目,由ModelHub XC社区提供模型
Model: katsukiono/gemma3-270m-pred-dpo Source: Original Platform
This commit is contained in:
152
README.md
Normal file
152
README.md
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
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) + GGUF(f16 / 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の利用規約/ライセンス)を確認のうえ利用してください。
|
||||
Reference in New Issue
Block a user