首先是数据处理的代码:总体思路
代码将DataFrame对象转换为了张量,并将张量打包成数据加载器(DataLoader)对象。最后,函数返回图谱中的概念数量、静态图(如果graph_type为'Dense'、'Transition'或'DKT'则存在)、训练数据加载器、验证数据加载器和测试数据加载器。
processing.py的代码分块解释
class KTDataset(Dataset):
def __init__(self, features, questions, answers):
# 这些参数分别是由feature、question、answer组成的列表,每个元素对应于一个学生在一次考试中的一条记录
super(KTDataset, self).__init__()
self.features = features
self.questions = questions
self.answers = answers
def __getitem__(self, index):
# 在数据集对象被索引调用的时候,它接收一个index参数(是一个样本的索引),并返回对应与该索引的记录的feature、question、answer
# 即指定调用dataset[i]时,得到'i'索引下的sample
# 该方法返回一个三元组(self.features[index], self.questions[index], self.answers[index]),对应dataset中的每一个样本的特征、问题、答案
return self.features[index], self.questions[index], self.answers[index]
def __len__(self):
# 记录数据特征数量
return len(self.features)
def pad_collate(batch):
(features, questions, answers) = zip(*batch)
# 将每一个batch元组中的每个元素(features, questions, answers)解压生成三个对应的列表
features = [torch.LongTensor(feat) for feat in features]
questions = [torch.LongTensor(qt) for qt in questions]
answers = [torch.LongTensor(ans) for ans in answers]
# 再将每个列表的元素转为torch.LongTensor类型
feature_pad = pad_sequence(features, batch_first=True, padding_value=-1)
question_pad = pad_sequence(questions, batch_first=True, padding_value=-1)
answer_pad = pad_sequence(answers, batch_first=True, padding_value=-1)
# pad_sequence函数是PyTorch中的函数,用于将一个batch的数据按照序列长度进行padding,使得它们的长度都一样,以便于输入到神经网络中。
# 使用pad_sequence函数将他们进行填充,并转换为一个batch的向量
# 转换后再进行pad打包成一个tuple,作为函数的返回值
return feature_pad, question_pad, answer_pad