1. Công thức điểm

Mỗi kỹ năng quy về thang 0–10, làm tròn 0.5. Có thể đọc công thức theo cách đơn giản: điểm Listening/Reading dựa trên tỷ lệ câu đúng; Writing lấy Task 2 nặng gấp đôi Task 1; Speaking lấy trung bình 3 phần nói; điểm tổng là trung bình 4 kỹ năng.

Chính thức
Thang điểm 0–10, làm tròn 0.5, quy đổi B1/B2/C1 theo Quyết định 729/QĐ-BGDĐTThông tư 23/2017/TT-BGDĐT.
Hệ thống
Trọng số Task 2 = 2; quy đổi từng phần về thang 0–10.
Giới hạn
Điểm tự động là tham khảo; xác nhận cần người chấm hoặc dữ liệu giám khảo.
ListeningĐiểm = round0.5((số câu đúng Listening / tổng câu Listening) × 10)Đổi tỷ lệ đúng sang thang 10, rồi làm tròn 0.5.
ReadingĐiểm = round0.5((số câu đúng Reading / tổng câu Reading) × 10)Cách tính giống Listening: đúng bao nhiêu phần trăm thì nhân 10.
WritingĐiểm = round0.5((Task 1 + 2 × Task 2) / 3)Task 2 tính hai lần, nên tổng trọng số là 3.
SpeakingĐiểm = round0.5((Part 1 + Part 2 + Part 3) / 3)Ba phần nói được lấy trung bình ngang nhau.
OverallĐiểm tổng = round0.5((Listening + Reading + Writing + Speaking) / 4)Bốn kỹ năng đóng góp ngang nhau vào điểm tổng.

Trong đó: phần trong ngoặc là điểm thô, × 10 dùng để đổi tỷ lệ đúng sang thang 10, dấu / là chia trung bình. round0.5 = làm tròn đến mốc 0.5 gần nhất, ví dụ 6.24 → 6.0, 6.25 → 6.5.

Task 1/2 là điểm từng bài Writing. Part 1/2/3 là điểm từng phần Speaking. Nếu chưa cần kiểm tra chi tiết, chỉ cần nhớ: Listening/Reading theo số câu đúng; Writing ưu tiên Task 2; Speaking lấy trung bình 3 phần.

Ví dụ: Listening đúng 28/35 câu → 28/35 × 10 = 8.0. Writing Task 1 = 6.0, Task 2 = 7.0 → (6.0 + 2 × 7.0) / 3 = 6.67 → 6.5.

B1: 4.0–5.5 · B2: 6.0–8.0 · C1: 8.5–10.0

2. Luồng chấm Writing/Speaking

Luồng chấm Writing/Speaking

Fixed formula trong hệ thống

Fixed formula nghĩa là AI/STT/LanguageTool chỉ trích xuất tín hiệu; điểm cuối do backend tính bằng công thức cố định và tham số rubric đang active. Vì vậy AI không tự quyết định điểm, mà chỉ cung cấp dữ liệu đầu vào cho công thức.

CoreĐiểm = round0.5(weighted_mean(điểm tiêu chí × trọng số))Công thức rubric hiện lưu là equal_weighted_mean_rounded_half.
Writing taskTask band = round0.5((Task Fulfillment + Organization + Grammar + Vocabulary) / 4)4 tiêu chí Writing đang có trọng số bằng nhau.
Speaking partPart band = round0.5((Grammar + Vocabulary + Fluency + Discourse + Pronunciation) / 5)5 tiêu chí Speaking đang có trọng số bằng nhau.
Writing examWriting = round0.5((Task 1 + 2 × Task 2) / 3)Task 2 chiếm 2/3 điểm kỹ năng Writing.
Speaking examSpeaking = round0.5((Part 1 + Part 2 + Part 3) / 3)3 phần Speaking lấy trung bình.

