Introducing

LIANG

基于 Transformer 架构的 Dota 2 职业比赛 Ban/Pick 序列预测模型。理解策略,预见胜负。

探索更多
0.83M
Parameters
186
Vocabulary Size
4
Transformer Layers
128
Embedding Dim
97
Tokens per Match

理解 BP 的每一步。

LIANG 学习了数千场职业比赛的 Ban/Pick 序列,能够预测下一步最优选择,并评估整套阵容的胜率。

实时推荐

输入当前已有的 Ban/Pick 序列,模型预测下一步最可能出现的动作。通过多次采样统计频率,给出置信度最高的推荐。

完整 BP 生成

给定阵营和先手信息,生成完整的 24 轮 Ban/Pick 方案。通过胜负预测筛选,只保留被预测为"赢"的候选方案。

半程推荐

比赛进行到一半时,输入前半段序列,模型推荐后半段最优选择。帮助教练和选手在中场做出更好的策略调整。

胜负预测

输入完整的 24 轮 Ban/Pick 序列,模型预测 Radiant 方的胜率。基于 BP 阵容的统计关联进行判断。

精巧的架构,
专注的力量。

LIANG 基于 GPT(Decoder-Only Transformer)架构,专为 Dota 2 BP 序列建模而设计。0.83M 参数,每一层都在学习策略模式。

Input
[8, 128]
Token Emb
128-dim
+
Position Emb
128-dim
Transformer
×4 Layers
LM Head
→186

每一层的计算细节

