Chuyển đến nội dung chính

GloVe Word Embedding: Học vector từ ma trận đồng xuất hiện

Sau Word2Vec và FastText, GloVe (Global Vectors for Word Representation) đưa ra một cách tiếp cận khác để học vector từ. Thay vì chủ yếu dự đoán từ dựa trên từng cửa sổ ngữ cảnh, GloVe khai thác thống kê đồng xuất hiện (co-occurrence) được tổng hợp trên toàn bộ tập văn bản.

Ý tưởng quan trọng của GloVe là: nếu hai từ thường xuất hiện trong những môi trường tương tự, cấu trúc thống kê đó phải được phản ánh trong không gian vector. Vì vậy, để hiểu GloVe, cần bắt đầu từ ma trận đồng xuất hiện trước khi đi đến hàm tối ưu.

Tóm tắt nội dung
GloVe bắt đầu từ số lần các từ xuất hiện gần nhau trong toàn bộ tập văn bản.
Mô hình học các vector sao cho tích vô hướng giữa hai vector phản ánh logarit tần suất đồng xuất hiện.
Khác FastText, GloVe chuẩn không dựa vào n-gram ký tự; trọng tâm của nó là cấu trúc thống kê toàn cục của từ.
GloVe: từ thống kê đồng xuất hiện đến vector từ Thông tin toàn cục trong tập văn bản được nén vào không gian embedding. Tập văn bản cat eats fish dog eats meat cat likes fish Ma trận đồng xuất hiện X cat eats fish dog cat eats fish Embedding cat → [ ... ] dog → [ ... ] Đồng xuất hiện nhiều → ràng buộc mạnh hơn trong quá trình học vector.
GloVe nén thông tin từ ma trận đồng xuất hiện lớn thành các vector có số chiều thấp hơn.

1. Từ cửa sổ ngữ cảnh đến ma trận đồng xuất hiện

Giả sử có ba câu đơn giản:

cat eats fish
dog eats meat
cat likes fish

Ta chọn cửa sổ ngữ cảnh bằng 1. Điều này có nghĩa là với mỗi từ, chỉ xét từ ngay bên trái và ngay bên phải nó.

Trong câu đầu tiên:

cat ↔ eats
eats ↔ fish

Ta đếm số lần mỗi cặp từ xuất hiện trong phạm vi cửa sổ đã chọn. Nếu Xij là số lần từ j xuất hiện trong ngữ cảnh của từ i thì toàn bộ các giá trị Xij tạo thành ma trận đồng xuất hiện.

cat dog eats fish meat likes
cat 0 0 1 0 0 1
dog 0 0 1 0 0 0
eats 1 1 0 1 1 0
fish 0 0 1 0 0 1

Ma trận này có thể rất lớn khi từ điển chứa hàng chục nghìn hoặc hàng triệu từ. Tuy nhiên, phần lớn cặp từ không bao giờ xuất hiện gần nhau, nên ma trận thực tế thường rất thưa.

2. Vì sao không dùng trực tiếp số lần đồng xuất hiện?

Có thể nghĩ rằng chỉ cần dùng mỗi hàng của ma trận X làm vector của từ. Về nguyên tắc, hàng tương ứng với cat đã cho biết cat thường xuất hiện gần những từ nào.

Tuy nhiên cách này có hai vấn đề lớn. Thứ nhất, số chiều bằng kích thước từ điển nên vector có thể cực lớn. Thứ hai, tần suất từ trong ngôn ngữ phân bố rất không đều: một số từ xuất hiện thường xuyên hơn hàng nghìn lần so với các từ khác.

GloVe giải quyết vấn đề bằng cách tìm một không gian vector có số chiều nhỏ hơn nhưng vẫn giữ được cấu trúc quan trọng của các thống kê đồng xuất hiện.

Cách hiểu đơn giản: ma trận đồng xuất hiện chứa thông tin ban đầu; GloVe tìm cách nén thông tin đó thành các vector dày đặc có số chiều nhỏ hơn.

3. Hàm mục tiêu của GloVe hoạt động như thế nào?

Với mỗi từ i, GloVe học một vector wi. Với mỗi từ đóng vai trò ngữ cảnh j, mô hình học một vector ngữ cảnh riêng là w̃j. Ngoài ra còn có hai hệ số lệch bi và b̃j.

Mục tiêu là làm cho:

wiTw̃j + bi + b̃j ≈ log(Xij)

Nếu hai từ xuất hiện cùng nhau nhiều, Xij lớn và mô hình phải điều chỉnh các vector để vế trái gần với log(Xij). Nếu chúng hiếm khi đồng xuất hiện, tác động của cặp đó nhỏ hơn.

GloVe tối ưu hàm mất mát có dạng:

J = Σi,j f(Xij) [wiTw̃j + bi + b̃j − log(Xij)]2

