本文旨在總結目前看過的關於在知識追蹤(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權重提供了一點解釋性。