Files
llm-jp-4-math-lion/README.md
ModelHub XC 926919bb0c 初始化项目,由ModelHub XC社区提供模型
Model: azuki-digital/llm-jp-4-math-lion
Source: Original Platform
2026-06-05 15:04:16 +08:00

226 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
language:
- ja
license: apache-2.0
tags:
- math
- japanese
- fine-tuning
- sft
- lora
- chain-of-thought
- self-consistency
- llm-jp
- ft-competition-2026
base_model:
- llm-jp/llm-jp-4-8b-base
datasets:
- azuki-digital/ft-llm-2026-synthetic-ja-math-qwen-235b-v1
- azuki-digital/ft-llm-2026-synthetic-ja-math-qwen-235b-v2
pipeline_tag: text-generation
model-index:
- name: llm-jp-4-math-lion
results:
- task:
type: math-reasoning
name: Japanese Math Benchmark (Dev)
metrics:
- type: accuracy
value: 95
name: Accuracy (Dev 100Q)
---
# llm-jp-4-math-lion
**ファインチューニングコンペ LLM 2026 — 数学タスク(オープン枠)提出モデル**
日本の中学・高校レベルの数学問題に対する推論精度を最大化するために、2段階のSFTSupervised Fine-Tuningと推論時のSelf-Consistencyを組み合わせたモデルです。
## モデル概要
| 項目 | 詳細 |
|------|------|
| ベースモデル | LLM-JP 4 継続事前学習済みモデル(`llm-jp/llm-jp-4-8b-base`|
| 学習手法 | 2段階 SFTStage 1: Full Fine-Tuning → Stage 2: LoRA |
| 学習データ | 合成データ 約160万件自作 + LLM蒸留 |
| 推論手法 | vLLM + `\boxed{}` 形式出力Self-Consistency対応 |
| 開発ベンチマーク精度 | 95%運営配布100問 |
| コンペ | ファインチューニングコンペ LLM 2026 数学タスク・オープン枠 |
## ベースモデルの選定
運営から提供された3つのベースモデル候補を開発用ベンチマーク100問で評価し、以下の結果を得ました。
| モデル | 精度 |
|--------|------|
| 事前学習のみ | 7% |
| 継続事前学習済み | 48% |
| インストラクションチューニング済み | 44% |
継続事前学習とSFTを組み合わせる方針だったため、追加の継続事前学習が行いやすく精度も最も高かった「継続事前学習済みモデル」を選定しました。
## 学習データセット
2種類のデータセットを作成し、段階的にモデルへ学習させています。
### データセット1: ベンチマーク指向型データ約60万件
評価ベンチマークの出題形式・分野を意識して作成したデータセットです。
- **問題生成**: LLMは不使用。日本語の設問テンプレートを手動で作成し、ランダムに組み合わせるロジックで生成。計算部分はSymPyを使用して式と回答の整合性を保証。
- **カバー範囲**: 中学・高校数学の評価対象カテゴリを網羅。約3万件のユニークな問題・回答ペアを作成。
- **CoT付与**: 各問題に対して Qwen/Qwen3-235B-A22B-Instruct-2507 で20個のCoTを生成Temperature / Top-p制御で多様性を確保。生成されたCoTと正解を突き合わせ、正確なもののみを採用。
- **最終データ量**: 約60万件3万問 × 正確なCoT
### データセット2: LLM完全生成型データ約100万件
問題・CoTの両方をLLMで生成した蒸留データセットです。NVIDIAの数学タスク精度向上に関する研究を参考にしています。
- **問題生成**: Qwen/Qwen3-235B-A22B-Instruct-2507 を使用。日本の中学・高校の数学カリキュラムに準拠した問題を全カテゴリで約5万件生成。ベンチマークとは独立した出題で汎化性能を意識。
- **回答・CoT生成**: Qwen/Qwen3-235B-A22B-Instruct-2507 を使用。各問題に対して20回の試行を行い、マジョリティ・ボーティング多数決で80%以上の一致率が得られたもののみを採用。
- **最終データ量**: 約100万件5万問 × 正確なCoT
## 学習手法
### Stage 1: Full Fine-Tuning
汎用的な数学推論能力の獲得を目的とし、LLM完全生成型データセット約100万件azuki-digital/ft-llm-2026-synthetic-ja-math-qwen-235b-v2でフルパラメータのファインチューニングを実施。
| パラメータ | 値 |
|-----------|-----|
| 手法 | Full Fine-Tuning |
| 学習率 | 2e-5 |
| データ | LLM完全生成型データ~100万件 |
### Stage 2: LoRA Fine-Tuning
ベンチマークの出題形式への適応を目的とし、ベンチマーク指向型データセット約60万件azuki-digital/ft-llm-2026-synthetic-ja-math-qwen-235b-v1でLoRAによる追加学習を実施。
| パラメータ | 値 |
|-----------|-----|
| 手法 | LoRA |
| ランク (r) | 64 |
| Alpha (α) | 128 |
| ドロップアウト | 0.03 |
| 学習率 | 1e-4 |
| データ | ベンチマーク指向型データ(~60万件 |
## 使い方
### プロンプトテンプレート
本モデルは以下のプロンプトテンプレートで学習・推論を行っています。出力は必ず `\boxed{}` で最終回答を囲む形式になります。
```
次の数学の問題を解いてください。
【厳守】
- 数式はLaTeXで書く。
- 最後の答えは必ず \boxed{} で1回だけ囲む。
問題:
{problem}
解答:
```
### 推論コードvLLM
```python
from vllm import LLM, SamplingParams
PROMPT_TEMPLATE = """\
次の数学の問題を解いてください。
【厳守】
- 数式はLaTeXで書く。
- 最後の答えは必ず \\boxed{{}} で1回だけ囲む。
問題:
{problem}
解答:
"""
model_path = "azuki-digital/llm-jp-4-math-lion"
llm = LLM(model=model_path, trust_remote_code=True)
sampling_params = SamplingParams(
temperature=0.0,
top_p=1.0,
max_tokens=4096,
)
problem = "2次方程式 x^2 - 5x + 6 = 0 を解きなさい。"
prompt = PROMPT_TEMPLATE.format(problem=problem)
outputs = llm.generate([prompt], sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
```
### 回答の抽出
モデルの出力から最終回答を取得するには、`\boxed{}` の中身を抽出してください。
```python
import re
def extract_answer(text: str) -> str:
"""text から最後の \\boxed{...} の中身を抽出する"""
key = r"\boxed{"
start = text.rfind(key)
if start == -1:
return ""
i = start + len(key)
depth = 1
out_chars = []
while i < len(text):
ch = text[i]
if ch == "{":
depth += 1
out_chars.append(ch)
elif ch == "}":
depth -= 1
if depth == 0:
return "".join(out_chars).strip()
out_chars.append(ch)
else:
out_chars.append(ch)
i += 1
return ""
```
### 推論時のTips
- **Self-Consistencyオプション**: 精度をさらに向上させたい場合、同一問題に対して複数回(例: 20回推論を行い、[Math-Verify](https://github.com/huggingface/Math-Verify)で回答を比較した上でマジョリティ・ボーティングを行う手法が有効です。学習に使用しなかった外部ベンチマークでは、この手法により精度が顕著に向上する傾向が確認されました。
- **リトライ**: `\boxed{}` が出力に含まれない場合は、同じ問題で再度推論を行うことで回答を得られる場合があります。
## 評価結果
| ベンチマーク | 精度 | 備考 |
|-------------|------|------|
| 開発用ベンチマーク100問 | **95%** | 運営配布の評価データ |
参考として、Qwen/Qwen3-30B-A3B-Instruct-2507 の同ベンチマークに対する精度は84%であり、本モデルはこれを上回る精度を達成しています。
## 制限事項
- 日本の中学・高校レベルの数学問題に特化して学習しているため、それ以外の領域での性能は保証されません。
- 合成データQwen3による蒸留データを中心に学習しているため、学習データの分布から外れるパターンの問題では精度が低下する可能性があります。
- 継続事前学習は当初計画していたものの、リソース・スケジュールの制約により未実施です。
## ライセンス
Apache License 2.0
## 引用
```bibtex
@misc{llm-jp-4-math-lion,
title={llm-jp-4-math-lion: Two-Stage SFT with Self-Consistency for Japanese Math Reasoning},
author={azuki-digital},
year={2026},
url={https://huggingface.co/azuki-digital/llm-jp-4-math-lion}
}
```