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

6.7 KiB
Raw Permalink Blame History

license datasets language base_model tags pipeline_tag
apache-2.0
pjura/mahjong_board_states
zh
unsloth/Qwen3-4B-Instruct-2507
riichi-mahjong
game-ai
qwen
qwen3
mahjong
discard-recommendation
gguf
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

适用范围

本模型面向四麻场景,不含赤宝牌。当前版本专注于"弃牌建议"这一单一任务,不提供完整对局规划,也不提供役种、打点或详细攻防解释。

使用限制

  • 仅支持弃牌建议
  • 不支持完整对局规划
  • 不支持役种、打点、进攻防守解释
  • 不保证竞赛或实战效果
  • 仅供研究与学习使用

禁止用途

禁止将本模型用于:

  • 作弊
  • 外挂
  • 代打
  • 真钱赌博辅助

模型输入输出

输入格式

模型输入为结构化自然语言局面描述。示例:

[情景分析]
- 牌局: 东一局,你是庄家 (第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%
场上已见牌信息
各玩家副露信息:本家副露:无, 下家副露:无, 对家副露:无, 上家副露:无
各玩家牌河信息:本家:无, 下家:无, 对家:无, 上家:无

[任务]
根据当前情景,选择一张最应该打出的手牌。

输出格式

模型输出严格为"单张牌文本",不带"打"字,不带解释。例如:

使用方法

llama.cpp 推理

llama-server -m Qwen3-4B-Instruct-2507-mahjong-alpha.gguf -c 2048

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 年数据按需抽取
  • 训练 / 验证 / 测试:完全互不重叠

数据集引用

@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 length2048

LoRA 参数

  • Rank128
  • Alpha256
  • 目标模块:全部

训练超参数

  • Learning rate1e-4
  • LR schedulercosine
  • Batch size64
  • 单卡批次:2
  • 梯度累积步数:32
  • Training steps3000
  • Warmup steps300
  • Random seed3407
  • 加载最优检查点:是

训练时间

  • 总时长:约 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 之一

仓库链接

License

本模型遵循 Apache License 2.0 许可证。

训练数据来自 pjura/mahjong_board_states,其许可证为 CC BY 4.0,使用时请保留相应署名与引用。

Acknowledgements

感谢以下开源资源:

  • unsloth/Qwen3-4B-Instruct-2507
  • pjura/mahjong_board_states
  • Mortal