Bỏ qua để đến nội dung

Mô hình dữ liệu & SRS Công thức (Vocab v2 – Data Model)

DomainsDOL EnglishUX3.732 words19 min read
active

Hardening Note (SoT precedence): Các tham số/rule trong tài liệu này tuân theo VOCV2_Product_Spec_Hardening_v1.md (./VOCV2_Product_Spec_Hardening_v1.md). Nếu có mâu thuẫn, ưu tiên SoT hardening.

Triết lý hệ thống (../Assets/Images/Data%20model/triet%20ly.png)

  • Định nghĩa dữ liệu & công thức tính F (fluency), D (decay), successCount, failCount cho từng item trên từng học viên.
  • Áp dụng cho mọi môn (IELTS, SAT, Math, Physics, Chemistry; mở rộng sau).
  • ItemLearner (per user per item): itemLearnerId, itemId, subject, skill, fluencyBase, F, D, successCount, failCount, lastReviewedAt, max_stage (NEW).
  • Item Content (Static Extension):
    • distractors (JSON): Mảng các từ nhiễu được AI sinh sẵn cho MCQs.
    • flexible_answers (JSON): Mảng các từ đồng nghĩa / collocation chấp nhận được (e.g. ["gain", "reap"] cho “receive benefits”).
  • Thang đo: F ∈ [0,100]; D = đơn vị fluency/phút; success/fail là chỉ số liên tục (không phải count thô).
  • Visual State Logic (UI Rendering):
    • Size (Kích thước cây) = max_stage.
    • Health (Sức khỏe cây):
      • Healthy: FThresholdF \ge Threshold.
      • Needs Water: 0<F<Threshold0 < F < Threshold.
      • Withered: F=0F = 0.

Cơ chế vật lý (../Assets/Images/Data%20model/co%20che%20vat%20ly.png)

3.1 The Genetic Code (Cơ chế tính F_base tự động)

Phần tiêu đề “3.1 The Genetic Code (Cơ chế tính F_base tự động)”

Hệ thống loại bỏ việc gán F_base thủ công. Thay vào đó, mọi Item (từ đơn hoặc cụm từ) khi được nạp vào hệ thống sẽ được AI và Thuật toán phân tích để xác định “bộ gen” (Genetic Code) - đại diện cho độ khó bẩm sinh của nó.

Nếu cần xem logic FBase Calculator đang dùng hiện tại theo góc nhìn dev, xem thêm VOCV2_FBase_Calculator_Logic.md.

Công thức Tổng quát: Fbase=100(Ma saˊt cơ bản+Điểm trừ độ khoˊ)F_{base} = 100 - (\text{Ma sát cơ bản} + \sum \text{Điểm trừ độ khó})

  • Ma sát cơ bản (Base Friction): Mặc định 30 điểm. Đây là chi phí não bộ tối thiểu để tiếp nhận bất kỳ thông tin mới nào.
  • \sum Điểm trừ: Tổng hợp từ các yếu tố cấu trúc do engine tự tính và các score do AI chấm từ term + Loại từ + Level học thuật.
  • Giới hạn (Clamp): FbaseF_{base} luôn nằm trong khoảng [10,70][10, 70].

Hệ thống tự động phân tách thành 2 luồng tính toán dựa trên loại dữ liệu (Word vs Phrase) để đảm bảo tính công bằng.


3.1.1 Các yếu tố cấu trúc & input-assisted

Phần tiêu đề “3.1.1 Các yếu tố cấu trúc & input-assisted”

Kết hợp điểm cấu trúc do engine tự tính với điểm AI chấm dựa trên input nhập liệu.

