EduGap Docs

Bayesian Knowledge Tracing (BKT)

Sử dụng mô hình Hidden Markov Model để theo dõi trạng thái làm chủ kiến thức của học viên.

Trong khi điểm Elo đại diện cho năng lực tổng quát, Bayesian Knowledge Tracing (BKT) (dựa trên nghiên cứu nền tảng của Corbett & Anderson (1994)) được sử dụng như một lớp phủ để giám sát mức độ làm chủ (Mastery Probability) đối với từng khái niệm kiến thức (Concept) cụ thể theo chuỗi thời gian học tập.


1. Bản chất Mô hình Hidden Markov Model

BKT coi quá trình học tập là một Mô hình Markov ẩn (Hidden Markov Model - HMM) gồm:

  • Trạng thái ẩn (Hidden States): Học viên đã hiểu bài (LL) hoặc chưa hiểu bài (UU).
  • Hành động quan sát (Observed Action): Học viên trả lời Đúng (11) hoặc Sai (00).

Mô hình được xác định bởi 4 tham số xác suất ban đầu (được tối ưu hóa hoặc gán mặc định):

Tham sốÝ nghĩa toán họcGiá trị mặc định
P(L0)P(L_0) (Prior)Xác suất học viên đã hiểu bài trước lượt làm đầu tiên.0.250.25
P(T)P(T) (Transition)Xác suất học viên chuyển từ chưa hiểu sang hiểu bài sau 1 lượt luyện tập.0.100.10
P(G)P(G) (Guess)Xác suất học viên trả lời đúng dù thực chất chưa hiểu bài.0.200.20
P(S)P(S) (Slip)Xác suất học viên làm sai ngớ ngẩn dù thực tế đã hiểu bài.0.100.10

2. Công thức Cập nhật Bayesian

Tại mỗi lượt trả lời thứ tt, hệ thống cập nhật xác suất làm chủ qua 2 bước:

Bước 1: Tính xác suất hậu nghiệm (Posterior Probability)

Dựa trên kết quả thực tế Đúng/Sai của học viên, tính xác suất thực sự đã hiểu bài:

  • Nếu câu trả lời ĐÚNG (Correct): P(LtCorrect)=P(Lt1)(1P(S))P(Lt1)(1P(S))+(1P(Lt1))P(G)P(L_t \mid \text{Correct}) = \frac{P(L_{t-1}) \cdot (1 - P(S))}{P(L_{t-1}) \cdot (1 - P(S)) + (1 - P(L_{t-1})) \cdot P(G)}

  • Nếu câu trả lời SAI (Incorrect): P(LtIncorrect)=P(Lt1)P(S)P(Lt1)P(S)+(1P(Lt1))(1P(G))P(L_t \mid \text{Incorrect}) = \frac{P(L_{t-1}) \cdot P(S)}{P(L_{t-1}) \cdot P(S) + (1 - P(L_{t-1})) \cdot (1 - P(G))}

Bước 2: Cập nhật xác suất cho cơ hội tiếp theo

Cơ hội chuyển tiếp trạng thái khi học viên tiếp nhận kiến thức mới:

P(Lt+1)=P(LtResult)+(1P(LtResult))P(T)P(L_{t+1}) = P(L_t \mid \text{Result}) + (1 - P(L_t \mid \text{Result})) \cdot P(T)


3. Hỗ trợ Điểm một phần (Partial Credit Interpolation)

Đối với các câu hỏi tự luận ngắn hoặc chấm điểm qua AI có thang điểm liên tục từ 0.00.0 đến 1.01.0, hệ thống áp dụng phương pháp nội suy tuyến tính (Linear Interpolation) để tính toán xác suất hậu nghiệm:

P(Ltscore)=scoreP(LtCorrect)+(1score)P(LtIncorrect)P(L_t \mid \text{score}) = \text{score} \cdot P(L_t \mid \text{Correct}) + (1 - \text{score}) \cdot P(L_t \mid \text{Incorrect})


4. Cơ chế Bảo vệ Khỏi "Mastery Trap"

Khi xác suất P(Lt)P(L_t) tiến sát tới 1.01.0 hoặc 0.00.0, mô hình Bayesian sẽ rơi vào trạng thái hấp thụ (absorbing state), nghĩa là các tương tác sau đó (cho dù liên tục đúng hay sai) hầu như không thể làm thay đổi xác suất này nữa.

