本文旨在总结目前看过的关于在知识追踪(Knowledge Tracing)中使用Attention的文章
EKT: Exercise-aware Knowledge Tracing for Student Performance Prediction
- EERNN
EERNN负责对习题进行嵌入表示,原本的EERNN把几个知识点合在一起了,对单个知识点掌握的解释性不够,现在把杂糅的KC向量转换为KC矩阵
在这篇文章中,EERNN的一个实现EERNNA(EERNN with Attention)中使用了Attention机制:

在这个结构中\(e_i\)和\(r_i\)分别为习题和对应的学生反馈,\(x_i\)则表示将习题 \(e_i\)转换成向量表示的结果(具体做法是将word embedding 送入双向LSTM结构,得到每个单词的上下文表示,然后拼接前向和后向,最后使用max pooling整合所有的word表示),\(\widetilde{x}_i\)表示将\(e_i\)和\(r_i\)进行拼接的结果,

接下来仍然使用LSTM来跟踪学生状态\(h_t\) ,在预测的时候,也就是当拿到习题 \(e_{T+1}\) 时, 会使用Attention机制,文中认为, 学生会在相似的习题上获得相似的结果,因此假设,学生在 \(T+1\) 时刻的状态是历史状态的加权和, 权重 \(\alpha_j\) 是计算 \(e_{T+1}\) 和 历史习题相似度得到的, 根据加权得到的状态,计算对应的 \(y_{T+1}\)
- EKT
EERNN的结构虽然能够进行学生表现的预测任务, 但是并不能进行知识追踪的任务, 也就是说, 并不能根据模型中的某个隐状态推测学生对于某个知识点的掌握情况, 因此这篇文章提出了EKT.
先给出EKT的结构图,要提到的是EKT和EERNN都给出了基于markov和基于attention版本的架构,但这里只讨论attention架构。
首先,输入的学术序列为 \(s=\{(k_i, e_i, r_i)\}\) , 多出的 \(k_i\) 为该题目的知识点(onehot形式),随后通过: \(v_t = \mathbf{W_k^T}k_t\) 将其编码为低维稠密向量,接下来的思路是探求每道习题对于提升学生在知识点 \(k_t\) 的影响, 通过权重 \(\beta_t\) 表示, 直觉上来说, 如果 \(t\) 时刻的习题与知识点 \(k_i\) 有关, 我们会将 \(\beta_t^i\)设为 1,其他为0, 但是这种想法过于直接, 知识点之间常有关联。
于是,受到知识增强记忆网络的启发, 引入了一个静态的记忆网络来计算这个权重 \(\beta_t\) , 设置一个记忆模块为矩阵 \(\mathbf{M}\in\mathbb{R}^{d_k×K}\) , 来储存 \(K\) 个知识点的表示。然后利用下式:
在得到上述系数之后, 将之前LSTM中的隐状态向量替换为矩阵,来追踪学生的知识状态:
其中 \(\widetilde{x}_t^i = \beta_t^i\widetilde{x}_t\)
那么对于学生表现预测来说, 首先对他当前时刻的状态进行聚合:
在attention背景下,\(H_T^i\)是通过类似于前面EERNN中的方式计算得到的,随后利用下式进行预测:
在知识追踪阶段,如果想知道学生对于某个知识点的掌握情况, 可以将前面的 \(\beta_t\) 置为 \((0,0,...,1,...,0)\) 的形式,换言之,等价于将前面式子中的 \(s_{T+1}\) 替换为 \(H_t^i\) , 然后利用下式计算一个数值 \(l_t^i\) 来反应学生对知识点的掌握程度。
A Self-Attentive model for Knowledge Tracing
这篇文章基本上是将transformer中的multi head self-attention进行了套用。
-
Embedding layer
嵌入层对输入的学生的做题交互interaction \(\mathbf{x}_t = (e_t, r_t)\) 转换为序列 \(s=(s_1, ...,s_n)\) 。主要做法为训练一个交互嵌入矩阵(Interaction embedding matrix) \(\mathbf{M}\) , 用于得到序列中 \(s_i\) 的嵌入\(\mathbf{M}_{s_i}\) 。类似的训练一个习题嵌入矩阵(exercise embedding matrix) \(\mathbf{E}\) , 对习题进行表示
Position Embedding :也类似与transformer中的位置嵌入, 这里的嵌入矩阵 \(\mathbf{P}\) ,是学习来的, 而不是三角函数形式。
那么整个Embedding layer得到的输出为:
\[\hat{\mathbf{M}}=\left[ \begin{array}{c} \mathbf{M}_{s_1}+\mathbf{P}_1 \\ \mathbf{M}_{s_2}+\mathbf{P}_2\\ ...\\ \mathbf{M}_{s_n}+\mathbf{P}_n \end{array} \right], \hat{\mathbf{E}}=\left[ \begin{array}{c} \mathbf{E}_{s_1} \\ \mathbf{E}_{s_2}\\ ...\\ \mathbf{E}_{s_n} \end{array} \right] \] -
Self-attention layer
这一部分基本上就是套用self-attention结构了,
这个模型并没有对于学生状态的追踪能力, 文章最后使用attention权重提供了一点解释性。