Yếu tốLuồng: Từ đơn (Word)Luồng: Cụm từ (Phrase)
Độ dài (Length)Tính theo số ký tự:
4\le 4: 0đ
585-8: 5đ
9129-12: 10đ
>12>12: 15đ
Tính theo số từ (Word count):
232-3: 0đ
454-5: 5đ
676-7: 10đ
>7>7: 20đ
Phân loại (Type)POS Score do AI chấm từ Loại từ đã nhập.
AI không tự relabel nếu input hợp lệ.
Syntax Complexity do AI chấm.
Input Loại từ chủ yếu dùng để xác nhận item đi vào phrase mode.
Độ nâng cao (Level)Level Score do AI chấm từ Level học thuật đã nhập.
Không bắt buộc chỉ giới hạn ở CEFR, miễn normalize về thang 0..20.
Lexical Burden do AI chấm qua lexical_count.
Input Level học thuật giúp AI calibrate mức academic/obscure.

Sử dụng LLM để chấm điểm độ mờ nghĩa, sự trừu tượng và normalize difficulty từ các field nhập liệu.

Yếu tốLuồng: Từ đơn (Word)Luồng: Cụm từ (Phrase)
Độ trừu tượng (Abstract)Abstractness:
Từ cụ thể (Apple) vs Trừu tượng (Karma).
• Thang điểm: 0 - 20đ
Idiomaticity:
Nghĩa đen (Red car) vs Nghĩa bóng (Break a leg).
• Thang điểm: 0 - 20đ
Độ xa lạ (Cognate)Cognate Index:
Mức độ tương đồng với tiếng mẹ đẻ.
• Thang điểm: 0 - 15đ
Cognate Index:
Tương tự từ đơn, áp dụng cho từ khóa chính.
• Thang điểm: 0 - 15đ
Độ đa nghĩa (Polysemy)Polysemy:
Số lượng tầng nghĩa của từ.
• Thang điểm: 0 - 10đ
Context Clarity:
Cụm từ có làm rõ nghĩa cho từ gốc không?
• Thang điểm: 0 - 10đ

3.1.3 Case Study: Sự khác biệt giữa từ lẻ và cụm từ

Phần tiêu đề “3.1.3 Case Study: Sự khác biệt giữa từ lẻ và cụm từ”

Hệ thống có xu hướng ưu tiên các cụm từ có ngữ cảnh rõ ràng hơn là các từ đơn lẻ mang tính trừu tượng.

  • Trường hợp 1: Từ đơn mơ hồ
    • Từ: “Review”
    • Phân tích: Đa nghĩa cao (Polysemy +8), AI chấm pos_score ở mức verb (+5), Trừu tượng (+10).
    • \sum Điểm trừ: 30(Base)+23=5330 (Base) + 23 = 53.
    • Fbase=47F_{base} = 47.
  • Trường hợp 2: Cụm từ rõ nghĩa (Collocation)
    • Cụm: “Literature review”
    • Phân tích: Ngữ cảnh cực kỳ rõ ràng, Polysemy giảm về 0, Syntax đơn giản. Ghi nhận 1 từ Academic (+8).
    • \sum Điểm trừ: 30(Base)+8=3830 (Base) + 8 = 38.
    • Fbase=62F_{base} = 62. (Dễ hơn từ Review đứng một mình).

Triết lý: Thêm từ vào (contextualizing) đôi khi làm item dễ học hơn vì nó xóa bỏ sự mơ hồ của não bộ trong việc gán nghĩa.


  • F0F_0 (Fluency):
F_0 = F_{base} \text{ (Calculated via Genetic Code)}

(Nội dung càng dễ → FbaseF_{base} càng cao).

F-base khởi tạo dữ liệu (../Assets/Images/Data%20model/f%20base%20khoi%20tao%20du%20lieu.png)

  • D0D_0 (Decay):
D0 = clamp( (100 - F_{base}) / K , Dmin, Dmax )
  • KK (Master Knob): Mặc định 2400 theo cấu hình Selected Mode (40 giờ).

  • Dmin/DmaxD_{min}/D_{max}: Vùng an toàn để tránh item quá dễ (quên quá chậm) hoặc quá khó (quên rơi tự do).

  • Trạng thái ban đầu:

    • successCount = 0
    • failCount = 0
    • lastReviewedAt = NOW

