NLP - Mô hình ngôn ngữ

    Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) là một nhánh của trí tuệ nhân tạo, tập trung vào các ứng dụng trên ngôn ngữ của con người. Trong trí tuệ nhân tạo thì xử lý ngôn ngữ tự nhiên là một trong những phần khó nhất vì nó liên quan đến việc phải hiểu ý nghĩa ngôn ngữ - công cụ hoàn hảo nhất của tư duy và giao tiếp (Theo wikipedia).
    Trong series các bài viết về NLP này, tôi sẽ giới thiệu cho bạn đọc những kiến thức cơ bản nhất trong lĩnh vực xử lý ngôn ngữ tự nhiên bao gồm mô hình ngôn ngữ, Recurrent Neural Networks (RNN), Long Short-Term Memory (LSTM), Named Entity Recognition (NER). Trong đó trọng tâm chính của series là RNN, LSTM và NER.
    Trong bài mở đầu này, chúng ta sẽ bước đầu làm quen với khái niệm mô hình ngôn ngữ và mô hình N-gram.

1. Mô hình ngôn ngữ

    Mô hình ngôn ngữ là một phân bố xác suất của một đoạn văn bản trên một tập dữ liệu văn bản lớn. Ví dụ, một mô hình ngôn ngữ dựa trên tập dữ liệu về giáo dục thì xác suất của câu "hôm nay chúng em đi học" sẽ cao hơn câu "hôm nay học chúng em đi".
    Mô hình ngôn ngữ được định nghĩa như sau: V là một tập tất cả các từ trong ngôn ngữ. Ví dụ ta xây dựng mô hình ngôn ngữ cho tiếng Anh thì ta có:

V = {the, dog, laughs, saw, barks, cat,...}

Tập V là tập dữ liệu lớn, cỡ hàng nghìn từ và là tập hữu hạn. Một câu trong ngôn ngữ là một tập các từ đứng gần nhau $w_1 w_2 ... w_n$ (với $n \geq 1$), một ký hiệu <s> ở đầu câu và </s> ở cuối câu (hai ký hiệu <s> và </s> không thuộc tập V). Ví dụ:

<s> the dog barks </s
<s> the cat laughs </s>
<s> the cat saw the dog </s>

Tập $V^+$ là tập các câu sinh ra từ các từ trong tập V. Đây là tập không hữu hạn.

Mô hình ngôn ngữ: Là mô hình gồm một tập hữu hạn V và một hàm P( $w_1w_2...w_n$) như sau:  

          1. Với cụm  $(w_1w_2...w_n) \in V^+, P(w_1w_2...w_n) \geq 0$ 
          2. $\sum_{(w_1w_2...w_n) \in V^+} P(w_1w_2...w_n) = 1$

Khi đó, P( $w_1w_2...w_n$) là một phân bố xác suất của câu trên tập $V^+$.
Gọi C( $w_1w_2...w_n$) là số lần xuất hiện của câu $w_1w_2...w_n$ trong tập huấn luyện, N là tổng các câu. Mô hình ngôn ngữ đơn giản dựa trên tập dữ liệu huấn luyện định nghĩa như sau:
\[ P(w_1w_2...w_n) = \frac{C(w_1w_2...w_n)}{N} \]
    Tuy nhiên, đây không phải là một mô hình tốt vì sẽ cho xác suất $0$ với các câu không xuất hiện trong tập dữ liệu huấn luyện, do đó không thể tổng quát hóa cho trường hợp câu không có trong tập $V^+$.

2. Mô hình N-gram

    Câu hỏi đặt ra là xác suất P( $w_1w_2...w_n$) là bao nhiêu ? Ta phân tách P bằng một xác suất dây chuyền (chain rule of probability): 

$P(w_1...w_n) = P(w_1)P(w_2|w_1)P(w_3|w_1^2)...P(w_n|w_1^{n-1})$
\[= \prod_{k=1}^n P(w_k|w_{1}^{k-1}) \]
Quy tắc dây chuyền chỉ ra mối liên hệ giữa xác suất cả cụm từ và xác suất của một từ đi sau một số từ trước đó. Do đó mô hình cần một lượng bộ nhớ khá lớn để lưu xác suất của tất cả các cụm từ. Rõ ràng quy tắc này vẫn không hiệu quả khi chiều dài của cụm từ lớn và việc tính P( $w_k|w_1^{k-1}$) rất khó.
    Mô hình N-gram ra đời thay thế xác suất của một từ phụ thuộc vào toàn bộ các từ trước đó bằng một xấp xỉ hữu hạn từ trước đó.
    Ví dụ, với mô hình 2-gram, xác suất của một từ chỉ phụ thuộc vào từ đứng liền trước nó, thay vì toàn bộ dãy từ $w_1w_2...w_{n-1}$, hay:

