Hiroyuki-SLM / space /README.md
github-actions
Update README.md (from GitHub)
47fba1b
|
Raw
History Blame Contribute Delete
6.15 kB

A newer version of the Gradio SDK is available: 6.26.0

Upgrade
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.pyHIROYUKI_SYSTEM_PROMPT を変更することで、応答のトーンを調整できます。

再学習

新しいデータで学習する場合は、TRL と Unsloth を使用して LoRA アダプターを再学習できます。

ライセンス

MIT License

謝辞

このプロジェクトは以下のオープンソースプロジェクトに依存しています:

  • Unsloth - 高速な LLM ファインチューニング
  • PEFT - パラメーター効率的ファインチューニング
  • Qwen2.5 - ベースモデル
  • FastAPI - API フレームワーク

注意: このモデルはひろゆきさんの話し方を模倣するものであり、実際のひろゆきさん本人とは関係ありません。