4. Tính toán thời gian thực (Real-time Calculation)

Phần tiêu đề “4. Tính toán thời gian thực (Real-time Calculation)”
  • Cơ chế: Hệ thống tính toán F_now tại bất kỳ thời điểm nào (NOW) dựa trên công thức, không chờ user mở phiên học.
  • Công thức:
F_{now} = \max(0, F - D \times \Delta t)
  • Δt = NOW - lastReviewedAt (đơn vị phút).
  • Mục đích Real-time:
    • Nhắc nhở (Notification): Hệ thống “quét” ngầm; nếu F_now tụt xuống dưới ngưỡng (ví dụ: cận kề quên), gửi thông báo nhắc nhở ngay để user ôn tập kịp thời.
    • Cá nhân hóa: Priority Queue luôn được cập nhật động, đảm bảo user vào học lúc nào cũng đón đầu được các từ cần ôn nhất.
  • Lưu ý: D có thể được tính lại sau mỗi lượt (xem bên dưới); F_now chỉ dùng D hiện hành.

4.1 Chiến lược tối ưu (Optimization Strategy)

Phần tiêu đề “4.1 Chiến lược tối ưu (Optimization Strategy)”

Để giải quyết bài toán hiệu năng (tránh việc server phải tính F_now cho triệu users mỗi phút), hệ thống sử dụng tư duy “Tính ngược”.

Instead of: Have Delta_t -> Calculate F_now We do: Target F_threshold -> Calculate Delta_t needed

Bí mật tối ưu của người làm vườn - Tính toán ngược (../Assets/Images/co%20che%20du%20doan%20tuong%20lai.png)

1. Tính thời điểm cần ôn (Time-to-Drop) Ngay sau khi user học xong 1 item, hệ thống tính ngay thời gian t để item đó rớt xuống Threshold:

\begin{aligned}
Threshold &= F_{current} - D \times t \\
\Rightarrow t &= \frac{F_{current} - Threshold}{D} \\
NextReviewTime &= NOW + t
\end{aligned}

Cập nhật thời gian ngưỡng an toàn (../Assets/Images/Data%20model/cap%20nhat%20thoi%20gian%20nguong%20an%20toan.png)

2. Lưu trữ & Truy vấn

  • Lưu next_review_at (Timestamp) vào DB và đánh Index.
  • Job quét: Server chỉ cần query đơn giản: SELECT * FROM items WHERE next_review_at <= NOW AND notification_sent = FALSE
  • Kết quả: Truy vấn cực nhanh (O(N) với số lượng cần nhắc, thay vì quét toàn bộ DB), chi phí thấp, chính xác tuyệt đối.

5. Cập nhật sau mỗi lượt (Post-Review Updates)

Phần tiêu đề “5. Cập nhật sau mỗi lượt (Post-Review Updates)”

Hệ số biến thiên động (../Assets/Images/Data%20model/dynamic%20modifier.png)

Hệ thống điều chỉnh trạng thái của từ vựng ngay sau mỗi lượt làm bài dựa trên các hệ số biến thiên động.

Hệ số khuếch đại điểm thưởng dựa trên phong độ quá khứ.

boostRepeat = 1 + successCount \times 0.05
  • Cơ chế: Mỗi lượt làm đúng tích lũy (successCount) sẽ tăng thêm 5% sức mạnh cho lần cộng điểm tiếp theo.
  • Mục tiêu: Thưởng cho sự bền bỉ. Người dùng càng học đúng nhiều, điểm số càng được đẩy nhanh để sớm đạt ngưỡng thành thạo.

Hệ số báo động làm tăng tốc độ “héo” (Decay) khi gặp lỗi sai liên tiếp.

dragFail = 1 + failCount \times 0.1
  • Cơ chế: Mỗi lượt làm sai tích lũy (failCount) sẽ cộng dồn 10% vào lực kéo Decay.
  • Mục tiêu: Phản ứng gắt gao với lỗ hổng kiến thức. Nếu sai liên tiếp, hệ thống hiểu rằng nội dung này đang quá khó và cần được nhắc lại ngay lập tức.