$P(w_n|w_1^{n-1}) \approx P(w_n|w_{n-1})$
Ví dụ ta có:
P(the|its water is so transparent that) $\approx$ P(the|that)

    Giả định rằng xác suất của một từ chỉ phụ thuộc vào hữu hạn từ trước đó gọi là xấp xỉ Markov. Xấp xỉ Markov có thể dự đoán xác suất của một từ khi biết 1, ...,n từ trước đó (với n đủ nhỏ). Mô hình Markov còn được gọi là mô hình N-gram.
Áp dụng xấp xỉ Markov ta có công thức như sau:

$P(w_n|w_1^{n-1}) \approx P(w_n|w_{n-N+1}^{n-1})$

Mô hình 2-gram sẽ tương đương công thức xác suất:
\[P(w_1...w_n) \approx \prod_{k=1}^n P(w_k|w_{k-1})\]
    Làm sao để ước lượng được xác suất của 2-gram hay N-gram ? Các đơn giản hay sử dụng là Ước lượng hợp lý hóa cực đại (Maximum Likelihood Estimation - MLE).
Ví dụ, với xác suất 2-gram của từ y đi sau từ x là số lần xuất hiện của từ xy, C(xy).
\[P(w_n|w_{n-1}) = \frac{C(w_{n-1}w_n)}{\sum_w C(w_{n-1}w)}\]
Đơn giản công thức trên bằng cách coi số lần xuất hiện 2-gram bắt đầu từ $w_{n-1}$ bằng số lần xuất hiện của từ $w_{n-1}$, ta có:
\[P(w_n|w_{n-1}) = \frac{C(w_{n-1}w_n)}{C(w_{n-1})}\]
Ta xét ví dụ đơn giản với 3 câu như sau:

<s> I am Long </s>
<s> Long I am </s>
<s> I do not like green eggs and ham </s>

Xác suất 2-gram của tập dữ liệu trên:

    P(I|<s>) = 2/3 = 0.67     P(Long|<s>) = 1/3 = 0.33     P(am|I) = 2/3 = 0.67
    P(</s>|Long) = 1/2 = 0.5     P(Long|am) = 1/2 = 0.5     P(do|I) = 1/3 = 0.33

Công thức MLE cho trường hợp tổng quát N-gram:
\[P(w_n|w_{n-N+1}^{n-1}) = \frac{C(w_{n-N+1}^{n-1}w_n)}{C(w_{n-N+1}^{n-1})}\]
Xét ví dụ, ta có xác xuất 2-gram của các cụm từ như sau:

     P(I|<s>) = 0.25    P(want|I) = 0.33    P(english|want) = 0.0011      
     P(food|english) = 0.5    P(</s>|food) = 0.68

Xác suất của cả câu "I want english food" được tính:

     P(<s> I want english food </s>) 
     = P(I|<s>)P(want|I)P(english|want)P(food|english)P(</s>|food) = 0.000031.

    Trên đây, tôi đã giới thiệu với bạn đọc các kiến thức cơ bản về mô hình ngôn ngữ và mô hình N-gram. Bạn đọc muốn tìm hiểu sâu hơn về cách đánh giá mô hình ngôn ngữ, các vấn đề gặp phải khi dùng ước lượng hợp lý hóa cực đại MLE và các phương pháp làm mịn nhằm đánh giá chính xác hơn xác suất của các cụm N-gram, có thể đọc thêm tại đây. Tôi sẽ không đi sâu vào các vấn đề này mà sẽ dành trọng tâm vào các mô hình RNN, LSTM và NER trong các bài viết sắp tới.





Comments

Post a Comment

Popular posts from this blog

YOLO: You Only Look Once

Intersection over Union (IoU) cho object detection

Giới thiệu về Generative Adversarial Networks (GANs)