Công thức tiêu chí: Writing Grammar lấy trung bình độ đa dạng cấu trúc và độ chính xác sau phạt lỗi; Task Fulfillment dựa trên mức đáp ứng yêu cầu, độ phát triển ý, ví dụ/lập trường và phạt lạc đề; Organization dựa trên đoạn, từ nối, đa dạng câu và định dạng thư; Vocabulary là trung bình có trọng số các tín hiệu lexical. Speaking Pronunciation = 0.45 × accuracy + 0.20 × fluency + 0.20 × prosody + 0.15 × completeness − phạt lỗi phát âm/ngắt nghỉ; Fluency = base + thưởng WPM − phạt pause; Discourse dùng descriptor score nhân content factor.

Caps/penalties: Writing có giới hạn khi quá ngắn, copy đề, thiếu yêu cầu tối thiểu, Task Fulfillment vượt xa các tiêu chí còn lại hoặc phản hồi quá ngắn. Speaking có giới hạn khi audio không đủ tin cậy, số từ quá ít, ASR confidence thấp hoặc nội dung không bám đề.

3. Tiêu chí chấm

Mô hình tín hiệu và tham số

Writing — 4 tiêu chí

  • Task Fulfillment: đáp ứng yêu cầu đề, phát triển ý, lạc đề
  • Organization: bố cục đoạn, từ nối, đa dạng câu, định dạng
  • Grammar: đa dạng cấu trúc, mật độ lỗi ngữ pháp
  • Vocabulary: độ rộng từ vựng, mức nâng cao, chính tả

Speaking — 5 tiêu chí

  • Grammar: đa dạng cấu trúc, độ chính xác
  • Vocabulary: phù hợp chủ đề, đa dạng
  • Fluency: tốc độ nói, mức ngập ngừng
  • Discourse Management: phát triển ý, liên kết, bám đề
  • Pronunciation: chính xác, trôi chảy, ngữ điệu, hoàn chỉnh

Trong đó: tín hiệu đo được là dữ liệu thô từ bài làm, ví dụ số lỗi, số từ, tốc độ nói, độ bám đề. Tham số cấu hình là trọng số, ngưỡng, giới hạn điểm và mức phạt. AI/ASR chỉ là một trong các nguồn tạo tín hiệu; điểm được kiểm soát bởi công thức và điều kiện giới hạn của hệ thống.

Luồng tính điểm: điểm tiêu chí → trung bình có trọng số để ra điểm task/part → trung bình các part → làm tròn 0.5 để ra điểm kỹ năng.

Nguồn tín hiệu: công cụ kiểm tra ngữ pháp — chính tả, dịch vụ nhận dạng giọng nói — đánh giá phát âm, phân tích văn bản (số từ, câu, đoạn, từ nối, CEFR), đánh giá mức độ bám đề và phát triển ý.

4. Giới hạn điểm

  • Bài quá ngắn hoặc copy đề: giới hạn điểm
  • Không đáp ứng yêu cầu: giảm Task Fulfillment
  • Nói quá ít: không đủ mẫu ngôn ngữ
  • Audio kém: tín hiệu âm thanh không đủ tin cậy
  • Lạc đề: phát âm tốt không che lấp nội dung sai

5. Tool/API cho chấm điểm

Luồng chấm điểm kết hợp công thức nội bộ với các tool đo tín hiệu ngôn ngữ. AI hỗ trợ nhận xét và phân tích, nhưng điểm cuối vẫn đi qua rubric, trọng số và giới hạn điểm của hệ thống.

Ngữ pháp
LanguageTool kiểm tra lỗi ngữ pháp, chính tả, punctuation/style cho Writing và transcript Speaking. Link: GitHub · HTTP server docs.
STT
Azure Speech-to-Text chuyển audio Speaking thành transcript và trả thêm confidence, thời lượng, số từ, tốc độ nói. Link: Azure Speech-to-Text.
Phát âm
Azure Pronunciation Assessment cung cấp tín hiệu accuracy, fluency, prosody, completeness, lỗi phát âm và ngắt nghỉ cho tiêu chí Pronunciation/Fluency. Link: Azure Pronunciation Assessment.
AI nhận xét
Laravel AI và AI Gateway nội bộ chuẩn hóa lời gọi LLM để sinh nhận xét Writing/Speaking, đánh giá bám đề, phát triển ý và phản hồi phát âm. Link: Laravel AI GitHub.