Hệ số trừ điểm trực tiếp để mô phỏng việc “quên” ngay khi sai (mặc định 20%)

penaltyFail = 0.2
  • Logic: Fnew=Fnow×(1penaltyFail)F_{new} = F_{now} \times (1 - penaltyFail).
  • Mục tiêu: Tạo ra sự hụt hẫng về điểm số giúp User nhận thức tầm quan trọng của lỗi sai, đồng thời ép từ vựng rơi xuống ngưỡng cần ôn tập nhanh hơn.

Cơ chế làm chậm tốc độ tăng trưởng ở giai đoạn “tinh hoa”.

\text{Nếu } F_{now} > 90 \rightarrow \Delta F = \Delta F \times 0.5
  • Logic: Khi F>90F > 90, mọi điểm thưởng cộng thêm chỉ còn 50% hiệu lực.
  • Mục tiêu: Mô phỏng thực tế là việc học từ 0 lên 90 điểm luôn dễ hơn việc học để Master hoàn toàn 10 điểm cuối cùng.

5.5 W_ex (Trọng số bài tập - Exercise Weight)

Phần tiêu đề “5.5 W_ex (Trọng số bài tập - Exercise Weight)”

Trọng số bài tập (../Assets/Images/Data%20model/trong%20so%20bai%20tap.png)

Đây là hệ số điều tiết mức độ tác động của một lượt luyện tập lên hệ thống, dựa trên độ khó của dạng bài và sự phù hợp với kỹ năng.

W_{ex} = f_{difficulty} \times f_{match}
  • f_difficulty (Độ khó):
    • HARD (Gõ phím, Nói): 1.0 (Full impact).
    • MEDIUM (Điền từ có gợi ý): 0.7.
    • EASY (Trắc nghiệm, Chọn hình): 0.4.
  • f_match (Độ phù hợp):
    • Match (Trùng Skill của từ): 1.0.
    • Mismatch (Khác Skill của từ): 0.8.
  • Cập nhật Fluency:
\begin{aligned}
boostRepeat &= 1 + (successCount \times 0.05) \\
\Delta F &= 10 \times boostRepeat \times W_{ex} \\
\text{Nếu nearMax: } \Delta F &= \Delta F \times 0.5 \\
F_{new} &= \min(100, F_{now} + \Delta F)
\end{aligned}
  • Cập nhật Streak:
\begin{aligned}
successCount_{new} &= successCount + (1 \times W_{ex}) \\
failCount_{new} &= \max(0, failCount - 0.5)
\end{aligned}
  • Điều chỉnh Decay:
D_{new} = \max(D_{min}, D \times (1 - 0.1 \times W_{ex}))
  • Nếu successCount_{new} > 8, có thể áp thêm hệ số 0.8 (củng cố lâu dài).

Đúng liên tiếp (../Assets/Images/Data%20model/dung%20lien%20tuc.png)

  • Cập nhật Fluency:
F_{new} = F_{now} \times (1 - penaltyFail)
  • Cập nhật Streak:
successCount_{new} = \max(0, successCount - 1)
failCount_{new} = failCount + 1
  • Điều chỉnh Decay:
D_{new} = \min(D_{max}, D \times (1.0 + 0.25 \times dragFail))

Sai liên tiếp (../Assets/Images/Data%20model/sai%20lien%20tuc.png)

  • lastReviewedAt = now sau mỗi lượt.
  • Lưu cả F_before, F_after, D_before, D_after cho analytics.
  • Item speaking, fluencyBase=30fluencyBase = 30 (khó):
\begin{aligned}
F_0 &= 30 \\
D_0 &\approx (100 - 30) / 2400 = 0.0292 \text{ (fluency/phút)}
\end{aligned}
  • Sau 120 phút không học:
\begin{aligned}
F_{now} = 30 - 0.0292 \times 120 \approx 26.5
\end{aligned}
  • Ôn đúng lần 1:
