tiny-jev

September 18, 2026 · View on GitHub

日本語の文章と評価基準を照合する、ローカルの小型判断AI。 choice / score / noul を、文章生成ではなくQwen3のyes/noスコアから返します。

クローンしただけではモデル重みは入りません。下の手順で基礎モデルを取得し、同梱データから追加学習を再開できます。

入口

重要な区別

日本語NLI/STSへの追加学習と、問い合わせ分類・緊急度などの業務品質の検証は別です。 業務データ・確率校正・採用閾値が未整備の間、APIは status="abstained" / value=null を維持します。 proposed_value や未補正の分布を、自動実行の承認や検証済みの正解確率として使わないでください。

原ZIPと設計書は保存し、展開した jev_local_api_starter/ に拡張を加えています。 モデル本体は models/、学習差分は artifacts/ に置き、Git対象外にしています。

Git に含まれるもの / 含まれないもの

含める含めない(各自が再取得・再生成)
ソース、設計書、原ZIP、依存lock、ライセンスmodels/ 基礎モデル(約1.1 GB)
正規化済み評価データ benchmarks/data/artifacts/ LoRA差分(約54 MB)
固定pilot学習データ training/data/training/runs/ checkpoint
manifest / sources.lock / 結果レポートtraining/cache/ benchmarks/cache/
.venv/*.log.env

学習済みadapterはGitにありません。同じpilotを使う場合は下の手順で再学習し、export_adapterartifacts/ へ書き出します。

他の利用者が学習を続ける手順

必要: Python 3.12、uv、初回のみHugging Faceへの接続。 記録した実行機は Apple M5 / 24 GiB / macOS。CUDA機では PyTorch wheel を別に合わせてください。

固定revision: Qwen/Qwen3-Reranker-0.6Be61197ed45024b0ed8a2d74b80b4d909f1255473。 別revisionは別実験です。既存adapterと混ぜないでください。

git clone https://github.com/karimatayuta/tiny-jev.git
cd tiny-jev

uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python -r training/requirements.lock.txt
# 依存lockはこのmacOS環境用。CUDA版は対応wheelで別途検証する。

# 基礎モデル(空の出力先のみ。既存 models/ は上書きしない)
.venv/bin/python jev_local_api_starter/scripts/download_model.py \
  --out models/qwen3-reranker-0.6b \
  --revision e61197ed45024b0ed8a2d74b80b4d909f1255473

# 同梱の固定データを検査する。新規取得する場合だけ --offline を外す。
.venv/bin/python -m training.prepare_data --offline
.venv/bin/python -m unittest discover -s training/tests -v
.venv/bin/python -m unittest discover -s benchmarks/tests -v

次の学習runを始める

既存runやcheckpointは上書きしません。新しい出力先を指定します。

PYTORCH_MPS_PREFER_METAL=1 \
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 HF_HUB_DISABLE_TELEMETRY=1 \
TOKENIZERS_PARALLELISM=false \
.venv/bin/python -m training.train_judge --device mps \
  --out training/runs/ja-pilot-next

CPUなら --device cpu、NVIDIAなら --device cuda。CUDAでは PYTORCH_MPS_PREFER_METAL は不要です。 この実行機ではBF16/FP16のMPS経路が失敗したため、学習はFP32です。詳細は training/README.md

内部開発損失だけでcheckpointを選びます。公開testで選び直しません。 異なる乱数・学習量・入力形式を試す場合は、データ・コード・runの新しい版を作ってください。

学習差分の書き出しと評価

.venv/bin/python -m training.export_adapter \
  --run training/runs/ja-pilot-next \
  --out artifacts/ja-judge-lora-next

PYTORCH_MPS_PREFER_METAL=1 HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 \
.venv/bin/python -m training.evaluate_model \
  --dataset benchmarks/data/jnli_test.jsonl.gz --mode choice \
  --adapter artifacts/ja-judge-lora-next --out training/runs/eval-next

--adapter を省略すると未学習ベースモデルです。固定pilot subsetでの比較は training.evaluate_release

学習済みモデルをAPIで試す

PYTORCH_MPS_PREFER_METAL=1 \
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 HF_HUB_DISABLE_TELEMETRY=1 \
PYTHONPATH=jev_local_api_starter BACKEND=qwen DEVICE=mps \
MODEL_PATH=./models/qwen3-reranker-0.6b \
ADAPTER_PATH=./artifacts/ja-judge-lora-next \
MAX_TOKENS=1024 MICROBATCH=8 \
.venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --workers 1

calibrated=falsestatus=abstainedvalue=null は意図した動作です。 配線確認だけなら jev_local_api_starter/README.md の mock 起動を使います。

いまの到達点

  • 固定pilot(JNLI 506 + JSTS 251文対、1 epoch)のLoRA学習・保存・再読込・実モデル評価まで実施済み。
  • 公開NLI/STS向けの研究版。業務用v1の合格・確率校正・自動採用は未達。
  • JNLI Accuracyは上がった一方、含意Recallと一部の確率指標は悪化。一律改善ではない。
  • 次に残るのは、クラス別指標の見直し、学習量の拡大、業務データの整備です。数値の読み方は training/reports/RESULTS.md

出典・配布

JGLUE: Kurihara et al. / Yahoo Japan・早稲田大学、公式、CC BY-SA 4.0。 基礎モデルはQwen、Apache-2.0。データの利用条件とモデルのライセンスを混同しません。 詳細は training/licenses/benchmarks/THIRD_PARTY_NOTICES.md