kt-model-dev Skill
用于在 pyKT 工具包中创建、集成和测试新知识追踪模型的完整工具集。
何时使用此技能
当您需要:
- •创建新 KT 模型:基于现有架构(RNN/Attention/Memory)开发新模型
- •自定义现有模型:修改 pyKT 的现有模型以满足特定需求
- •快速原型验证:快速实现和测试新想法
- •模型注册:将自定义模型集成到 pyKT 训练流程中
此技能提供:
- •📝 代码模板:3 种架构类型的完整模板
- •🔧 创建工具:自动生成模型脚手架
- •📋 注册工具:自动注册到 pyKT(支持回滚)
- •🧪 测试工具:快速验证模型功能
快速开始
步骤 1: 创建模型
bash
# 使用 RNN 模板创建新模型 python scripts/create_model.py --name my_dkt --type rnn --output my_dkt.py # 使用 Attention 模板 python scripts/create_model.py --name my_akt --type attention --output my_akt.py # 使用 Memory 模板 python scripts/create_model.py --name my_dkvmn --type memory --output my_dkvmn.py
步骤 2: 自定义模型
编辑生成的文件,添加您的创新逻辑。
步骤 3: 注册到 pyKT
bash
# 注册新模型 python scripts/register_model.py --model_file my_dkt.py --model_name my_dkt # 如果出问题,回滚 python scripts/register_model.py --undo
步骤 4: 测试模型
bash
# 快速测试 python scripts/test_model.py --model my_dkt --dataset assist2009 --epochs 10
模板类型
1. RNN 模板 (rnn)
适用于基于 LSTM/GRU 的模型:
python
class MyRNNModel(nn.Module):
def __init__(self, num_c, emb_size=128, hidden_size=None,
num_layers=1, dropout=0.1, rnn_type='lstm', ...):
# 嵌入层
# RNN层 (LSTM/GRU)
# 输出层
pass
def forward(self, q, r):
# 交互嵌入 → RNN → 预测
pass
包含组件:
- •交互嵌入层 (
qid格式) - •LSTM 或 GRU 层
- •Dropout 正则化
- •输出预测层
- •损失计算函数
推荐使用场景:
- •概念追踪基线
- •需要捕捉时序依赖
- •资源受限环境
2. Attention 模板 (attention)
适用于基于 Transformer 的模型:
python
class MyAttentionModel(nn.Module):
def __init__(self, num_c, num_q=None, d_model=128,
num_heads=4, num_blocks=2, d_ff=256, ...):
# 嵌入层
# 位置编码
# Transformer 编码器块
# 输出层
pass
def forward(self, q, r):
# 嵌入 + 位置编码 → Transformer → 预测
pass
包含组件:
- •嵌入层(支持多种
emb_type) - •位置编码(正弦位置编码)
- •多头自注意力层
- •Transformer 块(前馈网络 + 层归一化)
- •输出层
推荐使用场景:
- •捕捉长期依赖
- •需要注意力可视化
- •高性能需求
3. Memory 模板 (memory)
适用于记忆增强网络:
python
class MyMemoryModel(nn.Module):
def __init__(self, num_c, memory_size=None, key_dim=64,
value_dim=64, ...):
# Key Matrix(静态)
# Value Matrix(动态)
# 读操作
# 写操作
pass
def forward(self, q, r):
# Key Lookup → Read → Write → Predict
pass
包含组件:
- •Key Matrix(概念键表示)
- •Value Matrix(知识状态)
- •基于内容的注意力读操作
- •写操作(擦除+添加)
- •输出层
推荐使用场景:
- •需要可解释的记忆追踪
- •概念间关系明确
- •长期知识状态维护
脚本参考
create_model.py - 模型生成器
生成符合 pyKT 架构的模型代码。
参数:
| 参数 | 短 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
--name | -n | 是 | - | 模型名称(如 my_dkt) |
--type | -t | 是 | - | 模板类型:rnn, attention, memory |
--output | -o | 否 | {name}.py | 输出文件路径 |
--class_name | -c | 否 | 自动生成 | 类名(默认:NameModel) |
--emb_type | - | 否 | qid | 默认嵌入类型 |
示例:
bash
# 创建 RNN 模型 python create_model.py --name my_rnn --type rnn # 创建 Attention 模型,指定类名 python create_model.py --name my_attn --type attention --class_name MyCustomAKT # 创建 Memory 模型,自定义输出路径 python create_model.py --name my_mem --type memory --output ./my_models/my_memory.py
输出文件结构:
python
# my_rnn.py
class MyRnnModel(nn.Module):
def __init__(self, num_c, emb_size=128, ...):
self.model_name = "my_rnn"
# 初始化网络层...
def forward(self, q, r, **kwargs):
# 前向传播逻辑...
pass
@staticmethod
def get_default_config():
return {"learning_rate": 1e-3, "emb_size": 128, ...}
@staticmethod
def get_batch_size():
return 256
def init_my_rnn(model_config, data_config, emb_type):
"""注册函数"""
return MyRnnModel(...)
if __name__ == "__main__":
# 快速测试代码
pass
register_model.py - 注册工具
将模型自动注册到 pyKT 工具包。
参数:
| 参数 | 短 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
--model_file | -f | 是* | - | 模型 Python 文件路径 |
--model_name | -m | 否 | 自动检测 | 模型注册名称 |
--kt_root | -r | 否 | 自动检测 | pyKT 根目录 |
--undo | -u | 是* | - | 回滚上次注册 |
--list_backups | -l | 否 | - | 列出可用备份 |
示例:
bash
# 注册新模型
python register_model.py --model_file my_dkt.py --model_name my_dkt
# 指定 pyKT 目录
python register_model.py --model_file ./models/my_model.py \
--model_name my_model \
--kt_root /path/to/pykt-toolkit
# 回滚上次注册
python register_model.py --undo
# 列出所有备份
python register_model.py --list_backups
注册过程:
- •验证模型文件格式
- •在
pykt/models/init_model.py中添加:- •导入语句:
from .my_model import MyModel - •初始化分支:
elif model_name == "my_model":
- •导入语句:
- •在
configs/kt_config.json中添加默认配置 - •创建备份以支持回滚
回滚功能:
code
.backup/ ├── my_model_20260202_120000_init_model.py └── my_model_20260202_120000_kt_config.json
test_model.py - 测试工具
快速测试新模型的训练和推理功能。
参数:
| 参数 | 短 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
--model | -m | 是 | - | 模型名称(已注册的) |
--dataset | -d | 否 | None | 数据集名称 |
--epochs | -e | 否 | 10 | 训练轮数 |
--batch_size | -b | 否 | 32 | 批次大小 |
--seq_len | -s | 否 | 50 | 序列长度 |
--learning_rate | -lr | 否 | 1e-3 | 学习率 |
--num_c | -c | 否 | 100 | 概念数量 |
示例:
bash
# 快速架构测试
python test_model.py --model my_dkt --epochs 5
# 使用数据集配置
python test_model.py --model my_dkt --dataset assist2009 --epochs 20
# 自定义超参数
python test_model.py --model my_akt \
--dataset assist2009 \
--epochs 15 \
--batch_size 64 \
--learning_rate 5e-4
# 短序列测试
python test_model.py --model my_dkt --seq_len 20
输出示例:
code
Device: cuda [1/3] Loading model... Loaded via init_model: my_dkt Parameters: 1,234,567 [2/3] Preparing data... Samples: 500, Batches: 16 [3/3] Training for 10 epochs... Epoch 1/10: Loss=0.6921, AUC=0.5123, ACC=0.5012 Epoch 2/10: Loss=0.6512, AUC=0.5345, ACC=0.5234 ... Epoch 10/10: Loss=0.4523, AUC=0.6789, ACC=0.6456 Test Results: Best AUC: 0.6789 ✓ Model test PASSED
开发流程
完整示例:创建新 KT 模型
1. 创建模型
bash
cd skills/kt-model-dev
python scripts/create_model.py \
--name attention_kt \
--type attention \
--output ./my_models/attention_kt.py
2. 编辑模型
修改 attention_kt.py,添加您的创新:
python
class AttentionKtModel(nn.Module):
def __init__(self, num_c, num_q=None, d_model=128, **kwargs):
# 自定义初始化逻辑...
pass
def forward(self, q, r, **kwargs):
# 添加创新机制...
pass
3. 注册模型
bash
python scripts/register_model.py \
--model_file ./my_models/attention_kt.py \
--model_name attention_kt
4. 快速测试
bash
python scripts/test_model.py \
--model attention_kt \
--dataset assist2009 \
--epochs 20
5. 完整实验
bash
cd ../../pykt-toolkit/examples
python wandb_train.py \
--model_name attention_kt \
--dataset_name assist2009 \
--fold 0,1,2,3,4 \
--emb_size 128 \
--num_attn_heads 4 \
--num_blocks 2
模型开发指南
必需接口
所有模型必须实现:
python
class MyModel(nn.Module):
def __init__(self, num_c, **kwargs):
self.model_name = "my_model" # 必需
self.num_c = num_c
# 初始化层...
def forward(self, q, r, **kwargs):
"""返回 [batch_size, seq_len, num_c] 的预测概率"""
pass
支持的数据格式
| 字段 | 形状 | 描述 |
|---|---|---|
q | [B, T] | 概念序列 |
r | [B, T] | 作答序列 (0/1) |
y_pred | [B, T, num_c] | 预测概率 |
嵌入类型
python
# 在 __init__ 中支持 emb_type
if emb_type.startswith("qid"):
self.interaction_emb = Embedding(num_c * 2, emb_size)
elif emb_type == "qc_merge":
self.concept_emb = nn.Parameter(...)
self.question_emb = Embedding(...)
配置文件格式
json
// configs/kt_config.json
{
"my_model": {
"learning_rate": 1e-3,
"emb_size": 128,
"dropout": 0.1,
"num_layers": 1
}
}
故障排除
模型无法导入
bash
# 检查文件是否存在 ls -la my_model.py # 检查 Python 路径 export PYTHONPATH=$PYTHONPATH:. # 测试导入 python -c "from my_model import MyModel"
注册失败
bash
# 检查 pyKT 目录 cd /path/to/pykt-toolkit ls pykt/models/init_model.py ls configs/kt_config.json # 尝试手动回滚 python scripts/register_model.py --undo # 检查错误信息 python scripts/register_model.py --model_file my_model.py 2>&1
训练失败
bash
# 使用模拟数据测试 python scripts/test_model.py --model my_model --epochs 3 # 检查数据格式 python -c " import torch q = torch.randint(1, 100, (32, 50)) r = torch.randint(0, 2, (32, 50)) print(q.shape, r.shape) " # 检查 CUDA python -c "import torch; print(torch.cuda.is_available())"
性能问题
bash
# 检查模型参数数量
python -c "
from my_model import MyModel
m = MyModel(num_c=100)
print(f'Params: {sum(p.numel() for p in m.parameters()):,}')
"
# 使用更小的配置测试
python scripts/test_model.py --model my_model --batch_size 16 --seq_len 20
相关资源
| 资源 | 描述 |
|---|---|
references/architecture_guide.md | pyKT 架构详解 |
references/example_mymodel.py | 完整示例代码 |
templates/*.template | 模型模板源文件 |
skills/kt-experiment/ | 模型实验工具 |
skills/dataset-prep/ | 数据准备工具 |
下一步
创建模型后,可以使用:
- •kt-experiment - 运行系统性实验
- •kt-hyperopt - 超参数优化(未来)
Last updated: 2026-02-02