\begin{aligned}
\Delta F &= 10 \times (1 + 0) = 10 \\
F_{new} &= F_{now} + \Delta F \approx 26.5 + 10 = 36.5 \\
D_{new} &\approx 0.0292 \times 0.9 = 0.0263
\end{aligned}
  • Ôn đúng liên tục 5 lần (giả định không decay giữa các lượt):
boostRepeat = 1 + 5 \times 0.05 = 1.25 \Rightarrow \Delta F = 12.5

(Gần max thì giảm nửa. F dần tiệm cận 100).

  • Ôn sai:
\begin{aligned}
F_{new} &= F_{now} \times 0.8 \\
D_{new} &\text{ tăng theo failCount}
\end{aligned}

6. Cấu hình hệ thống (System Configuration)

Phần tiêu đề “6. Cấu hình hệ thống (System Configuration)”
  • Speaking: 80
  • Writing: 75
  • Reading: 70
  • Listening: 70 (nếu áp dụng)
  • Sciences (Math/Physics/Chemistry): 75 (có thể tinh chỉnh theo dạng bài).
  • Mỗi item lấy ngưỡng theo skill (hoặc subject nếu skill không tách).

Hệ số K (../Assets/Images/Data%20model/he%20so%20K.png)

Hệ số K không đơn thuần là một biến số, nó là Nút vặn tổng (Master Volume Knob) của toàn bộ hệ thống.

  • Bản chất: K là mỏ neo quy đổi điểm số Fluency sang thời gian. Nếu coi F là “Quãng đường” và D là “Vận tốc”, thì K chính là hệ số quy định đơn vị thời gian (Giờ/Phút/Ngày).

  • Mental Model: K là “Niềm tin” (Assumption) của Admin về trí nhớ ngắn hạn. Thay vì phải chỉnh sửa hàng chục thông số lẻ, Admin chỉ cần vặn K để thay đổi nhịp độ của toàn bộ khu vườn:

    • Vặn K nhỏ (T giảm): Toàn vườn héo nhanh hơn, game cốt truyện diễn ra kịch tính, dồn dập.
    • Vặn K lớn (T tăng): Toàn vườn héo chậm hơn, phù hợp cho việc học dài hạn thong thả qua nhiều ngày.
  • Công thức gốc (Derivation): Theo vật lý cơ bản: Vnto^ˊc=Qua~ngđường/ThigianVận tốc = Quãng đường / Thời gian.

    • Quãng đường cần đi = 100 (từ F=100F=100 về 00).
    • Thời gian mong muốn = K (phút).
    • Vận tốc quên hệ thống = DD (Standard).

    Công thức cài đặt:

K = \text{[Desired-Lifespan-In-Minutes]}

Hệ quả: Hệ thống sẽ tự tính ra tốc độ héo D=100/KD = 100 / K.

Thực tế production: Vocab v2 dùng một K duy nhất cho toàn server, mặc định K=2400. Bảng mode bên dưới chỉ mang tính tham chiếu calibration, không phải cấu hình chạy song song.

6.2.2 Khuyến nghị khoa học (Scientific Calibration)

Phần tiêu đề “6.2.2 Khuyến nghị khoa học (Scientific Calibration)”

Cấu hình hệ số K (../Assets/Images/Data%20model/Cau%20hinh%20he%20so%20K.png)

Dựa trên Đường cong quên lãng Ebbinghaus (Forgetting Curve): Não bộ con người quên khoảng 70% thông tin mới chỉ sau 24 giờ đầu tiên nếu không ôn tập.

Do đó, giá trị K nên được thiết lập dựa trên mức độ “khoan dung” mà DOL Education mong muốn:

