Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available: 6.26.0
metadata
title: Hiroyuki SLM
emoji: 🐨
colorFrom: pink
colorTo: gray
sdk: gradio
sdk_version: 6.12.0
app_file: app.py
pinned: false
short_description: ひろゆき風SLM
Hiroyuki SLM
ひろゆき風の話し方をする Small Language Model (SLM) です。
Qwen2.5-0.5B-Instruct をベースモデルとし、LoRA アダプターでひろゆき調の応答を生成するようにファインチューニングされています。
4bit 量子化により、GPU メモリを抑えつつ動作可能です。
プロジェクト概要
Hiroyuki SLM は、ひろゆきさん特有の冷静で論理的、かつ少しズレた視点からの返答を生成するチャットボットです。
Unsloth を使用した効率的な学習と、PEFT/LoRA による軽量アダプター学習を採用しています。
特徴
- ひろゆき風応答: 冷静・論理的・皮肉めいた視点を再現
- 4-bit 量子化: bitsandbytes によるメモリ効率化
- LoRA アダプター: 軽量なパラメーター効率的学習
- FastAPI + Uvicorn: 高速な REST API サーバー
- 非同期生成:
asyncioによるブロッキング回避 - 日本語特化: 日本語での対話に最適化
ファイル構成
/hiroyuki-slm/
├── .env # 環境変数
├── main.py # エントリーポイント
├── api.py # FastAPI アプリケーション
├── slm_model.py # HiroyukiSLM モデル実装
├── requirements.txt # 依存パッケージ
├── hiroyuki_adapter/ # LoRA アダプター(学習済み重み)
│ ├── adapter_config.json
│ ├── adapter_model.safetensors
│ ├── tokenizer.json
│ └── tokenizer_config.json
├── data/ # データセット用ディレクトリ
├── sh/ # シェルスクリプト
│ ├── build.sh # ビルドスクリプト
│ └── start.sh # 起動スクリプト
└── README.md # このファイル
必要環境
- Python 3.10+
- NVIDIA GPU(CUDA 対応)推奨
- VRAM: 4GB 以上(4bit 量子化時)
インストール
1. リポジトリのクローン
git clone <repository-url>
cd <project-directory>
2. 依存関係のインストール
# build.sh を使用してインストール
bash sh/build.sh
または手動でインストール:
pip install --upgrade pip
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps -r requirements.txt
使い方
環境変数設定
.env ファイルを作成して、LoRA アダプターの適用を制御できます。
# .env.example をコピーして .env を作成
cp .env.example .env
.env ファイルを編集して USE_LORA を設定します:
# LoRA アダプターを適用する場合(ひろゆき風応答)
USE_LORA=true
# LoRA アダプターを適用しない場合(ベースモデルのみ)
USE_LORA=false
デフォルト値: USE_LORA=true(.env ファイルがない場合、LoRA が有効になります)
API サーバーの起動
# start.sh を使用
bash sh/start.sh
# または直接実行
python main.py
サーバーはデフォルトで http://0.0.0.0:8000 で起動します。
API エンドポイント
1. ヘルスチェック
GET /health
レスポンス例:
{
"status": "ok"
}
2. チャット
POST /chat
Content-Type: application/json
{
"message": "あなたのメッセージ"
}
リクエスト例(cURL):
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message": "どう思いますか?"}'
レスポンス例:
{
"response": "それって〜じゃないですか?",
"input": "どう思いますか?"
}
Python から利用
import requests
response = requests.post(
"http://localhost:8000/chat",
json={"message": "こんにちは"}
)
print(response.json())
技術仕様
| 項目 | 仕様 |
|---|---|
| ベースモデル | Qwen/Qwen2.5-0.5B-Instruct |
| アダプタータイプ | LoRA |
| 量子化 | 4-bit (bitsandbytes) |
| 最大シーケンス長 | 2048 |
| 生成トークン数 | 最大 128 |
| サンプリング設定 | temperature=0.75, top_p=0.9, repetition_penalty=1.1 |
| フレームワーク | FastAPI + Uvicorn |
| 学習ライブラリ | Unsloth + PEFT + TRL |
ひろゆき風スタイルの特徴
【基本スタイル】
- 冷静で論理的に話す
- 相手の前提や主張を疑う
- 「〜だと思うんですけど」「〜じゃないですかね」を多用
- 少し皮肉やズレた視点を混ぜる
【よく使う言い回し】
- 「それって〜じゃないですか?」
- 「なんか勘違いしてると思うんですけど」
- 「いや、普通に考えて」
- 「〜する意味あります?」
- 「別に〜すればよくないですか?」
開発者向け情報
モデルのカスタマイズ
slm_model.py の HIROYUKI_SYSTEM_PROMPT を変更することで、応答のトーンを調整できます。
再学習
新しいデータで学習する場合は、TRL と Unsloth を使用して LoRA アダプターを再学習できます。
ライセンス
MIT License
謝辞
このプロジェクトは以下のオープンソースプロジェクトに依存しています:
注意: このモデルはひろゆきさんの話し方を模倣するものであり、実際のひろゆきさん本人とは関係ありません。