セットアップ
Python 3.12または3.13を使います。Hugging Faceからこのリポジトリをダウンロードし、そのフォルダで実行してください。
公開先は RYasuda/kev-ja-emotion-kl-0.8b です。
pip install huggingface_hubhf download RYasuda/kev-ja-emotion-kl-0.8b --local-dir kev-ja-emotion-kl-0.8bcd kev-ja-emotion-kl-0.8bpip install -r requirements.txt
このリポジトリはLoRAアダプタ+Kev専用pointer headです。Qwen本体は同梱せず、ローカルにキャッシュがなければ起動時に取得します。
transformers.pipelineで直接使う形式ではありません。実行コードはKevからインストールします。
サーバー起動
モデルフォルダ内で実行します。Apple SiliconではMPS、対応GPUではCUDA、それ以外ではCPUを自動選択します。
評価と同じ温度1・fp32を明示しています。
KEV_BACKEND=torch KEV_DTYPE=fp32 KEV_TEMPERATURE=1 \python -m kev.serve --run . --port 8008
モデルIDを直接指定する場合は以下を使います。
KEV_BACKEND=torch KEV_DTYPE=fp32 KEV_TEMPERATURE=1 \python -m kev.serve --run RYasuda/kev-ja-emotion-kl-0.8b --port 8008
Pythonから使う
サーバーを起動したまま別ターミナルでpython example.pyを実行します。
from typesafe_sdk import Choice, TypeSafeClient client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8008", model="kev-latest")response = client.system_one( state="卒業できて嬉しい一方、友人と離れるのは寂しいです。", questions={ "anger": Choice(instructions="この文章の話者は怒りを感じていますか?", criteria={"yes": None, "no": None}), "sadness": Choice(instructions="この文章の話者は悲しみを感じていますか?", criteria={"yes": None, "no": None}), "joy": Choice(instructions="この文章の話者は喜びを感じていますか?", criteria={"yes": None, "no": None}), },)for emotion in ("anger", "sadness", "joy"): answer = response.choices[emotion] print(emotion, answer.choice, answer.probabilities["yes"])
最後の値はその感情に対するyesの確率です。3感情の確率の合計が1になる必要はありません。
例では、学習データと同じyes/noの選択肢を使うためChoiceを指定しています。質問文は実験で使ったものに複数の表現があり、この例の文面だけで評価したわけではありません。
文章・質問文・選択肢を変えると出力も変わります。確率の校正は独立した人手データで確認しておらず、値は感情の強度ではありません。3感情が統計的に独立であることも意味しません。
開発データでの評価
同じ感情100文章・300質問、一般120文章・144質問で、追加学習前の元Kevと比較しました。MPS/fp32、温度1です。
これらは誤り分析・候補選択・繰り返し検証に使用した開発データであり、独立した最終テストではありません。
Table with columns: 指標, 元Kev, 本モデル| 指標 | 元Kev | 本モデル |
|---|
| 感情正解率 | 86.3% | 92.3% |
| 感情macro F1 | 80.0% | 86.9% |
| 感情loss | 0.3651 | 0.2237 |
| 一般正解率 | 79.9% | 80.6% |
| 一般loss | 0.7849 | 0.8186 |
この開発パネルでは、感情正解率が**+6.0ポイント**、感情macro F1が**+6.9ポイントです。感情正答数は300問中259問から277問へ変化しました。
一般正解率の差は144問中115問から116問への変化、約+0.7ポイントです。一般lossは+0.0338悪化**しました。
感情正解率は各yes/no質問の正否であり、3感情すべてを当てた文章の割合ではありません。
感情macro F1は、yesを陽性とする怒り・悲しみ・喜びのF1の平均です。感情lossは正解yes/noラベルに対する平均負対数尤度で、小さいほど良い値です。
候補の採用条件は元Kev比で一般正解率の低下が2ポイント以内、一般lossの増加が0.05以内です。条件内の候補から感情macro F1優先、同点なら感情loss優先で選択しました。
一般タスクはdecision-v7の12タスクから抽出した小規模なパネルです。公式ベンチマーク全体のスコアや、一般能力全体を維持したという結果ではありません。
数値は保存された実験出力から整理したもので、公開パッケージを新しいデータで再評価した結果ではありません。Brierや信頼区間など、今回の候補について記録のない値は掲載していません。
感情データはAI作成の合成文章で、開発100文章はAIによる再確認を含みます。独立した人手ラベル、実際の利用文章による評価、別seedでの再現性、本モデルの新しい最終評価は未確認です。
重みと依存モデル
- 初期モデル:
jaredpalmer/kev-0.8b@bf75a6a8848ea6960ff2ed108d9ed44c2941174f
- ベース:
Qwen/Qwen3.5-0.8B-Base@dc7cdfe2ee4154fa7e30f5b51ca41bfa40174e68
- LoRA rank16+Kev専用head、KL重み3、選択step75
- requirements.txtで指定したKevコード: commit
fe64b1274ea7f80d4095866df90666abb03e9cf6
head.ptにはKevが読むモデル設定とhead重みを保存しています。学習時のローカルパスや実験履歴は除去し、固定候補の重みテンソルは保持しました。
推論コアによるCPUでの重み読み込み・推論は確認済みです。サーバーを起動してSDKから呼ぶ一連の動作は未確認です。上記手順は指定コミットのKevサーバーの仕様に基づきます。
ライセンス
Apache-2.0。元のKevとQwenの帰属をLICENSE・NOTICEに保持しています。公式Kev・Qwen・TypeSafeの公開モデルではありません。