Để ngăn chặn "Mastery Trap", hệ thống giới hạn xác suất cập nhật trong đoạn cứng [0.0001,0.9999][0.0001, 0.9999] và làm tròn 4 chữ số thập phân:

# Tránh hấp thụ trạng thái 1.0 và 0.0
p_mastery_new = p_posterior + (1.0 - p_posterior) * params.transition_learn
return round(min(0.9999, max(0.0001, p_mastery_new)), 4)

5. Ánh xạ Trạng thái Năng lực (Mastery States)

Xác suất làm chủ BKT P(L)P(L) sẽ được chuyển đổi thành trạng thái năng lực hiển thị trên cơ sở dữ liệu và giao diện người dùng:

  • Weak (Yếu): P(L)<0.30P(L) < 0.30 — Chưa nắm vững kiến thức, cần tăng cường bài tập cơ bản.
  • Learning (Đang học): 0.30P(L)<0.850.30 \le P(L) < 0.85 — Đang tiến bộ, tiếp tục luyện tập để thu hẹp khoảng cách.
  • Mastered (Làm chủ): P(L)0.85P(L) \ge 0.85 — Đã làm chủ hoàn toàn, đủ điều kiện chuyển sang học phần tiếp theo.

6. Tích hợp Đường cong Lãng quên (FSRS Lazy Decay)

Để giải quyết vấn đề xác suất làm chủ kiến thức luôn tăng hoặc bị kẹt ở mức tối đa do mô hình BKT truyền thống không tự suy giảm theo thời gian, EduGap tích hợp thuật toán Đường cong Lãng quên (Forgetting Curve) dựa trên cơ chế FSRS (Free Spaced Repetition Scheduler) Lazy Decay (xem trích dẫn chi tiết tại Ye (2022)).

A. Công thức Suy giảm Độ thông thạo (Decay Formula)

Khi học viên không tương tác với một khái niệm trong khoảng thời gian Δt\Delta t (tính bằng ngày), xác suất làm chủ hiệu dụng sẽ suy giảm theo hàm mũ cơ số 2:

P(Leffective)=P(Lstored)2ΔtSP(L_{\text{effective}}) = P(L_{\text{stored}}) \cdot 2^{-\frac{\Delta t}{S}}

Trong đó:

  • P(Lstored)P(L_{\text{stored}}): Xác suất làm chủ BKT được lưu trong cơ sở dữ liệu.
  • Δt\Delta t: Khoảng thời gian kể từ lần luyện tập gần nhất của học viên đối với concept đó: Δt=tnowtlast_practice86400.0\Delta t = \frac{t_{\text{now}} - t_{\text{last\_practice}}}{86400.0} (Trong đó tnowt_{\text{now}} là mốc thời gian hiện tại và tlast_practicet_{\text{last\_practice}} là mốc thời gian luyện tập gần nhất, tính theo giây epoch).
  • SS (stability_days): Độ bền vững của trí nhớ (Memory Stability), biểu thị số ngày cần thiết để xác suất làm chủ giảm đi một nửa (mặc định khởi tạo = 3.03.0 ngày).
  • P(Leffective)P(L_{\text{effective}}): Xác suất làm chủ sau khi suy giảm, được clamp trong khoảng [0.0001,0.9999][0.0001, 0.9999] để tránh hiện tượng hấp thụ trạng thái.

B. Cơ chế Lazy Decay (On-Read Decay)

Hệ thống không chạy các tiến trình ngầm (cron jobs) quét toàn bộ database để giảm điểm (gây tốn tài nguyên). Thay vào đó, việc suy giảm được thực hiện động theo cơ chế Lazy Decay:

  1. On Read: Khi API hoặc hệ thống đề xuất truy vấn năng lực của học viên (get_student_mastery), hệ thống tự động tính toán và áp dụng P(Leffective)P(L_{\text{effective}}) trên bộ nhớ đệm hoặc dữ liệu trả về thời gian thực.
  2. On Write: Trước khi thực hiện cập nhật Bayesian BKT khi nộp bài trong RPC submit_attempt_v3, hệ thống lấy xác suất đã decay làm Prior mới, tiến hành cập nhật Bayes và ghi đè trị số mới vào database kèm mốc thời gian cập nhật last_practiced_at.

C. Cập nhật Độ bền vững Trí nhớ (Stability Update)

