Spaces:
Sleeping
Sleeping
File size: 6,149 Bytes
e17561c 8351050 6efb570 8351050 4bfeba1 8351050 90da08b 8351050 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | ---
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. リポジトリのクローン
```bash
git clone <repository-url>
cd <project-directory>
```
### 2. 依存関係のインストール
```bash
# build.sh を使用してインストール
bash sh/build.sh
```
または手動でインストール:
```bash
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 アダプターの適用を制御できます。
```bash
# .env.example をコピーして .env を作成
cp .env.example .env
```
`.env` ファイルを編集して `USE_LORA` を設定します:
```env
# LoRA アダプターを適用する場合(ひろゆき風応答)
USE_LORA=true
# LoRA アダプターを適用しない場合(ベースモデルのみ)
USE_LORA=false
```
**デフォルト値**: `USE_LORA=true`(.env ファイルがない場合、LoRA が有効になります)
### API サーバーの起動
```bash
# start.sh を使用
bash sh/start.sh
# または直接実行
python main.py
```
サーバーはデフォルトで `http://0.0.0.0:8000` で起動します。
### API エンドポイント
#### 1. ヘルスチェック
```bash
GET /health
```
レスポンス例:
```json
{
"status": "ok"
}
```
#### 2. チャット
```bash
POST /chat
Content-Type: application/json
{
"message": "あなたのメッセージ"
}
```
リクエスト例(cURL):
```bash
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message": "どう思いますか?"}'
```
レスポンス例:
```json
{
"response": "それって〜じゃないですか?",
"input": "どう思いますか?"
}
```
### Python から利用
```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
## 謝辞
このプロジェクトは以下のオープンソースプロジェクトに依存しています:
- [Unsloth](https://github.com/unslothai/unsloth) - 高速な LLM ファインチューニング
- [PEFT](https://github.com/huggingface/peft) - パラメーター効率的ファインチューニング
- [Qwen2.5](https://huggingface.co/Qwen) - ベースモデル
- [FastAPI](https://fastapi.tiangolo.com/) - API フレームワーク
---
**注意**: このモデルはひろゆきさんの話し方を模倣するものであり、実際のひろゆきさん本人とは関係ありません。
|