Chế độÝ nghĩa khoa họcGiá trị K (Phút)Mô tả thực tế
HardcoreTheo sát Ebbinghaus1,440 (1 Ngày)“Hôm nay học, ngày mai không ôn là quên sạch.” (Rất gắt)
SelectedCấu hình lựa chọn2,400 (40 Giờ)Điểm cân bằng (~1.5 ngày). Đủ gắt để nhớ, đủ thong thả để thở.
StandardKhuyến nghị cũ2,880 (2 Ngày)Cho phép lỡ 1 ngày trọn vẹn.
RelaxedCasual Learning4,320 (3 Ngày)Dành cho nội dung phụ trợ.

Công thức chốt (Default Config): Hệ thống sẽ đặt mặc định K = 2400 (tương đương 40 giờ) theo quyết định của Product Team.

6.2.3 Minh họa tính toán thực tế (Practical Examples)

Phần tiêu đề “6.2.3 Minh họa tính toán thực tế (Practical Examples)”

Giả sử cấu hình hệ thống: K=2400K = 2400 (40 giờ). Xét 2 từ vựng:

  1. Từ Dễ: “Cat” (Fbase=80F_{base} = 80 - Mức rất dễ).
  2. Từ Khó: “Procrastination” (Fbase=15F_{base} = 15).

A. Khởi tạo (Initialization) Hệ thống tính toán tốc độ quên D0D_0 ngay khi vừa học xong:

  • Từ “Cat”: D0=1008024000.0083D_0 = \frac{100 - 80}{2400} \approx \mathbf{0.0083} điểm/phút.
  • Từ “Procrastination”: D0=1001524000.0354D_0 = \frac{100 - 15}{2400} \approx \mathbf{0.0354} điểm/phút (Quên nhanh gấp 4 lần).

B. Tính thời gian đến lượt ôn kế tiếp (twaitt_{wait}) Công thức dự báo thời gian (Áp dụng Zero Floor - Không âm): twait=max(0,FnowThresholdD)t_{wait} = \max\left(0, \frac{F_{now} - Threshold}{D}\right)

  • Từ “Cat” (F=80F=80): twait=80600.00832400 phuˊt=40 giờt_{wait} = \frac{80 - 60}{0.0083} \approx 2400 \text{ phút} = \mathbf{40 \text{ giờ}} \rightarrow Hệ thống sẽ nhắc bạn ôn lại vào ngày kia.

  • Từ “Procrastination” (F=15F=15): twait=max(0,15600.0354)=0 phuˊtt_{wait} = \max\left(0, \frac{15 - 60}{0.0354}\right) = \mathbf{0 \text{ phút}} \rightarrow F<ThresholdF < Threshold ngay từ đầu. Hệ thống yêu cầu ôn tập ngay lập tức.

Lưu ý quan trọng (Zero Floor Logic): Hệ thống luôn chặn dưới ở 0 (cho cả FFtwaitt_{wait}). Điều này đảm bảo User không bao giờ bị “âm điểm” (nợ kiến thức), giúp việc học lại từ 0 công bằng như học mới, không bị phạt thêm thời gian.

C. Sau 24 giờ bỏ bê (1440 phút)

  • “Cat”: Mất 0.0083×1440120.0083 \times 1440 \approx 12 điểm. Còn lại 6868. Vẫn trên Threshold (68>6068 > 60). Cây vẫn khoẻ.
  • “Procrastination”: Mất 0.0354×1440510.0354 \times 1440 \approx 51 điểm. Về 00. Chết (Mầm héo).
  1. F_now < threshold & failCount cao.
  2. F_now < threshold & failCount thấp.
  3. Chưa học (F chưa có).
  4. F_now ≥ threshold: ưu tiên successCount thấp hơn trước; tie-break F thấp hơn.
  5. Tránh item vừa xuất hiện ở phiên trước.
  6. Nếu trùng ưu tiên: chọn F thấp nhất.