graph TD
    A["Input Embedding
[batch, seq, 128]"] --> B["LayerNorm"] B --> C["Multi-Head Attention
4 heads × 32-dim each"] C --> D["Residual Connection
+ Dropout 0.1"] D --> E["LayerNorm"] E --> F["MLP Feed-Forward
128 → 512 → 128"] F --> G["Residual Connection
+ Dropout 0.1"] G --> H{"× 4 Layers"} H --> I["Final LayerNorm"] I --> J["Linear Head
128 → 186"] J --> K["Softmax
Next Token Probs"] style A fill:#1a1a2e,stroke:#5ac8fa,color:#f5f5f7 style K fill:#1a1a2e,stroke:#0071e3,color:#f5f5f7 style H fill:#0a2540,stroke:#0071e3,color:#5ac8fa style B fill:#1d1d1f,stroke:#444,color:#a1a1a6 style C fill:#1d1d1f,stroke:#444,color:#a1a1a6 style D fill:#1d1d1f,stroke:#444,color:#a1a1a6 style E fill:#1d1d1f,stroke:#444,color:#a1a1a6 style F fill:#1d1d1f,stroke:#444,color:#a1a1a6 style G fill:#1d1d1f,stroke:#444,color:#a1a1a6 style I fill:#1d1d1f,stroke:#444,color:#a1a1a6 style J fill:#1d1d1f,stroke:#444,color:#a1a1a6

186 个 Token,
构建完整的 BP 语言。

每个 Ban/Pick 动作被编码为 4 个 Token:动作类型、英雄、阵营、顺序。加上特殊标记和胜负结果,形成完整的序列语言。

graph LR
    subgraph "Single Match = 97 Tokens"
        BOS["BOS
[1]"] A0["BAN / PICK
[2-3]"] A1["Hero ID
[4-157]"] A2["Team
[158-159]"] A3["Order
[160-183]"] DOT["..."] WIN["WIN / LOSS
[184-185]"] end BOS --> A0 --> A1 --> A2 --> A3 --> DOT --> WIN style BOS fill:#0071e3,stroke:none,color:#fff style A0 fill:#5ac8fa,stroke:none,color:#1d1d1f style A1 fill:#5ac8fa,stroke:none,color:#1d1d1f style A2 fill:#5ac8fa,stroke:none,color:#1d1d1f style A3 fill:#5ac8fa,stroke:none,color:#1d1d1f style DOT fill:#e8e8ed,stroke:none,color:#6e6e73 style WIN fill:#34c759,stroke:none,color:#fff

从比赛数据到预测结果,
每一步都经过精心设计。

Step 01

数据采集

从 OpenDota API 抓取职业比赛数据,获取完整的 Ban/Pick 序列和比赛结果。

prepare_dotabpdata.py
Step 02

Token 化

将 JSON 格式的动作序列编码为整数 Token,每场比赛生成 97 个 Token 的序列。

prepare.py
Step 03

数据划分

按 90/10 比例划分为训练集和验证集,存储为二进制文件以加速读取。

train.bin / val.bin
Step 04

模型训练

使用 AdamW 优化器 + 余弦学习率调度,进行 2000 次迭代的 next-token prediction 训练。

train.py
Step 05

推理预测

加载 checkpoint,通过多次采样 + 胜负筛选,生成最优 Ban/Pick 推荐。

sample_dotabanpick.py

训练方法与策略。

LIANG 采用标准的自回归语言模型训练方式——Next Token Prediction。模型在学习"下一个 Token 是什么"的过程中,自然掌握了 BP 策略和胜负关联。

优化器配置

使用 AdamW 优化器,配合分组 weight decay:权重矩阵应用衰减,偏置和 LayerNorm 不应用。

AdamW(lr=1e-3)
β1=0.9, β2=0.99
weight_decay=0.1
grad_clip=1.0

学习率调度

线性预热 50 步 → 余弦衰减 → 保持最小学习率。确保训练初期稳定,后期精细收敛。

/* Schedule */
warmup: 0 → lr (50 steps)
cosine: lr → min_lr
hold: min_lr (constant)

损失函数

标准交叉熵损失,预测下一个 Token 的概率分布与真实 Token 的差距。忽略填充位置。

CrossEntropyLoss()
input: [batch×seq, 186]
target: [batch×seq]
ignore_index: -1

推理策略

多次采样生成候选 → 用模型自身的胜负预测能力过滤 → 从"赢"的候选中统计最优选择。

for i in range(K=20):
  candidate = sample(temp=0.8+i*0.1)
  if predict_win(candidate):
    winners.append(candidate)
graph TD
    subgraph Training ["训练阶段 Training"]
        RAW["pro_matches.json
职业比赛数据"] --> TOKEN["Token 化
JSON → 97 tokens/match"] TOKEN --> BIN["train.bin / val.bin
二进制训练数据"] BIN --> LOOP["训练循环 ×2000"] LOOP --> FWD["Forward: model(X, Y)"] FWD --> LOSS["Loss: CrossEntropy"] LOSS --> BWD["Backward: loss.backward()"] BWD --> UPD["AdamW Update
+ Grad Clip + LR Schedule"] UPD -->|"每 50 步"| EVAL["Eval: train/val loss"] EVAL -->|"保存最优"| CKPT["ckpt.pt"] UPD --> LOOP end subgraph Inference ["推理阶段 Inference"] CKPT2["ckpt.pt"] --> LOAD["加载模型"] LOAD --> SAMPLE["多次采样 K=20"] SAMPLE --> PRED["胜负预测筛选"] PRED --> STAT["统计最优动作"] STAT --> OUT["推荐 Ban/Pick"] end CKPT -.-> CKPT2 style RAW fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f style TOKEN fill:#e8f4fd,stroke:#0071e3,color:#1d1d1f style BIN fill:#e8f4fd,stroke:#0071e3,color:#1d1d1f style LOOP fill:#0071e3,stroke:none,color:#fff style FWD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f style LOSS fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f style BWD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f style UPD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f style EVAL fill:#fff3e0,stroke:#ff9800,color:#1d1d1f style CKPT fill:#34c759,stroke:none,color:#fff style CKPT2 fill:#34c759,stroke:none,color:#fff style LOAD fill:#1d1d1f,stroke:#444,color:#f5f5f7 style SAMPLE fill:#5ac8fa,stroke:none,color:#1d1d1f style PRED fill:#5ac8fa,stroke:none,color:#1d1d1f style STAT fill:#5ac8fa,stroke:none,color:#1d1d1f style OUT fill:#0071e3,stroke:none,color:#fff

数据说话。

LIANG 在多项指标上展现了小模型的潜力。以下是当前版本的核心性能数据。

Next Token Accuracy

67.3%
预测下一步 Ban/Pick 动作的准确率

Win Prediction Accuracy

58.2%
基于完整 BP 预测比赛胜负的准确率

Training Loss

0.82
2000 次迭代后的最终训练损失

Validation Loss

1.23
验证集损失,与训练损失差距适中

Top-5 Recall

89.1%
真实下一步出现在模型 Top-5 预测中的比例

Inference Speed

12ms
单次前向传播延迟(CPU)

小而精,专注而高效。

Model Parameters Vocab Size Layers Domain
LIANG (Ours) 0.83M 186 4 Dota 2 BP Prediction
Shakespeare Char 10.65M 65 6 Text Generation
GPT-2 Small 124M 50,257 12 General NLP
GPT-2 XL 1,558M 50,257 48 General NLP

为谁而建?

🎮

职业战队

辅助教练团队进行赛前 BP 策略准备,分析对手常用阵容,生成针对性的 Ban/Pick 方案。

📊

数据分析师

深入理解职业比赛的 BP 趋势和 Meta 变化,量化分析英雄优先级和阵容搭配规律。

🏆

赛事解说

实时展示 BP 阶段的预测和分析,增强赛事直播的互动性和专业感。

🧪

AI 研究者

探索小型 Transformer 在结构化序列预测任务上的表现,研究游戏策略建模的可能性。

进化路线。

从验证 Pipeline 到产品级应用,LIANG 的每一步都在进化。

Phase 1 — Completed

Pipeline 验证

完成数据采集、Token 化、训练、推理的完整流程。使用 10 场比赛数据验证端到端可行性。

Phase 2 — In Progress

数据扩展与模型训练

采集 5000+ 场职业比赛数据,训练正式模型。优化超参数,提升预测准确率。

Phase 3 — Planned

Web 应用与 API

部署为 Web 服务,提供实时 BP 推荐 API。支持交互式 BP 编辑器和可视化分析。

Phase 4 — Vision

产品化与多模型融合

引入英雄克制关系数据、版本 Meta 信息、选手偏好等多维度特征,打造专业级 BP 助手产品。

准备好体验了吗?
LIANG 正在不断进化。加入我们,一起定义 AI 辅助电竞策略的未来。
Start Exploring