Hàm f(Xij) là một hàm trọng số (weighting function). Nó ngăn các cặp xuất hiện cực kỳ nhiều chi phối hoàn toàn quá trình huấn luyện, đồng thời giảm ảnh hưởng của các thống kê quá hiếm và thiếu ổn định.

Không nên hiểu rằng GloVe chỉ phân rã ma trận bằng một phép toán đại số đơn giản. Mô hình tối ưu một hàm mất mát có trọng số trên các phần tử đồng xuất hiện khác 0 và học trực tiếp các vector bằng tối ưu số.

4. Tại sao GloVe dùng logarit của tần suất?

Tần suất đồng xuất hiện có thể chênh lệch rất lớn. Ví dụ một cặp từ có thể xuất hiện 10 lần, trong khi một cặp phổ biến khác xuất hiện 10.000 lần.

Nếu dùng trực tiếp giá trị Xij, khoảng cách về số học giữa các cặp phổ biến và cặp hiếm trở nên quá lớn. Logarit nén thang đo:

log(10) ≈ 2.30
log(100) ≈ 4.61
log(1,000) ≈ 6.91
log(10,000) ≈ 9.21

Mặc dù tần suất từ 10 đến 10.000 tăng một nghìn lần, giá trị log chỉ tăng từ khoảng 2.30 lên 9.21. Điều này giúp mô hình làm việc với một thang giá trị cân bằng hơn.

Đây cũng là một lý do không nên diễn giải GloVe đơn giản là “từ xuất hiện cùng nhau càng nhiều thì vector càng giống nhau”. Mô hình học từ toàn bộ cấu trúc quan hệ giữa một từ với nhiều từ ngữ cảnh khác nhau.

5. Xây dựng ma trận đồng xuất hiện bằng Python

Đoạn mã sau minh họa bước đầu của GloVe: xây dựng ma trận đồng xuất hiện từ một tập câu nhỏ với cửa sổ bằng 1.

Python · Ma trận đồng xuất hiện
import numpy as np

sentences = [
    ["cat", "eats", "fish"],
    ["dog", "eats", "meat"],
    ["cat", "likes", "fish"]
]

vocab = sorted({
    word
    for sentence in sentences
    for word in sentence
})

word2idx = {
    word: i
    for i, word in enumerate(vocab)
}

V = len(vocab)
X = np.zeros((V, V), dtype=np.float64)

window_size = 1

for sentence in sentences:
    for i, center_word in enumerate(sentence):

        left = max(0, i - window_size)
        right = min(
            len(sentence),
            i + window_size + 1
        )

        for j in range(left, right):
            if i == j:
                continue

            context_word = sentence[j]

            X[
                word2idx[center_word],
                word2idx[context_word]
            ] += 1

print(vocab)
print(X)

Mỗi hàng biểu diễn một từ trung tâm, mỗi cột biểu diễn một từ ngữ cảnh. Giá trị tại X[i,j] cho biết số lần hai từ xuất hiện trong phạm vi cửa sổ đã chọn.

Đây mới chỉ là phần thống kê đầu vào. Bước tiếp theo của GloVe là tạo các vector ngẫu nhiên rồi tối ưu chúng để tái tạo cấu trúc logarit của X.

6. Một bước huấn luyện GloVe diễn ra ra sao?

Giả sử Xij lớn hơn 0. Ta tính giá trị dự đoán:

ŷij = wiTw̃j + bi + b̃j

Giá trị mục tiêu là log(Xij). Sai số:

eij = ŷij − log(Xij)

Từ sai số này, gradient được tính cho wi, w̃j và hai hệ số lệch. Quá trình lặp qua rất nhiều cặp đồng xuất hiện sẽ dần điều chỉnh các vector.

Python · Một bước cập nhật GloVe
import numpy as np

dim = 10

W = np.random.normal(
    0,
    0.01,
    (V, dim)
)

W_context = np.random.normal(
    0,
    0.01,
    (V, dim)
)

bias = np.zeros(V)
bias_context = np.zeros(V)

learning_rate = 0.05

# Minh họa một cặp từ có đồng xuất hiện
i = word2idx["cat"]
j = word2idx["eats"]

x_ij = X[i, j]

if x_ij > 0:

    prediction = (
        np.dot(W[i], W_context[j])
        + bias[i]
        + bias_context[j]
    )

    error = prediction - np.log(x_ij)

    # Lưu vector cũ trước khi cập nhật
    wi = W[i].copy()
    wj = W_context[j].copy()

    W[i] -= learning_rate * error * wj
    W_context[j] -= learning_rate * error * wi

    bias[i] -= learning_rate * error
    bias_context[j] -= learning_rate * error