6. SRS từ vựng — FSRS v6

FSRS cá nhân hóa lịch ôn từ vựng qua 3 chỉ số: difficulty (độ khó), stability (độ bền trí nhớ), retrievability (xác suất nhớ lại). Người học đánh giá Again/Hard/Good/Easy sau mỗi lần ôn → hệ thống cập nhật chỉ số và tính ngày ôn tiếp.

FSRS
Hệ thống triển khai scheduler FSRS v6 nội bộ ở backend, theo mô hình Free Spaced Repetition Scheduler và learning steps kiểu Anki. Link: FSRS4Anki GitHub · FSRS v6 release.
Anki
Anki là phần mềm flashcard spaced repetition dùng làm tham chiếu cho luồng Again/Hard/Good/Easy và learning/relearning steps. Link: Anki GitHub · Anki website.
IntervalI = S / F × (0.91/(−w20) − 1), trong đó F = 0.9−1/w20 − 1Stability càng cao thì khoảng cách ôn tiếp theo càng dài; w20 là tham số hiệu chỉnh của FSRS.

Trong đó: I = interval, số ngày đến lần ôn tiếp theo; S = stability, độ bền trí nhớ hiện tại; w20 = tham số FSRS dùng để hiệu chỉnh đường quên. Người học không cần tự tính công thức này; hệ thống dùng nó để chọn ngày ôn.

Vòng đời thẻ

State diagram vòng đời thẻ SRS

Dashboard: hiển thị xu hướng năng lực từng kỹ năng, một điểm thấp không kéo tụt ngay.

7. Luyện tập Listening

Listening dùng Text-to-Speech từ transcript/đề bài, không phụ thuộc file audio thu sẵn. Transcript đồng bộ theo từ đang đọc trong lúc phát.

  • Chọn part (1–3), nhận danh sách bài luyện tập
  • Nghe audio tạo bằng Web Speech TTS từ transcript, trả lời câu hỏi MCQ
  • Transcript hiển thị đồng bộ theo tiến trình đọc TTS
  • Nộp bài → xem đáp án, điểm và lịch sử

8. Luyện tập Reading

  • Chọn part (1–4), nhận bài đọc và câu hỏi
  • Đọc passage, chọn đáp án MCQ
  • Tra từ nhanh bằng cách bôi đen văn bản
  • Nộp bài → xem kết quả và điểm từng câu

9. Luyện tập Writing

  • Nhận đề: Task 1 (thư/email) hoặc Task 2 (bài luận)
  • Viết bài, nhận gợi ý trực tiếp (số từ, chính tả)
  • Nộp bài → chấm tự động, trả điểm 4 tiêu chí và nhận xét
  • Xem lịch sử bài viết và feedback từng tiêu chí

10. Luyện tập Speaking

Tận dụng API giọng nói có sẵn trong trình duyệt để tạo transcript và đọc câu mẫu. Đánh giá phát âm dùng dịch vụ chuyên biệt ở bước cần độ chính xác cao.

  • Hội thoại: luyện nói theo kịch bản, hệ thống phản hồi từng lượt
  • Shadowing: đọc theo câu mẫu, so sánh phát âm với bản gốc
  • Ghi âm câu trả lời qua microphone, hiển thị trạng thái ghi âm/xử lý
  • Nhận điểm 5 tiêu chí và phản hồi phát âm chi tiết

11. Thư viện/API cho luyện tập

Đã đối chiếu với frontend và backend: phần luyện tập có đủ các thư viện/API chính cho IPA, dịch, Web Speech, avatar hồ sơ, kiểm tra ngữ pháp và xử lý audio.