Độ bền vững SS (stability_days) được cập nhật động sau mỗi lần nộp bài dựa trên kết quả điểm số thực tế actual_score [0.0,1.0]\in [0.0, 1.0]:

  • Luyện tập thành công (actual_score 0.8\ge 0.8): Trí nhớ được củng cố mạnh mẽ, độ bền tăng gấp đôi: Snew=Sold2.0S_{\text{new}} = S_{\text{old}} \cdot 2.0
  • Luyện tập thất bại (actual_score <0.5< 0.5): Học sinh quên kiến thức, độ bền bị giảm một nửa (giới hạn tối thiểu là 1.0 ngày): Snew=max(1.0,Sold0.5)S_{\text{new}} = \max(1.0, S_{\text{old}} \cdot 0.5)
  • Mức độ trung bình (0.5actual_score<0.80.5 \le \text{actual\_score} < 0.8): Giữ nguyên độ bền cũ: Snew=SoldS_{\text{new}} = S_{\text{old}}

7. Quy trình tối ưu hóa tham số ngoại tuyến (Offline ML Pipeline) [DỰ THẢO - CHƯA HOÀN THÀNH]

Mặc dù việc cập nhật xác suất thành thạo P(L)P(L) của học viên được thực hiện trực tuyến (online) trong thời gian thực, các tham số BKT hạt nhân {P(L0),P(T),P(G),P(S)}\{P(L_0), P(T), P(G), P(S)\} cho từng Concept không nên giữ cố định mãi mãi. Hệ thống đề xuất một ML Pipeline ngoại tuyến để tự động hiệu chuẩn và tối ưu hóa các tham số này dựa trên dữ liệu làm bài thực tế của hàng ngàn học viên.

A. Mô hình hóa Toán học & Hàm tối ưu

Mục tiêu là tìm bộ tham số Θ={P(L0),P(T),P(G),P(S)}\Theta = \{P(L_0), P(T), P(G), P(S)\} cho mỗi Concept nhằm tối đa hóa xác suất đồng thời (Likelihood) của các chuỗi quan sát thực tế từ lịch sử làm bài:

L(Θ)=uStudentsP(XuΘ)\mathcal{L}(\Theta) = \prod_{u \in \text{Students}} P(X^u \mid \Theta)

Trong đó Xu=(x1u,x2u,,xTu){0,1}TX^u = (x_1^u, x_2^u, \dots, x_T^u) \in \{0, 1\}^T là chuỗi trả lời Đúng/Sai của học viên uu đối với Concept đó.

B. Các thuật toán tối ưu đề xuất

  1. Expectation-Maximization (EM / Baum-Welch):
    • Bước E: Ước lượng xác suất học viên hiểu bài ở mỗi lượt ẩn dựa trên bộ tham số hiện tại.
    • Bước M: Cập nhật lại bộ tham số để tối đa hóa Likelihood của dữ liệu.
  2. Tối ưu hóa dựa trên Gradient (L-BFGS / Adam):
    • Chuyển bài toán thành cực tiểu hóa hàm mất mát Cross-Entropy giữa dự đoán của mô hình và kết quả thực tế: Loss(Θ)=ut[xtulogP(xtu=1Θ)+(1xtu)log(1P(xtu=1Θ))]\text{Loss}(\Theta) = -\sum_{u} \sum_{t} \left[ x_t^u \log P(x_t^u = 1 \mid \Theta) + (1 - x_t^u) \log (1 - P(x_t^u = 1 \mid \Theta)) \right]
    • Sử dụng các thư viện như Scipy (scipy.optimize.minimize) hoặc PyTorch để lan truyền ngược và tối ưu hóa trực tiếp.

C. Trạng thái phát triển hiện tại: [CHƯA TRIỂN KHAI]

[!WARNING] Cấu phần Offline ML Pipeline này chưa được lập trình trong codebase (Uncompleted). Hiện tại, hệ thống EduGap đang sử dụng bộ tham số thực nghiệm mặc định đồng nhất cho tất cả các Concept (P(L0)=0.25P(L_0)=0.25, P(T)=0.10P(T)=0.10, P(G)=0.20P(G)=0.20, P(S)=0.10P(S)=0.10). Cần triển khai script Python trong thư mục src/pipeline/train_bkt.py để kết nối Supabase, truy vấn lịch sử làm bài, chạy thuật toán EM và ghi đè tham số tối ưu trở lại bảng app.concepts.


8. Tham chiếu mã nguồn backend

Cài đặt chi tiết của mô hình nằm tại bkt.pyforgetting.py.

On this page