Đoạn mã trên được đơn giản hóa để làm rõ cơ chế gradient. Một triển khai GloVe đầy đủ còn phải áp dụng hàm trọng số f(Xij) và lặp qua toàn bộ các cặp đồng xuất hiện khác 0 trong nhiều vòng huấn luyện.

7. GloVe khác Word2Vec và FastText như thế nào?

Tiêu chí Word2Vec FastText GloVe
Nguồn tín hiệu chính Ngữ cảnh cục bộ Ngữ cảnh + subword Thống kê đồng xuất hiện toàn cục
Đơn vị biểu diễn Từ Từ + n-gram ký tự Từ
Từ ngoài từ điển Không xử lý trực tiếp Có thể suy ra từ subword Không xử lý trực tiếp
Dữ liệu trung gian Các cặp huấn luyện Cặp huấn luyện + subword Ma trận đồng xuất hiện
Loại embedding Tĩnh Tĩnh Tĩnh

Sự khác biệt giữa các phương pháp không nên bị phóng đại thành “cục bộ” và “toàn cục” hoàn toàn tách biệt. Word2Vec cũng có thể học cấu trúc rộng hơn sau rất nhiều cửa sổ ngữ cảnh, trong khi GloVe cũng xây dựng thống kê từ các cửa sổ cục bộ. Điểm khác nhau chủ yếu nằm ở cách tổng hợp và tối ưu tín hiệu ngữ cảnh.

FastText nổi bật khi thông tin cấu tạo từ quan trọng hoặc dữ liệu có nhiều từ hiếm. GloVe phù hợp khi muốn khai thác trực tiếp các thống kê đồng xuất hiện của một kho văn bản lớn.

Cách hiểu GloVe ngắn gọn
Tập văn bản → Cửa sổ ngữ cảnh → Đếm đồng xuất hiện → Ma trận X → log(X) → Tối ưu hàm mất mát → Vector từ

Điểm cần nhớ là GloVe vẫn tạo embedding tĩnh. Một từ chỉ có một biểu diễn cơ bản, vì vậy mô hình chưa giải quyết được trường hợp cùng một từ mang nghĩa khác nhau tùy câu.

Đây chính là giới hạn tự nhiên dẫn sang thế hệ tiếp theo của biểu diễn từ: embedding phụ thuộc ngữ cảnh, nơi vector của cùng một từ có thể thay đổi theo câu mà nó xuất hiện.

Kết luận: GloVe học word embedding bằng cách nén cấu trúc thống kê của ma trận đồng xuất hiện vào một không gian vector có số chiều thấp. Khác FastText tập trung vào cấu tạo ký tự, GloVe tập trung vào quan hệ đồng xuất hiện giữa các từ trên toàn tập văn bản. Tuy nhiên, giống Word2Vec và FastText, GloVe vẫn là embedding tĩnh; bước tiếp theo hợp lý là tìm hiểu cách biểu diễn từ thay đổi theo ngữ cảnh.
© The CS Note · THE CS NOTE

Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.

Nguồn gốc: GloVe Word Embedding: Học vector từ ma trận đồng xuất hiện

Về trang chủ Về đầu bài

Bài Đăng Phổ Biến

Bài toán tháp Hà nội

Trải nghiệm Tháp Hà Nội Kéo thả đĩa hoặc chạm vào các nút bên dưới để di chuyển. Bạn phải chuyển toàn bộ đĩa sang cột ngoài cùng bên phải (Cột 3) mà không đặt đĩa to lên đĩa nhỏ. Cột 1 Cột 2 Cột 3 Điều khiển & Chế độ Số lượng đĩa 4 Tốc độ máy giải ↪ Undo ↻ Chơi lại 🤖 Máy tự giải Thống kê ván chơi Nước đã đi 0 Thời gian 00:00 Tối thiểu cần 15 Kỷ lục của bạn - Lịch sử và Nguồn gốc Truyền thuyết Bài toán Tháp Hà Nội (hay Tháp Brahma) là một trò chơi xếp hình toán học kinh điển được giới thiệu lần đầu vào năm 1883 bởi nhà toán học người Pháp Édouard L...

Bài toán phân tích cảm xúc trong văn bản

Bài toán phân tích cảm xúc (sentiment analysis) là một bài toán NLP nhằm xác định thái độ hoặc cảm xúc được thể hiện trong văn bản. Ví dụ, từ một đánh giá như “Điện thoại đẹp, chạy nhanh nhưng pin hơi yếu”, hệ thống có thể nhận biết rằng người dùng có cả nhận xét tích cực và tiêu cực. Điểm thú vị của bài toán nằm ở khoảng cách giữa cách con người hiểu ngôn ngữ và cách máy tính xử lý dữ liệu. Một hệ thống phân tích cảm xúc cần biến văn bản tự nhiên thành dữ liệu có cấu trúc, học được các mẫu ngôn ngữ từ dữ liệu huấn luyện và đưa ra dự đoán hợp lý trên những câu chưa từng gặp. 1. Bài toán phân tích cảm xúc bắt đầu từ đâu? Hãy tưởng tượng một cửa hàng trực tuyến có hàng nghìn đánh giá mỗi ngày. Con người có thể đọc từng đánh giá để biết khách hàng hài lòng hay không, nhưng việc này nhanh chóng trở nên tốn thời gian khi dữ liệu tăng lên. NLP có thể biến bài toán đó thành một bài toán phân loại. Với mỗi văn bản, hệ thống nhận vào một chuỗi ký...