Mental Model (../Assets/Images/Data%20model/mental%20model.png)

  • Mental model là nhóm item cố định do DOL định nghĩa (taxonomy gốc). Mỗi model có danh sách itemIds[].
  • Progress của user cho một model được tính ngầm từ trạng thái ItemLearner của các item trong model, không phụ thuộc user học ở Home hay ở set nào.
  • Cách tính gợi ý:
    • progress = % itemIds đạt mức "Trưởng thành" (Mature) trở lên (tức F >= threshold AND successCount >= 3).
    • Có thể compute on-demand khi mở model hoặc batch theo phiên.
  • Item có thể thuộc nhiều model: nếu cần, chọn 1 model “primary” để hiển thị; vẫn cho phép tính ngầm vào nhiều model nếu product thấy hợp lý.

7.3 Phân tích tác động dây chuyền (Chain Reaction Analysis)

Phần tiêu đề “7.3 Phân tích tác động dây chuyền (Chain Reaction Analysis)”

Hệ thống Vocab v2 không vận hành bằng các biến số độc lập. Mỗi hành động của User sẽ kích hoạt một chuỗi phản ứng dây chuyền ảnh hưởng đến tương lai của từ vựng.

A. Chuỗi Phản Ứng Thành Công (The Virtue Cycle)s

Phần tiêu đề “A. Chuỗi Phản Ứng Thành Công (The Virtue Cycle)s”

Khi User làm đúng liên tục và thực hiện các bài tập khó (W_ex cao):

  1. SC tăng mạnh \rightarrow Hệ số boostRepeat được kích hoạt (cộng dồn 5%/lượt).
  2. Fluency bùng nổ \rightarrow Điểm cộng ΔF\Delta F được nhân với cả boostRepeatW_ex. Nếu làm bài Dictation (W=1.0), điếm số tăng cực nhanh.
  3. Decay giảm sâu \rightarrow Mỗi lượt thành công giúp giảm Decay đi 10% (có trọng số W_ex).
  4. Kết quả dây chuyền: Tử số (FThresholdF-Threshold) tăng vọt, mẫu số (DD) giảm sâu \rightarrow twaitt_{wait} dãn nở cực đại.
    • Ví dụ: Chỉ cần 3 lần làm đúng bài Dictation, thời gian ôn tập có thể nhảy cóc từ 2 ngày lên thẳng 2 tháng.

B. Chuỗi Phản Ứng Thất Bại (The Death Spiral)

Phần tiêu đề “B. Chuỗi Phản Ứng Thất Bại (The Death Spiral)”

Khi User làm sai hoặc cố tình chọn bài quá dễ:

  1. FC tăng \rightarrow Kích hoạt dragFail (tăng lực cản 10%/lượt).
  2. Fluency sụt giảm (Sốc nhiệt) \rightarrow Án phạt penaltyFail (-20% đến -28%) chém thẳng vào điểm số hiện tại.
  3. Decay tăng tốc \rightarrow Lực cản dragFail khiến tốc độ quên tăng lên gấp bội.
  4. Kết quả dây chuyền: twaitt_{wait} co lại về 0 tức thì. Từ vựng bị đánh dấu Dead và buộc phải đưa vào hàng chờ ôn tập ngay kèm theo yêu cầu giảm độ khó (Safety Gate hạ xuống Easy).
  • K (Quy mô): Định hình “chiều dài” của con đường. Nếu K lớn, mọi phản ứng đều diễn ra chậm rãi.
  • SC/FC (Vận tốc): Định hình “người lái xe”. Dù đường dài (K lớn) nhưng nếu sai liên tục (FC cao), xe vẫn sẽ “hết xăng” (Dead) rất nhanh.

Nút thắt quan trọng: Decay (DD) là biến số quan trọng nhất trong chuỗi chuyển động, vì nó là “cầu nối” đưa quá khứ (F) vào tương lai (t).

Summary Data Model (../Assets/Images/Data%20model/summary%20data%20model.png)

  • Điều chỉnh K, penaltyFail, boostRepeat để fit dữ liệu thực tế.
  • success/fail có thể là giá trị thực thay vì nguyên; cho phép giảm dần theo thời gian (forget streak).
  • D có thể gắn thêm hệ số theo contentDifficultyTag nếu có (ví dụ idiom, collocation dài).