AgentSkillsCN

Kt Model Dev

KT 模型开发

SKILL.md

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

注册过程:

  1. 验证模型文件格式
  2. pykt/models/init_model.py 中添加:
    • 导入语句:from .my_model import MyModel
    • 初始化分支:elif model_name == "my_model":
  3. configs/kt_config.json 中添加默认配置
  4. 创建备份以支持回滚

回滚功能:

code
.backup/
├── my_model_20260202_120000_init_model.py
└── my_model_20260202_120000_kt_config.json

test_model.py - 测试工具

快速测试新模型的训练和推理功能。

参数:

参数必需默认描述
--model-m-模型名称(已注册的)
--dataset-dNone数据集名称
--epochs-e10训练轮数
--batch_size-b32批次大小
--seq_len-s50序列长度
--learning_rate-lr1e-3学习率
--num_c-c100概念数量

示例:

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.mdpyKT 架构详解
references/example_mymodel.py完整示例代码
templates/*.template模型模板源文件
skills/kt-experiment/模型实验工具
skills/dataset-prep/数据准备工具

下一步

创建模型后,可以使用:

  1. kt-experiment - 运行系统性实验
  2. kt-hyperopt - 超参数优化(未来)

Last updated: 2026-02-02