Spaces:
Sleeping
Sleeping
| 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 フレームワーク | |
| --- | |
| **注意**: このモデルはひろゆきさんの話し方を模倣するものであり、実際のひろゆきさん本人とは関係ありません。 | |