KAN cho phân đoạn khối u não với bộ BraTS 2020

Kolmogorov-Arnold Network (KAN) mở ra một hướng khác với MLP truyền thống: thay vì chỉ học các trọng số vô hướng trên mỗi kết nối, KAN có thể học những hàm phi tuyến một biến trên các cạnh . Khi đưa ý tưởng này vào kiến trúc encoder-decoder như U-Net, ta có thể sử dụng convolution để giữ cấu trúc không gian của ảnh MRI và dùng KAN để thực hiện các phép biến đổi phi tuyến mạnh hơn trên representation trung gian. Một bài toán phù hợp để nghiên cứu hướng này là phân đoạn u thần kinh đệm trên BraTS 2020 . Dataset cung cấp MRI đa mô thức và yêu cầu xác định các vùng Whole Tumor (WT), Tumor Core (TC) và Enhancing Tumor (ET). Đây là bài toán 3D có sự mất cân bằng voxel lớn, hình dạng khối u rất đa dạng và ranh giới giữa các mô bệnh lý không đơn giản. Lưu ý học thuật quan trọng: U-KAN gốc được công bố cho nhiều benchmark phân đoạn ảnh y tế nhưng không báo cáo kết quả BraTS 2020. Một công trình sau đó đã mở rộng U-KAN sang 3D MRI brain tumor segmentation , nhưng đánh giá trên BraTS 2...

Tách từ trong tiếng Việt Word Segmentation

Tách từ tiếng Việt là bài toán xác định ranh giới giữa các từ trong một chuỗi văn bản. Khó khăn nằm ở chỗ khoảng trắng trong tiếng Việt thường phân cách các âm tiết , nhưng một từ hoàn chỉnh có thể gồm nhiều âm tiết như “sinh viên” , “đại học” , “công nghệ” hay “tự nhiên” . Tách từ đúng giúp các hệ thống NLP dựa trên từ biểu diễn văn bản hợp lý hơn, đặc biệt trong tìm kiếm, TF-IDF, phân loại văn bản, gán nhãn từ loại và một số mô hình ngôn ngữ tiếng Việt. Tuy nhiên, với các Transformer sử dụng tokenizer dưới mức từ như subword hoặc SentencePiece, tách từ thủ công không phải lúc nào cũng là bước bắt buộc . Việc có cần tách từ trước hay không phụ thuộc vào mô hình và pipeline cụ thể. Tóm tắt nội dung Khoảng trắng trong tiếng Việt không phải lúc nào cũng là ranh giới từ ; nhiều từ gồm hai hoặc nhiều âm tiết. Word segmentation và tokenization có liên quan nhưng không hoàn toàn đồng nghĩa. Ba hướng chính gồm dựa trên từ điển, mô hình thống kê và mô hình học sâu . Tron...

KAN là gì? Mạng Kolmogorov-Arnold khác MLP thế nào?

Kolmogorov-Arnold Network (KAN) là một kiến trúc mạng nơ-ron trong đó mỗi cạnh không chỉ chứa một trọng số vô hướng mà mang một hàm một biến có thể học được . Đây là khác biệt cốt lõi so với Multi-Layer Perceptron (MLP), nơi các cạnh chủ yếu thực hiện phép nhân với trọng số còn hàm kích hoạt thường được áp dụng tại các node. KAN được lấy cảm hứng từ định lý biểu diễn Kolmogorov-Arnold và đặc biệt đáng chú ý trong các bài toán xấp xỉ hàm, mô hình hóa khoa học và symbolic regression. Tuy nhiên, KAN không nên được hiểu là kiến trúc đã thay thế MLP trong mọi bài toán Deep Learning; khả năng biểu diễn, chi phí tính toán và mức độ phù hợp của hai kiến trúc khác nhau theo từng nhiệm vụ. Tóm tắt nội dung MLP học chủ yếu trọng số trên các cạnh , còn KAN đặt hàm một biến học được trên từng cạnh . Một KAN layer cộng kết quả của nhiều hàm cạnh để tạo activation của node tiếp theo. KAN gốc sử dụng B-spline để tham số hóa các hàm phi tuyến trên cạnh. KAN có lợi thế đáng chú ý về trực...