Dự thảo tổng quan về hệ thống Vocab mới (Draft Overview of the New Vocab System)
Source: https://docs.google.com/document/d/12iMg6qSurogJuu_eVr-g_HXk67RwVl3q4F9BKzS3ou4/
WARNING
Đây là tài liệu Draft cũ từ Teacher. Các công thức và quy chuẩn trình bày có thể không khớp với bản chính thức trong thư mục Core Logic. Hãy tham khảo VOCV2_Data_Model.md để có thông tin chuẩn nhất.
I. Quy cách quản lý ID từ vựng:
Phần tiêu đề “I. Quy cách quản lý ID từ vựng:”Cấp cho mỗi từ vựng một ID độc nhất, ví dụ: 5r1b0001 hay 6s2x0002.
ID này độc nhất với:
1. Loại kỹ năng (ví dụ từ vựng Reading có ID là 5r, từ vựng Speaking có ID là 5s, từ vựng Writing có ID là 5w)
2. Từng từ vựng (ví dụ: từ vựng trong cùng kỹ năng reading, có ID 5r1b hoặc 5r1a hoặc 5r1d, etc).
3. Học viên (ví dụ: cùng 1 từ vựng, nhưng sẽ có ID 5r1b sẽ có ID 5r1b0001 với bạn A, nhưng có thể có ID 5r1b0002 với bạn B.
Việc quản lý unique ID cho từng từ vựng với từng HV sẽ giúp track được hoàn toàn độc lập từng từ vựng / với từng HV / và có thể output ra nhiều nền tảng khác nhau (ví dụ học ở mục vocab của SuperLMS, nhưng cũng có thể show ra ở trang tự học), sau này là ở app điện thoại.
II. Quy cách mô phỏng SRM (Spaced Repetition Method)
Phần tiêu đề “II. Quy cách mô phỏng SRM (Spaced Repetition Method)”- Đặt cho mỗi từ vựng trước khi được học một giá trị Fluency (đo độ nhớ / thuần thục từ vựng), F = 0 và một giá trị decay rate (đo tốc độ quên / đào thải từ vựng khỏi trí nhớ), d=0/min, và một giá trị success_count = 0 (đo mức độ làm đúng gần đây: cộng điểm khi học/ôn đúng, trừ điểm nhẹ khi học/ôn sai),
và một giá trị fail_count = 0 (đo mức độ làm sai gần đây: cộng điểm khi học/ôn sai, trừ điểm nhẹ khi học/ôn đúng).
- “success_count / fail_count không reset về 0 ngay khi trái ngược, mà tăng/giảm dần (±1/±2/hoặc theo công thức đặc biệt) để phản ánh xu hướng gần đây.”
1. Tại mỗi thời điểm học viên truy cập chức năng học từ vựng.
Phần tiêu đề “1. Tại mỗi thời điểm học viên truy cập chức năng học từ vựng.”Đối với tất cả mọi ID từ vựng gắn với học viên (Tức là: dù vào unit 3 của band 6.0, thì cũng update toàn bộ ID từ vựng của các Unit 1 và 2 đã học, và các ID từ vựng đã học ở band 5.0)
- F mới của từ vựng ở mỗi thời điểm truy cập được tính theo công thức: F_new = max(F_old - d * delta_t , 0 ) Sau đó: F của từ vựng sẽ được thay thế thành F_new đã tính được. Giá trị F này sẽ được làm tham chiếu để quyết định từ vựng nào cần được ôn tập.
a
· F_old = giá trị Fluency tại lần truy cập trước· F_new = giá trị Fluency tại lần truy cập hiện tại· d = tốc độ decay Fluency cho mỗi phút trôi qua kể từ lần truy cập trước.· delta_t = số phút trôi qua từ lần truy cập trước đến lần truy cập hiện tại· max(a, b) nghĩa là chọn giá trị lớn hơn giữa a và b (để F_new không bị âm)2. Tại mỗi thời điểm học viên vào giao diện học / ôn tập một từ vựng (bấm vào nút “Bắt đầu học” trên web):
Phần tiêu đề “2. Tại mỗi thời điểm học viên vào giao diện học / ôn tập một từ vựng (bấm vào nút “Bắt đầu học” trên web):”- Giới hạn thời gian mặc định của một phiên học là 10 phút. Giá trị này sẽ +1 phút sau mỗi ngày học liên tục, và – 1 phút sau mỗi ngày không vào học (giá trị min = 10 phút; giá trị max = 20 phút) giao diện học tự động kết thúc và chuyển thành 1 trang landing tóm lại tiến độ các từ mới đã học & các từ đã ôn tập lại + độ thành thạo. Tham khảo giao diện sau (từ memrise).
- Hiển thị lần lượt giao diện học / ôn từ vựng theo bảng ưu tiên các ID từ vựng sau. Và liên tục cho tới khi hết thời gian của phiên học, trước khi chuyển sang giao diện landing tóm tắt kết quả phiên học. Điều này có nghĩa là, học viên sau khi học / ôn xong 1 từ, bấm nút “tiếp tục” sẽ tiếp tục được yêu cầu học hoặc ôn 1 từ nữa, theo trật tự ưu tiên này, và lặp lại quá trình này cho tới khi hết thời gian của phiên học.
#1. Các ID từ vựng có fail_count từ 3 trở lên, và có F thấp hơn hoặc bằng 80% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F thấp hơn hoặc bằng 75% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F thấp hơn hoặc bằng 70% với các từ vựng có ID gắn với kỹ năng Reading
#2. Các ID từ vựng có fail_count từ 1 đến 2, và có F thấp hơn hoặc bằng 80% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F thấp hơn hoặc bằng 75% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F thấp hơn hoặc bằng 70% với các từ vựng có ID gắn với kỹ năng Reading
#3. Các ID từ vựng có có fail_count = 0, và có F thấp hơn hoặc bằng 80% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F thấp hơn hoặc bằng 75% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F thấp hơn hoặc bằng 70% với các từ vựng có ID gắn với kỹ năng Reading
#4. Các ID từ vựng chưa học.
#5. Các ID từ vựng có success_count từ 1 đến 2, và có F cao hơn hoặc bằng 80% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F cao hơn hoặc bằng 75% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F cao hơn hoặc bằng 70% với các từ vựng có ID gắn với kỹ năng Reading
#6. Các ID từ vựng có success_count từ 3 trở lên, và có F cao hơn hoặc bằng 80% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F cao hơn hoặc bằng 75% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F cao hơn hoặc bằng 70% với các từ vựng có ID gắn với kỹ năng Reading
#7. Các ID từ vựng có success_count từ 5 trở lên, và có F cao hơn hoặc bằng 90% đối với các từ vựng có ID gắn với kỹ năng Speaking; hoặc F cao hơn hoặc bằng 85% với các từ vựng có ID gắn với kỹ năng Writing; hoặc F cao hơn hoặc bằng 80% với các từ vựng có ID gắn với kỹ năng Reading
#8. ID từ vựng vừa xuất hiện ở lượt ôn tập / học trước.
Nếu 1 ID từ vựng trùng hợp nhiều hơn 1 mô tả trong bảng phân bậc ưu tiên này → xem như ID từ vựng đó có thứ bậc ưu tiên thấp nhất trong các mô tả phù hợp.
Nếu nhiều ID từ vựng khớp với cùng 1 mô tả trong 1 thứ bậc ưu tiên → ưu tiên ID từ vựng có F hiện tại từ thấp lên cao.
3. Trong mỗi phiên học, tại mỗi thời điểm học viên học 1 từ mới:
Phần tiêu đề “3. Trong mỗi phiên học, tại mỗi thời điểm học viên học 1 từ mới:”- Từ vựng mới (chưa học) sẽ chuyển thành trạng thái đã học. Đặt ngay lập tức cho từ vựng này 1 giá trị Fluency = bằng mức Fluency_base. Fluency_base là hệ số được gắn với từng từ vựng (dựa theo độ khó của từ, được cung cấp sẵn bởi người soạn từ vựng).
Ví dụ: từ vựng mother có fluency_base = 50 Sau 1 lần học duy nhất, sẽ được gắn với một giá trị fluency F=50.
Từ vựng overwhelming có fluency_base = 30 Sau 1 lần học duy nhất, sẽ được gắn với một giá trị fluency = 20.
Từ vựng make a good attempt at something có fluency_base = 25 Sau 1 lần học duy nhất, sẽ được gắn với một giá trị fluency = 25.
Giá trị fluency_base này sẽ quyết định số lần học / ôn tập cần thiết để đạt được mức fluency tốt.
Từ vựng mới này cũng sẽ được gắn ngay lập tức một hệ số base fluency decay có giá trị được tính qua công thức sau:
d0 = 0.07 - 0.02 * tanh((F_base - 32.5) / 20)Sau lần học đầu tiên, giá trị decay hiện tại của từ được khởi tạo là d = d0.
Về sau, mỗi lần ôn đúng / sai, d sẽ được cập nhật lại dựa trên success_count và fail_count theo công thức ở mục 4.
4. Trong mỗi phiên học, tại mỗi thời điểm học viên ôn tập 1 từ cũ:
Phần tiêu đề “4. Trong mỗi phiên học, tại mỗi thời điểm học viên ôn tập 1 từ cũ:”- Nếu ôn tập thành công:
→ Gán 1 giá trị mới cho f của từ vựng theo công thức sau:
# 1. Tính factor dựa trên success_count & F_base
base_factor = 0.12difficulty_boost = 0.03 * (F_base - 15) / 35 # ~ -0.03 .. +0.03
if success_count <= 3: # Giai đoạn SC thấp – gần như giữ nguyên behaviour cũ sc_factor = 0.04 * ln(1 + success_count)else: # Giai đoạn SC cao – tăng độ gắt # Phần "thấp" (1–3) giữ như cũ: sc_factor_low = 0.04 * ln(1 + 3) # ≈ 0.055 extra_sc = success_count - 3 # Phần "cao" tăng mạnh hơn (0.08 thay vì 0.04): sc_factor_high = 0.08 * ln(1 + extra_sc) sc_factor = sc_factor_low + sc_factor_high
factor = base_factor + sc_factor + difficulty_boost
# Cho phép factor lớn hơn ở SC caofactor = clamp(factor, 0.05, 0.60)
# 2. Update Fluency# Sau khi đã tính xong factor như ở Mục 1 (đã mạnh hơn với SC cao)
# Linear boost nhỏ để giảm độ "nén" ở vùng caolinear_boost = 0if success_count >= 8: linear_boost = 3 # mỗi lần đúng thêm ~3 điểm cố địnhelif success_count >= 4: linear_boost = 1.5
F_new = F_old + factor * (100 - F_old) + linear_boostF_new = min(F_new, 100)→ Tăng giá trị success_count của ID từ vựng lên + 1 đơn vị. Tức là success_count mới = success_count + 1.
→ fail_count của ID từ vựng giảm đi 1 lượng tương ứng với fail_count hiện tại. Trong đó: fail_count mới = fail_count - 2 (nếu fail_count hiện tại > 5), hoặc fail_count mới = fail_count - 1 (nếu fail_count hiện tại bé hơn hoặc = 5)
→ Gán 1 giá trị mới cho d của từ vựng theo công thức sau:
# Cập nhật decay rate d sau mỗi lần ôn (success hoặc fail)
# 1. Hệ số mới cho impact của fail_count / success_counta = ln(5.0) / 15.0 # ~0.107 (khoảng 15 lần sai → tiệm cận ×5)b = ln(100.0) / 20.0 # ~0.230 (khoảng 20 lần đúng → tiệm cận ×1/100)
# 2. Tính d_raw và kẹp biênd_raw = d0 * exp(a * fail_count - b * success_count)
# Cho phép d rơi xuống rất thấp (0.2% của d0) và tăng lên khá cao (×5)d_min = 0.002 * d0 # 0.2% of d0d_max = 5.0 * d0 # 500% of d0
d = clamp(d_raw, d_min, d_max)- Nếu ôn tập thất bại:
→ Gán 1 giá trị mới cho f của từ vựng theo công thức sau:
# SpeakingF_new = max(0, F_old * 0.80)
# WritingF_new = max(0, F_old * 0.75)
# ReadingF_new = max(0, F_old * 0.72)→ Tăng giá trị fail_count của ID từ vựng lên + 1 đơn vị. Tức là fail_count mới = fail_count + 1.
→ success_count của ID từ vựng giảm đi 1 lượng tương ứng với success_count hiện tại, fail_count hiện tại, và F đã giảm kể từ lần trước, theo công thức sau:
# Tính độ "knock" lên success_countdrop = 1 # giảm tối thiểu 1
if success_count >= 6: drop += 1 # đang ở level khá → tổng -2if success_count >= 10: drop += 1 # đã rất cao → tổng -3if fail_count >= 3: drop += 1 # bắt đầu chuỗi fail → tổng -4
# Optional: nếu F trước khi check đã tụt rất mạnh so với lần trướcif F_drop_since_last >= 25: # ví dụ rơi hơn 20 điểm drop += 1 # phạt thêm 1 bậc
success_count = max(success_count - drop, 0)→ Gán 1 giá trị mới cho d của từ vựng theo công thức sau:
# Cập nhật decay rate d sau mỗi lần ôn (success hoặc fail)
# 1. Hệ số mới cho impact của fail_count / success_counta = ln(5.0) / 15.0 # ~0.107 (khoảng 15 lần sai → tiệm cận ×5)b = ln(100.0) / 20.0 # ~0.230 (khoảng 20 lần đúng → tiệm cận ×1/100)
# 2. Tính d_raw và kẹp biênd_raw = d0 * exp(a * fail_count - b * success_count)
# Cho phép d rơi xuống rất thấp (0.2% của d0) và tăng lên khá cao (×5)d_min = 0.002 * d0 # 0.2% of d0d_max = 5.0 * d0 # 500% of d0
d = clamp(d_raw, d_min, d_max)Implications
Phần tiêu đề “Implications”1. Có reminder và không có reminder.
- Cân nhắc: không có reminder => như hiện tại. Có reminder, code để máy chủ cập nhật F mỗi 1 / 2 tiếng => thông báo đến điện thoại / email nhắc ôn. Ví dụ: “Dolbie ơi! Hôm nay mình đã ôn tập từ vựng chưa nè! DOL thấy em sắp quên cụm: “[trích từ vựng có F thấp nhất]” mất rồi! Hãy vào SuperLMS ôn tập vocabulary cùng DOL nhé!
2. Loại hoạt động ôn tập + factor riêng:
- Cân nhắc: mỗi kỹ năng có 1 kho bài ôn tập khác nhau. Ví dụ với Writing thì bắt type lại, với Reading thì bắt chọn Multiple Choice, với Speaking thì buộc phải nói đáp án. Mỗi loại hoạt động cũng có 1 hệ số factor khác nhau, ảnh hưởng lên tất cả các parameters như success_count (ví dụ thay vì dc +1, thì chỉ +0.5 nếu như từ vựng Speaking được ôn dưới hình thức multiple choice).
3. Flow học từ vựng mới:
- Giới hạn trong 1 mental model, học xong mới được chuyển sang 1 mental model khác.
- Khi chuyển sang 1 mental model khác, hiện giao diện “bấm vào đây để học mental model về [đề tài]”
4. Collocation dài: