# VietSpeak Bot chấm điểm như thế nào?
Viết ngày 30 tháng 10 năm 2021
Lưu ý: Thực tế do số lượng mẫu IPA rất lớn ($O(2^x)$ mẫu), cũng như hệ thống Kaldi không hoàn toàn chính xác, bài đọc thực tế được chấm bằng một thuật toán quy hoạch động phức tạp. Kết quả của thuật toán này vẫn đảm bảo kết quả giống y hệt như những bước dưới đây.
## Bước 1: Xử lí bài đọc mẫu
- Quản trị viên nhận bài đọc của task $x+1$ một ngày trước khi task $x$ kết thúc (bài gồm transcript và audio mẫu)
- Quản trị viên dùng hệ thống [Kaldi](https://www.danielpovey.com/files/2011_asru_kaldi.pdf) để chuyển audio mẫu thành một chuỗi kí tự IPA, tạm gọi là mẫu IPA 1
- Quản trị viên sử dụng từ điển để chuyển transcript thành chuỗi kí tự IPA. Do một từ có thể có nhiều cách phát âm, ta sẽ có nhiều chuỗi khác nhau, tạm gọi là mẫu IPA 2, mẫu IPA 3, ..., mẫu IPA $n$
## Bước 2: Xử lí bài nộp
- Bài nộp được hệ thống Kaldi tự động chuyển thành một chuỗi kí tự IPA, gọi tắt là $S$
## Bước 3: Chấm điểm
- Lần lượt tìm [dãy con chung dài nhất](https://vi.wikipedia.org/wiki/B%C3%A0i_to%C3%A1n_chu%E1%BB%97i_con_chung_d%C3%A0i_nh%E1%BA%A5t)giữa $S$ và mẫu IPA 1, mẫu IPA 2, ..., sau đó chấm điểm với từng mẫu theo công thức $\frac{\text{độ dài dãy con chung dài nhất}}{\text{độ dài mẫu}}$ rồi lấy kết quả tốt nhất
## Bước 4: Tìm lỗi sai
- Từ dãy con chung dài nhất, ta biết được với mỗi từ có những âm nào bị phát âm sai và những âm nào được người đọc sử dụng để phát âm từ đó.
- Nếu như từ có ít hơn 50\% âm được phát âm đúng, ta tính đó là từ đọc sai hoàn toàn và kí hiệu $\text{từ bị đọc sai} \rightarrow \emptyset$
- Nếu như từ có ít nhất 50\% âm được phát âm đúng, ta sử dụng những âm người đọc sử dụng và tra từ điển để luận xem người đọc đọc sai thành từ gì. Nếu không luận được, ta in ra như trên. Nếu luận được, ta kí hiệu $\text{từ bị đọc sai} \rightarrow \text{từ được đọc trong audio}$
- Cuối cùng, ta sử dụng dãy $S$ rồi luận từng từ trong dãy để cho ra phần "Đây là những gì bot Kaldi nghe được từ bạn"
- Từ phần dãy con chung dài nhất, ta cũng tính được tỷ lệ phát âm đúng của từng âm. Hệ thống tìm âm có tỷ lệ đúng thấp nhất và đề xuất một bài đọc liên quan đến âm đó
## Một vài hệ quả
- Nếu giữa chừng bạn phát hiện bạn đọc sai, bạn có thể đọc lại từ chỗ sai mà không bị trừ điểm (do dãy con chung dài nhất được sử dụng để chấm điểm)
- Khi chấm bài, nếu bot Kaldi nghe được it's/they're mà bài mẫu là its/their ... hay các trường hợp đồng âm khác thì bạn không bị trừ điểm (do chỉ IPA được sử dụng để chấm điểm, không phải từng từ)