IPA
phonemize tạo IPA phía client khi dữ liệu admin/AI chưa có sẵn; package đang dùng: phonemize. Link: GitHub · npm.
Dịch
Bôi đen văn bản dùng Chrome Translator API khi trình duyệt hỗ trợ; tra từ đơn dùng Free Dictionary API và dịch nghĩa sang tiếng Việt. Link: Translator API · Dictionary API · Dictionary GitHub.
Web Speech
Đọc câu mẫu, chọn giọng, phát passage/listening fallback và nhận dạng giọng nói ban đầu dùng Web Speech API (speechSynthesis, SpeechRecognition/webkitSpeechRecognition). Link: MDN · Spec.
STT
Khi cần độ tin cậy cao hoặc Web Speech lỗi, backend dùng Azure Speech-to-Text / Pronunciation Assessment; fallback request-response dùng OpenAI Audio Transcriptions. Link: Azure Pronunciation Assessment · OpenAI Speech to Text.
Ngữ pháp
Writing/Speaking feedback lấy lỗi chính tả, ngữ pháp, style từ LanguageTool self-hosted. Link: GitHub · HTTP server docs.
Avatar
Ảnh hồ sơ preset và avatar nhân vật hội thoại dùng DiceBear Avataaars qua HTTP API; người dùng vẫn có thể upload ảnh riêng qua form upload. Link: DiceBear GitHub · Avataaars docs.
Audio
Ghi âm dùng Web APIs MediaRecorder, getUserMedia và xử lý WAV trong client; lưu file luyện nói qua presigned URL S3/R2 bằng league/flysystem-aws-s3-v3 ở backend. Link: MediaRecorder · Flysystem S3 GitHub.

Ghi chú: các link trên là nguồn chính thức hoặc repository của package/API đang dùng.

12. AI Gateway

Tất cả lời gọi AI/LLM đi qua một gateway tập trung. Gateway đảm nhận retry khi lỗi thoáng qua, circuit breaker khi dịch vụ AI liên tục thất bại, và wire abstraction để dễ đổi provider.

Sơ đồ kiến trúc AI Gateway

13. Công nghệ sử dụng

  • React — giao diện
  • TanStack Query, Router, Form — dữ liệu, điều hướng
  • Tailwind CSS — thiết kế
  • Vite — build
  • Astro — tài liệu
  • Laravel — API backend
  • PHP 8.4 — xử lý nghiệp vụ
  • Biome — kiểm tra mã
  • ky — gọi API
  • Recharts — biểu đồ
  • Zustand — trạng thái

14. Giới hạn

  • Điểm tự động Writing/Speaking là tham khảo; kết quả xác nhận cần người chấm
  • Cần thêm dữ liệu thực tế để hiệu chỉnh độ chính xác
  • Speaking phụ thuộc chất lượng âm thanh đầu vào

Nguồn tham khảo: TanStack Query · ky · Recharts · TanStack Router · phonemize · Web Speech API · Translator API · DiceBear · LanguageTool

15. Chú giải từ viết tắt

AIArtificial Intelligence (trí tuệ nhân tạo)
APIApplication Programming Interface
ASRAutomatic Speech Recognition (nhận dạng giọng nói)
CEFRCommon European Framework of Reference (khung tham chiếu ngôn ngữ châu Âu)
FSRSFree Spaced Repetition Scheduler
LLMLarge Language Model (mô hình ngôn ngữ lớn)
MCQMultiple Choice Question (câu hỏi trắc nghiệm)
MOETMinistry of Education and Training (Bộ GD&ĐT)
SRSSpaced Repetition System (hệ thống ôn tập ngắt quãng)
TTSText-to-Speech (chuyển văn bản thành giọng nói)
UMLUnified Modeling Language
VSTEPVietnamese Standardized Test of English Proficiency
WPMWords Per Minute (từ/phút)