CHƯƠNG I: MÔ HÌNH NGÔN NGỮ N-GRAM 1. Giới thiệu chung: Mô hình ngôn ngữ thống kê cho phép gán (ước lượng) xác suất cho một chuỗi m phần tử (thường là từ) P(w1w2…wm) tức là cho phép dự đoán khả năng một chuỗi từ xuất hiện trong ngôn ngữ đó. Theo công thức Bayes: P(AB) = P(B|A) * P(A). Với: + P(A): Xác suất xảy ra sự kiện A + P(B): Xác suất xảy ra sự kiện B + P(B|A): Xác suất (có điều kiện) xảy ra sự kiện B nếu biết rằng sự kiện A đã xảy ra.
Thì ta dễ dàng suy ra được. Theo công thức này thì bài toán tính xác suất của mỗi chuỗi từ quy về bài toán tính xác suất của một từ với điều kiện biết các từ trước nó (có thể hiểu P(w1)=P(w1|start) là xác suất để w1 đứng đầu chuỗi hay nói cách khác người ta có thể đưa thêm ký hiệu đầu dòng start vào mỗi chuỗi). Trong thực tế, dựa vào giả thuyết Markov người ta chỉ tính xác suất của một từ dựa vào nhiều nhất n từ xuất hiện liền trước nó, và thông thường n=0,1,2,3. Vì vậy nhiều người gọi mô hình ngôn ngữ là mô hình N-gram, trong đó n là số lượng từ (bao gồm cả từ cần tính và các từ ngữ cảnh phía trước).
- Với n = 2, ta có khái niệm bigram. - Với n = 3, ta có trigram. Nhưng vì n càng lớn thì số trường hợp càng lớn nên thường người ta chỉ sử dụng với n = 1,2 hoặc đôi lúc là 3. 4 Theo công thức Bayes, mô hình ngôn ngữ cần phải có một lượng bộ nhớ vô cùng lớn để có thể lưu hết xác suất của tất cả các chuỗi độ dài nhỏ hơn m.
Rõ ràng, điều này là không thể khi m là độ dài của các văn bản ngôn ngữ tự nhiên (m có thể tiến tới vô cùng). Để có thể tính được xác suất của văn bản với lượng bộ nhớ chấp nhận được, ta sử dụng xấp xỉ Markov bậc n: P(wm|w1,w2,…, wm-1) = P(wm|wm-n,wn-m+1, …,wm-1). Nếu áp dụng xấp xỉ Markov, xác suất xuất hiện của một từ (wm) được coi như chỉ phụ thuộc vào n từ đứng liền trước nó (wm-nwm-n+1…wm-1) chứ không phải phụ thuộc vào toàn bộ dãy từ đứng trước (w1w2…wm-1). Như vậy, công thức tính xác suất văn bản được tính lại theo công thức: P(w1w2…wm) = P(w1) * P(w2|w1) * P(w3|w1w2) *… * P(wm-1|wm-n-1wm-n …wm-2)* P(wm|wm-nwm-n+1 …wm-1).
Với công thức này, ta có thể xây dựng mô hình ngôn ngữ dựa trên việc thống kê các cụm có ít hơn n+1 từ. Các mô hình N-gram được hình dung thông qua ví dụ như sau.1: Giả sử cần tính xác suất của P(nên|Có chí thì nên). - Mô hình 1-Gram (Uni-gram): Tính xác suất của 1 từ mà không phụ thuộc vào từ trước nó, tức là không có ngữ cảnh. P=P(nên) - Mô hình 2-gram (Bi-gram): Tính xác suất của 1 từ dựa vào 1 từ liền ngay trước nó.
P=P(nên|thì) - Mô hình 3-gram (Tri-gram): Tính xác suất của 1 từ dựa vào 2 từ liền ngay trước nó. Công thức tính “xác suất thô”: Để sử dụng được, mô hình N-gram cần được cung cấp nhiều thông tin về xác suất. Các thông tin này được rút trích từ một kho ngữ liệu cho trước, gọi là kho ngữ liệu huấn luyện.wi-1wi) là tần số xuất hiện của cụm wi-n+1.wi-1wi trong tập văn bản huấn luyện. Gọi P(wi|wi-n+1.wi-1) là xác suất wi đi sau cụm wi-n+1.
Ta có công thức tính xác suất như sau: C(wi-n+1.wi-1wi) P(wi|wi-n+1.wi-1w) w Dễ thấy, C(wi-n+1.wi-1w) chính là tần số xuất hiện của cụm wi-n+1.wi-1 w trong văn bản huấn luyện. Do đó công thức trên viết lại thành: C(wi-n+1.wi-1wi) P(wi|wi-n+1.wi-1) Tỉ lệ ở vế phải còn gọi là tỉ lệ tần số. Cách tính xác suất dựa vào tỉ lệ tần số còn gọi là ước lượng xác suất cực đại. Cũng có thể gọi đây là công thức tính “xác suất thô” để phân biệt với các cách tính xác suất theo các thuật toán sẽ xét ở phần sau.
Vấn đề khó khăn khi xây dựng mô hình ngôn ngữ N-gram: 1. Phân bố không đều: Khi sử dụng mô hình N-gram theo công thức “xác suất thô”, sự phân bố không đều trong tập văn bản huấn luyện có thể dẫn đến các ước lượng không chính xác. Khi các N-gram phân bố thưa, nhiều cụm N-gram không xuất hiện hoặc chỉ có số lần xuất hiện nhỏ, việc ước lượng các câu có chứa các cụm N-gram này sẽ có kết quả không tốt. Với V là kích thước bộ từ vựng, ta sẽ 6 có Vn cụm N-gram có thể sinh từ bộ từ vựng.
Tuy nhiên, thực tế thì số cụm N-gram có nghĩa và thường gặp chỉ chiếm rất ít. Ví dụ: tiếng Việt có khoảng hơn 5000 âm tiết khác nhau, ta có tổng số cụm 3-gram có thể có là: 5.000 Tuy nhiên, số cụm 3- gram thống kê được chỉ xấp xỉ 1. Như vậy sẽ có rất nhiều cụm 3- gram không xuất hiện hoặc chỉ xuất hiện rất ít. Khi tính toán xác suất của một câu, có rất nhiều trường hợp sẽ gặp cụm N-gram chưa xuất hiện trong dữ liệu huấn luyện bao giờ.
Điều này làm xác suất của cả câu bằng 0, trong khi câu đó có thể là một câu hoàn toàn đúng về mặt ngữ pháp và ngữ nghĩa. Đề khắc phục tình trạng này, người ta phải sử dụng một số phương pháp “làm mịn” kết quả thống kê mà chúng ta sẽ đề cập ở phần 1. Kích thước bộ nhớ của mô hình ngôn ngữ: Khi kích thước tập văn bản huấn luyện lớn, số lượng các cụm N-gram và kích thước của mô hình ngôn ngữ cũng rất lớn. Nó không những gây khó khăn trong việc lưu trữ mà còn làm tốc độ xử lý của mô hình ngôn ngữ giảm xuống do bộ nhớ của máy tính là hạn chế.
Để xây dựng mô hình ngôn ngữ hiệu quả, chúng ta phải giảm kích thước của mô hình ngôn ngữ mà vẫn đảm bảo độ chính xác. Vấn đề này sẽ được giải quyết ở phần 1. Các phương pháp làm mịn: Để khắc phục tình trạng các cụm N-gram phân bố không đều người ta đã đưa ra các phương pháp “làm mịn” các kết quả thống kê nhằm đánh giá chính xác hơn (mịn hơn) xác suất của các cụm N-gram. Các phương pháp “làm mịn” đánh giá lại xác suất của các cụm N-gram bằng cách: ● Gán cho các cụm N-gram có xác suất 0 (không xuất hiện trong tập huấn luyện) một giá trị khác 0.
7 ● Thay đổi lại giá trị xác suất của các cụm N-gram có xác suất khác 0 khác (có xuất hiện khi thống kê) thành một giá trị phù hợp (tổng xác suất của tất cả các khả năng N-gram khác nhau phải đảm bảo là không đổi, với giá trị là 100%). Các phương pháp làm mịn có thể được chia ra thành một số loại như sau: ● Chiết khấu (Discounting): Giảm (lượng nhỏ) xác suất của các cụm N- gram có xác suất lớn hơn 0 để bù cho các cụm N-gram không xuất hiện trong tập huấn luyện. ● Truy hồi (Back-off): Tính toán xác suất các cụm N-gram không xuất hiện trong tập huấn luyện dựa vào các cụm N-gram thành phần có độ dài ngắn hơn và có xác suất lớn hơn 0. ● Nội suy (Interpolation): Tính toán xác suất của tất cả các cụm N-gram dựa vào xác suất của các cụm N-gram ngắn hơn.
Các thuật toán chiết khấu (discounting): Nguyên lý của các thuật toán chiết khấu là giảm xác suất của các cụm N- gram có xác suất lớn hơn 0 đề bù cho các cụm N-gram chưa từng xuất hiện trong tập huấn luyện. Các thuật toán này sẽ trực tiếp làm thay đổi tần số xuất hiện của tất cả các cụm N-gram. Ở đây đề cập đến 3 thuật toán chiết khấu phổ biến: ● Thuật toán Add-One ● Thuật toán Witten-Bell ● Thuật toán Good-Turing 1. Phương pháp làm mịn Add-One: Phương pháp này sẽ cộng thêm vào số lần xuất hiện của mỗi cụm N-gram lên 1, khi đó xác suất của cụm N-gram sẽ được tính lại là: c 1 p (1.1) nv 8 Trong đó, 𝑐 là của số lần xuất hiện cụm N-gram trong tập ngữ liệu mẫu, 𝑛 là số cụm N-gram, 𝑣 là kích thước của toàn bộ từ vựng.
(Ở đây, c n vì thế sau khi thêm 1 vào tần suất xuất hiện mỗi cụm N-gram, tổng này trở thành (c 1) n v , do đó ta cập nhật lại công thức tính xác suất của cụm N-gram như trên) Với Unigram, ta có thể viết lại (1.4) như sau: c (1) 1 p (1) (1) n v n(1) Ta có , f (1) (c 1) (1) (1) là tần suất của unigram, c(1) là số lần xuất n v hiện của Unigram trước khi làm mịn bằng phương pháp Add-one. Với cụm N-gram w=w1w2.wi 1 ) V Để ý rằng, có rất nhiều cụm N-gram không nhìn thấy (bậc thấp) so với những N-gram nhìn thấy (bậc cao). Trong khi đó, có những cụm N-gram có nghĩa (cần thiết) bị giảm đi còn những cụm N-gram tối nghĩa lại có xác suất tăng lên. Để hạn chế điều này, người ta đưa thêm hệ số 𝛼 thay vì cộng 1 nhằm cân đối lại xác suất (Phương pháp làm mịn Add-𝛼).
Đặc biệt, khi = , được gọi là phương pháp Jeffreys – 2 Perks.2) có thể viết lại thành: 1 C ( w1w2 .wi 1 ) M 1 Dễ thấy với một Unigram, tỷ số chính là xác suất xảy ra của mỗi V unigram Hay C ( wi 1wi ) MP( wi ) P( wi | wi 1 ) C ( wi 1 ) M 1. Phương pháp làm mịn Witten - Bell: Thuật toán Witten-Bell hoạt động dựa trên nguyên tắc: Khi gặp những cụm N-gram có tần số 0, ta coi đây là lần đầu tiên cụm từ này xuất hiện. Như vậy, xác suất của cụm N-gram có tần số bằng 0 có thể tính dựa vào xác suất gặp một cụm N-gram lần đầu tiên. Với Uni-gram, gọi T là số cụm Uni-gram khác nhau đã xuất hiện, còn M là tổng số các cụm Uni-gram đã thống kê, khi đó tổng số sự kiện sẽ là (T+M), và xác suất để gặp cụm Uni-gram lần đầu tiên (hay tổng xác suất của các cụm T Uni-gram chưa xuất hiện lần nào) được tính bằng: T+M Gọi V là kích thước bộ từ vựng, còn Z là số cụm Uni-gram chưa xuất hiện lần nào: Z = V - T Xác suất xuất hiện của một cụm Uni-gram chưa xuất hiện lần nào (có tần số bằng 0) được tính bằng: T P* = Z(T+M) Và xác suất xuất hiện của các cụm Uni-gram có tần số khác 0 được tính lại theo công thức: c(w) P(w) = với c(w) là số lần xuất hiện của cụm w T+M 10 Cũng giống thuật toán Add-One, khi xét các cụm N-gram với N>1, thay M bằng C(wi-n+1.wi-1) thì xác suất của cụm wi-n+1.wi-1wi với C(wi-n+1.wi-1wi) = 0 được tính theo công thức sau: T(wi-n+1.wi-1) P(wi|wi-n+1.wi-1)) Với C(wi-n+1.