# clawkt **Repository Path**: lookingstars/clawkt ## Basic Information - **Project Name**: clawkt - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-20 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # new_kt - A Modern Knowledge Tracing Library [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/) [![PyTorch 2.0+](https://img.shields.io/badge/pytorch-2.0+-orange.svg)](https://pytorch.org/) **new_kt** 是一个现代化的知识追踪库,使用 dataclass + OmegaConf 配置系统,提供完整的类型提示和 IDE 自动补全支持。 ## 特性 - 🔧 **类型安全的配置系统**: 使用 dataclass + OmegaConf,支持 YAML 文件和命令行参数覆盖 - 🧠 **多种知识追踪模型**: DKT、SimpleKT、DKVMN_KS - 📊 **完整的训练管道**: 训练器、评估器、检查点管理 - 🔌 **模块化设计**: 易于扩展新模型和组件 - 📈 **可选 GCN 支持**: DKVMN_KS 支持图卷积网络 ## 安装 ```bash cd new_kt pip install -e . ``` 可选依赖: ```bash # GCN 支持 pip install torch-geometric # WandB 日志 pip install wandb ``` ## 项目结构 ``` new_kt/ ├── config/ # 配置模块 (dataclass + OmegaConf) │ ├── base.py # 基础配置 │ ├── data.py # 数据配置 │ ├── model.py # 模型配置 │ ├── train.py # 训练配置 │ └── schema.py # 实验配置加载 │ ├── configs/ # YAML 配置文件 │ ├── dkt.yaml │ ├── simple_kt.yaml │ └── dkvmn_ks.yaml │ ├── data/ # 数据集目录 │ └── README.md # 数据集格式说明 │ ├── model/ # 模型模块 │ ├── base.py # KTModel 基类 │ ├── registry.py # 模型注册装饰器 │ ├── modules/ # 公共组件 │ │ ├── embedding.py # 嵌入层 │ │ ├── predictor.py # 预测层 │ │ ├── attention.py # 注意力机制 │ │ ├── memory.py # 记忆模块 │ │ └── gcn.py # GCN 模块 │ └── kt/ # 知识追踪模型 │ ├── dkt.py # DKT │ ├── simple_kt.py # SimpleKT │ └── dkvmn_ks.py # DKVMN_KS │ ├── trainer/ # 训练器模块 │ ├── base.py │ └── kt_trainer.py │ ├── evaluator/ # 评估模块 │ └── kt_evaluator.py │ ├── utils/ # 工具函数 │ ├── seed.py │ ├── metrics.py │ ├── logger.py │ └── checkpoint.py │ ├── cli/ # 命令行接口 │ └── train.py │ └── scripts/ # 示例脚本 ├── train_dkt.py ├── train_simple_kt.py └── train_dkvmn_ks.py ``` ## 快速开始 ### 1. 准备数据 将数据集放在 `data/` 目录下,支持 JSON 格式: ```json [ { "question_seq": [1, 5, 3, 7, 2], "correctness_seq": [1, 0, 1, 1, 0], "concept_seq": [1, 2, 1, 3, 2], "seq_len": 5 }, ... ] ``` ### 2. 准备 Q-Table Q-Table 是问题-知识点关联矩阵,保存为 NPZ 格式: ```python import numpy as np # q_table[i, j] = 1 表示问题 i 包含知识点 j q_table = np.zeros((num_questions, num_concepts)) # ... 填充关联关系 np.savez('data/q_table.npz', q_table=q_table) ``` ### 3. 创建配置文件 ```yaml # configs/my_config.yaml base: seed: 42 device: auto data: train: name: my_dataset data_dir: ./data batch_size: 64 max_seq_len: 200 model: model_name: DKT # ... 其他模型配置 train: epochs: 100 optimizer: type: adam lr: 0.001 ``` ### 4. 训练模型 **命令行方式:** ```bash python -m new_kt.cli.train \ --config configs/dkt.yaml \ --train-data data/train.json \ --valid-data data/valid.json \ --q-table data/q_table.npz \ --output-dir outputs/dkt ``` **Python 脚本方式:** ```python from omegaconf import OmegaConf from new_kt.config.schema import ExperimentConfig from new_kt.data.dataloader import create_dataloaders from new_kt.data.q_table import load_q_table from new_kt.model.kt.dkt import DKT from new_kt.trainer.kt_trainer import KTTrainer from new_kt.utils.seed import set_seed # 加载配置 config = ExperimentConfig.from_yaml("configs/dkt.yaml") # 设置随机种子 set_seed(config.base.seed) # 加载 Q-Table q_table_manager = load_q_table("data/q_table.npz") q_table = q_table_manager.get_q_table() q2c_transfer, q2c_mask = q_table_manager.get_transfer_tables() # 加载数据 dataloaders = create_dataloaders( train_data_path="data/train.json", valid_data_path="data/valid.json", max_seq_len=config.data.train.max_seq_len, batch_size=config.data.train.batch_size, ) # 创建模型 model = DKT.from_config( config.model, q_table=q_table, q2c_transfer_table=q2c_transfer, q2c_mask_table=q2c_mask, ) # 训练 trainer = KTTrainer(model, config.train) results = trainer.train( train_loader=dataloaders["train_loader"], valid_loader=dataloaders["valid_loader"], ) print(f"Best epoch: {results['best_epoch']}, Best AUC: {results['best_valid_metric']:.4f}") ``` ## 支持的模型 ### DKT (Deep Knowledge Tracing) 基于 RNN/LSTM/GRU 的知识追踪模型。 ```yaml model: model_name: DKT concept_embed: dim: 128 correctness_embed: dim: 128 init_method: init_correctness_1 encoder_type: gru # rnn, lstm, gru dim_hidden: 256 num_layers: 1 dropout: 0.3 ``` ### SimpleKT 基于 Transformer 的简洁知识追踪模型。 ```yaml model: model_name: SimpleKT dim_model: 256 num_heads: 4 num_blocks: 4 dim_ff: 64 dropout: 0.2 ``` ### DKVMN_KS (Dynamic Key-Value Memory Network) 基于动态键值记忆网络的知识追踪模型,支持知识传播和可选 GCN。 ```yaml model: model_name: DKVMN_KS dim_key: 64 dim_value: 64 propagation_strength: 0.5 fusion_alpha: 0.8 fusion_beta: 0.4 window_size: 5 use_gcn: false dropout: 0.2 ``` ## 配置系统 new_kt 提供灵活的配置系统,支持 YAML 文件、Python 字典、命令行参数等多种方式。 ### 使用工厂函数(推荐) ```python from new_kt.config.flexible_config import ( create_dkt_config, create_simple_kt_config, create_dkvmn_ks_config, ExperimentConfig, ) # 创建模型配置 model_config = create_dkt_config( num_concepts=100, dim_concept=128, encoder_type="gru", dim_hidden=256, dropout=0.3, ) # 创建完整实验配置 config = ExperimentConfig( experiment_name="dkt_experiment", model=model_config, ) ``` ### 从 YAML 加载 ```python from new_kt.config.flexible_config import ExperimentConfig # 加载配置 config = ExperimentConfig.from_yaml("configs/dkt.yaml") # 访问配置(支持 IDE 自动补全) print(config.model.model_name) print(config.train.epochs) ``` ### 参数覆盖 ```python # 方式1: 链式调用 config = config.override( model_dropout=0.5, train_epochs=50, ) # 方式2: 字典方式 config = config.override(**{ "model.dropout": 0.5, "train.epochs": 50, }) ``` ### 命令行覆盖 ```bash python -m new_kt.cli.train --config configs/dkt.yaml \ model.dropout=0.5 \ train.epochs=50 \ train.optimizer.lr=0.0001 ``` ### 自定义模型配置 ```python from new_kt.config.flexible_config import ModelConfig, EmbeddingConfig # 使用 extra 字段存储自定义参数 my_config = ModelConfig( model_name="MyModel", model_type="custom", embeddings={ "concept": EmbeddingConfig(name="concept", num_items=100, dim=128), }, dropout=0.2, extra={ "attention_type": "multi_head", "num_attention_heads": 8, "use_residual": True, }, ) ``` 详细配置文档请参阅 [docs/CONFIGURATION.md](docs/CONFIGURATION.md)。 ## 自定义模型 1. 创建模型类,继承 `KTModel`: ```python from new_kt.model.base import KTModel from new_kt.model.registry import register_model from omegaconf import DictConfig @register_model("MyModel") class MyModel(KTModel): model_name = "MyModel" def __init__(self, config: DictConfig, q_table: torch.Tensor): super().__init__(config, q_table) # 初始化模型组件 @classmethod def from_config(cls, config: DictConfig, **kwargs): return cls(config, **kwargs) def forward(self, batch): # 前向传播 pass ``` 2. 创建配置 dataclass: ```python from dataclasses import dataclass from new_kt.config.model import EmbedConfig, PredictorConfig @dataclass class MyModelConfig: model_name: str = "MyModel" # 添加自定义配置 ``` ## API 参考 详细 API 文档请参阅 [docs/API.md](docs/API.md)。 ## 引用 如果您使用了本库,请引用相关论文: **DKT:** ```bibtex @inproceedings{piech2015deep, title={Deep knowledge tracing}, author={Piech, Chris and Spencer, Jonathan and Huang, Jonathan and Ganguli, Surya and Sahami, Mehran and Guibas, Leonidas and Sohl-Dickstein, Jascha}, booktitle={Advances in Neural Information Processing Systems}, year={2015} } ``` **SimpleKT:** ```bibtex @article{liu2022simplekt, title={SimpleKT: How Simple is Simple Knowledge Tracing?}, author={Liu, Zitao and Shen, Yang and Hu, Yicheng and Cui, Jiahao and Zhang, Weiqi}, journal={arXiv preprint arXiv:2302.06885}, year={2022} } ``` ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request!