Qwen3-4B-Instruct-2507-mahj.../README.md
TTDXQ cabd63252b docs: 更新模型卡,补充完整模型说明与评测结果
- 保留原有 YAML 元数据(license, datasets, language, base_model, tags)
- 补充完整的模型描述、使用方法、评测结果
- 添加 GitHub 和 Hugging Face 仓库链接
- 添加完整的训练信息和数据处理说明
- 中英双语版本
2026-03-15 23:36:19 +08:00

252 lines
6.7 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.

---
license: apache-2.0
datasets:
- pjura/mahjong_board_states
language:
- zh
base_model:
- unsloth/Qwen3-4B-Instruct-2507
tags:
- riichi-mahjong
- game-ai
- qwen
- qwen3
- mahjong
- discard-recommendation
- gguf
pipeline_tag: text-generation
---
# Qwen3-4B-Instruct-2507-mahjong-alpha
`Qwen3-4B-Instruct-2507-mahjong-alpha` 是一个基于 `unsloth/Qwen3-4B-Instruct-2507` 进行 QLoRA 微调的立直麻将垂直模型,面向四麻弃牌建议任务。
模型可根据输入的场次信息、手牌、副露、牌河、牌效与防守信息,输出当前最应打出的一张牌。
当前版本主要面向工具集成场景,推理输出为单张牌文本,不包含解释信息。
## 模型特点
- **任务**:四麻立直麻将弃牌建议
- **基座模型**`unsloth/Qwen3-4B-Instruct-2507`
- **微调方式**`QLoRA`
- **训练框架**`Unsloth`
- **发布格式**`GGUF (F16)`
- **推理方式**`llama.cpp`
- **维护者**`TTDXQ`
## 适用范围
本模型面向四麻场景,不含赤宝牌。当前版本专注于"弃牌建议"这一单一任务,不提供完整对局规划,也不提供役种、打点或详细攻防解释。
## 使用限制
- 仅支持弃牌建议
- 不支持完整对局规划
- 不支持役种、打点、进攻防守解释
- 不保证竞赛或实战效果
- 仅供研究与学习使用
## 禁止用途
禁止将本模型用于:
- 作弊
- 外挂
- 代打
- 真钱赌博辅助
## 模型输入输出
### 输入格式
模型输入为结构化自然语言局面描述。示例:
```text
[情景分析]
- 牌局: 东一局,你是庄家 (第1巡牌墙余69张)。
- 状态: 当前排名 1/4 (与一位差 0)。
- 宝牌: 5万
- 各玩家分数: 你有 25分, 下家: 25分, 对家: 25分, 上家: 25分。
- 你的手牌: 1万 5万 7万 3筒 5筒 6筒 8筒 8筒 3索 5索 8索 南 白 发
- 牌效: 5 向听,进张 82 张。
- 防御:
最安全牌放铳率11.3%
平均放铳率18.5%
最危险牌放铳率25.9%
场上已见牌信息
各玩家副露信息:本家副露:无, 下家副露:无, 对家副露:无, 上家副露:无
各玩家牌河信息:本家:无, 下家:无, 对家:无, 上家:无
[任务]
根据当前情景,选择一张最应该打出的手牌。
```
### 输出格式
模型输出严格为"单张牌文本",不带"打"字,不带解释。例如:
```text
```
## 使用方法
### llama.cpp 推理
```bash
llama-server -m Qwen3-4B-Instruct-2507-mahjong-alpha.gguf -c 2048
```
### Python 推理示例
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"TTDXQ/Qwen3-4B-Instruct-2507-mahjong-alpha"
)
tokenizer = AutoTokenizer.from_pretrained(
"TTDXQ/Qwen3-4B-Instruct-2507-mahjong-alpha"
)
# 准备输入
input_text = "[情景分析]\n- 牌局: 东一局,你是庄家 (第1巡牌墙余69张)。\n..."
# 推理
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=10)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result) # 输出: 白
```
## 数据集
训练数据使用 `pjura/mahjong_board_states` 的 2018 年部分数据。该数据集来源于天风麻将的游玩记录,每条数据包含 511 个数据点,涵盖游戏基础信息、宝牌指示牌、视角玩家手牌、玩家副露、牌河信息、玩家舍牌、弃牌决策等。
### 数据处理
将原始数据转换为便于阅读的自然语言描述形式,并根据数据计算出巡目数、实际宝牌、简易放铳参考等信息。根据巡目调整样本比例:
- 1~3 巡15%
- 4~6 巡20%
- 7~12 巡35%
最终使用 `192000` 条样本,未混入通用指令数据或自建数据。
- 训练集:`192000`
- 验证集:`2000`
- 测试集:`2019 年数据按需抽取`
- 训练 / 验证 / 测试:完全互不重叠
### 数据集引用
```bibtex
@dataset{mahjong_board_states,
title = {MahJong Board States Dataset},
author = {Patrick Jura},
year = {2024},
url = {https://huggingface.co/datasets/pjura/mahjong_board_states}
}
```
## 训练信息
### 模型配置
- 基础模型:`unsloth/Qwen3-4B-Instruct-2507`
- 训练加载精度:`4bit`
- 微调方式:`QLoRA`
- 训练框架:`Unsloth`
- Max sequence length`2048`
### LoRA 参数
- Rank`128`
- Alpha`256`
- 目标模块:全部
### 训练超参数
- Learning rate`1e-4`
- LR scheduler`cosine`
- Batch size`64`
- 单卡批次:`2`
- 梯度累积步数:`32`
- Training steps`3000`
- Warmup steps`300`
- Random seed`3407`
- 加载最优检查点:是
### 训练时间
- 总时长:约 16.44 小时
## 评测结果
### 与数据库弃牌动作对比
推理参数Temperature=0.1, Top_P=0.1
**评测指标说明**
- 得分:满分 500 分(每个样本正确得 1 分,错误得 0 分)
- 样本全对率3 次测试均与测试集结果一致的样本占全部样本的比例
- 样本零分率3 次测试均与测试集结果不符的样本占全部样本的比例
#### 牌效测试
| 模型 | 方法 | 得分 | 样本全对率 | 样本零分率 |
|------|------|------|------------|------------|
| Qwen3-4B | 提示词工程 | 50.21 | 6.60% | 86.13% |
| Qwen3-4B | 微调 | 229.66 | 45.87% | 53.93% |
| DeepSeek-V3.2 | 提示词工程 | 181.66 | 21.40% | 46.33% |
#### 防守测试
| 模型 | 方法 | 得分 | 样本全对率 | 样本零分率 |
|------|------|------|------------|------------|
| Qwen3-4B | 提示词工程 | 53.55 | 6.17% | 84.43% |
| Qwen3-4B | 微调 | 239.89 | 47.93% | 52.00% |
| DeepSeek-V3.2 | 提示词工程 | 172.00 | 16.00% | 46.80% |
#### 综合测试
| 模型 | 方法 | 得分 | 样本全对率 | 样本零分率 |
|------|------|------|------------|------------|
| Qwen3-4B | 提示词工程 | 53.44 | 0.60% | 84.40% |
| Qwen3-4B | 微调 | 233.33 | 46.53% | 53.20% |
| DeepSeek-V3.2 | 提示词工程 | 179.44 | 18.07% | 44.93% |
### 与 Mortal 对比
推理参数Temperature=0.6, Top_P=0.95
#### 测试1全部巡目数据
- 样本数3000
- Top-1 准确率:**50.73%**
- Top-3 准确率:**83.37%**
#### 测试2去除早巡数据
- 有效样本数3000
- Top-1 准确率:**48.70%**
- Top-3 准确率:**79.20%**
> Mortal 是当前开源最强的立直麻将 AI 之一
## 仓库链接
- GitHubhttps://github.com/ttdxq/Qwen3-4B-Instruct-2507-mahjong-alpha
- Hugging Facehttps://huggingface.co/TTDXQ/Qwen3-4B-Instruct-2507-mahjong-alpha
## License
本模型遵循 Apache License 2.0 许可证。
训练数据来自 `pjura/mahjong_board_states`,其许可证为 `CC BY 4.0`,使用时请保留相应署名与引用。
## Acknowledgements
感谢以下开源资源:
- `unsloth/Qwen3-4B-Instruct-2507`
- `pjura/mahjong_board_states`
- `Mortal`