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

One-hot vector: Biểu diễn dữ liệu phân loại trong NLP

One-hot vector: Cách biểu diễn dữ liệu phân loại trong NLP và Machine Learning

```

One-hot vector là một phương pháp biểu diễn dữ liệu phân loại bằng vector chỉ gồm hai giá trị 0 và 1. Phương pháp này đặc biệt hữu ích khi cần chuyển các nhãn như loại sản phẩm, trạng thái cảm xúc hoặc từ trong từ vựng thành dữ liệu số mà mô hình học máy có thể xử lý mà không tạo ra thứ tự giả giữa các lớp.

```

Tóm tắt: One-hot vector không cố mô tả mức độ giống nhau giữa các đối tượng. Mục tiêu của nó là biến mỗi lớp phân loại thành một vị trí riêng trong vector, giúp mô hình nhận diện các lớp mà không hiểu nhầm rằng lớp này lớn hơn hay gần lớp khác hơn.

``` Từ nhãn phân loại đến One-hot vector Mèo Chó Chim [1, 0, 0] [0, 1, 0] [0, 0, 1] Mỗi vị trí đại diện cho một lớp dữ liệu ```

One-hot vector thực chất là gì?

Phần lớn mô hình học máy không thể trực tiếp xử lý các giá trị dạng chữ như “mèo”, “chó”, “Hà Nội”, “tích cực” hay “trung tính”. Trước khi đưa những giá trị này vào mô hình, chúng cần được chuyển sang dạng số.

Một cách đơn giản là gán mèo = 1, chó = 2 và chim = 3. Tuy nhiên, cách làm này vô tình tạo ra quan hệ số học không tồn tại trong dữ liệu ban đầu. Mô hình có thể hiểu rằng 3 lớn hơn 2 hoặc khoảng cách giữa chim và mèo lớn hơn khoảng cách giữa chó và mèo.

Mã hóa one-hot (one-hot encoding) giải quyết vấn đề bằng cách dành một vị trí riêng cho từng lớp. Với ba lớp mèo, chó và chim, ta có thể biểu diễn:

Mèo → [1, 0, 0]
Chó → [0, 1, 0]
Chim → [0, 0, 1]

Nếu một biến phân loại có k lớp, mỗi lớp được biểu diễn bằng một vector k chiều. Trong one-hot chuẩn, vector có đúng một phần tử bằng 1 và tất cả phần tử còn lại bằng 0.

Vị trí của số 1 chỉ có nhiệm vụ xác định lớp. Nó không biểu diễn mức độ lớn nhỏ, không tạo thứ tự và cũng không cho biết hai lớp có giống nhau về ý nghĩa hay không.



Dữ liệu được chuyển thành one-hot như thế nào?

Quá trình mã hóa có thể hiểu qua ba bước: xác định các lớp có thể xuất hiện, gán mỗi lớp vào một vị trí cố định và tạo vector có số 1 tại vị trí tương ứng.

```
1. Dữ liệu đầu vào Một giá trị phân loại, chẳng hạn “tích cực”.
2. Xác định vị trí Tìm vị trí đã được dành cho lớp đó trong danh sách nhãn.
3. Tạo vector Đặt vị trí tương ứng bằng 1 và các vị trí còn lại bằng 0.
```

Giả sử bài toán phân loại cảm xúc có ba nhãn theo thứ tự: tiêu cực, trung tính và tích cực. Khi đó “tiêu cực” được biểu diễn là [1, 0, 0], “trung tính” là [0, 1, 0] và “tích cực” là [0, 0, 1].

Sau khi chuyển đổi, mô hình không còn xử lý từ “tích cực” như một chuỗi ký tự. Thay vào đó, mô hình nhận một dãy số có cấu trúc rõ ràng và nhất quán.

Ví dụ one-hot trong xử lý ngôn ngữ tự nhiên

Trong xử lý ngôn ngữ tự nhiên (Natural Language Processing), one-hot có thể được dùng để biểu diễn từng từ trong một từ vựng. Giả sử từ vựng chỉ gồm bốn từ theo thứ tự: “tôi”, “học”, “máy”, “AI”.

```
Từ tôi học máy AI
tôi 1 0 0 0
học 0 1 0 0
máy 0 0 1 0
AI 0 0 0 1
```

One-hot cho biết chính xác từ nào đang được xét, nhưng không biểu diễn ý nghĩa của từ. Vector của “học” khác hoàn toàn với vector của “máy”, nhưng mức độ khác biệt đó cũng tương tự như giữa “học” và một từ không liên quan.

Vì vậy, one-hot phù hợp để nhận diện các phần tử rời rạc nhưng không phải là cách tốt để mô hình hóa quan hệ ngữ nghĩa giữa các từ.

Lưu ý:

Nếu một mẫu có thể đồng thời thuộc nhiều lớp và vector chứa nhiều vị trí bằng 1, cách biểu diễn đó thường được gọi là multi-hot. Nó khác với one-hot chuẩn, trong đó chỉ có một vị trí bằng 1.

Cài đặt one-hot vector bằng Python

One-hot có thể được cài đặt bằng các cấu trúc dữ liệu cơ bản của Python. Ví dụ sau nhận một danh sách nhãn, xác định tập lớp và chuyển mỗi phần tử thành vector tương ứng.

```
Python
def one_hot_encode(values):
# Xác định các lớp
classes = sorted(set(values))

# Tạo ánh xạ lớp → vị trí
index = {
    label: i
    for i, label in enumerate(classes)
}

encoded = []

for value in values:
    vector = [0] * len(classes)
    vector[index[value]] = 1
    encoded.append(vector)

return classes, encoded
```

labels = [ "mèo", "chó", "chim", "chó"
]

classes, vectors = one_hot_encode(labels)

print(classes) print(vectors)

Vì hàm sorted() sắp xếp tên lớp, danh sách lớp trong ví dụ có thể trở thành chim, chó và mèo. Khi đó chim được mã hóa thành [1, 0, 0], chó thành [0, 1, 0] và mèo thành [0, 0, 1].

Thứ tự cụ thể không quan trọng. Điều quan trọng là ánh xạ phải được giữ nguyên trong toàn bộ quy trình từ huấn luyện, kiểm định đến dự đoán dữ liệu mới.

Trong dự án thực tế, bộ mã hóa nên được xây dựng từ dữ liệu huấn luyện và được lưu lại. Không nên tự tạo lại thứ tự lớp trên tập kiểm thử, vì vị trí của các lớp có thể thay đổi và làm sai ý nghĩa của vector.

Ưu điểm và giới hạn của one-hot vector

Ưu điểm quan trọng nhất của one-hot là không áp đặt quan hệ thứ tự giả. Mỗi lớp có một chiều riêng nên biểu diễn rõ ràng, dễ giải thích và phù hợp với nhiều thuật toán học máy.

One-hot cũng dễ kiểm tra bằng mắt. Chỉ cần quan sát vị trí có giá trị 1 là có thể xác định lớp tương ứng. Điều này đặc biệt hữu ích khi xây dựng mô hình cơ sở hoặc kiểm tra quy trình tiền xử lý dữ liệu.

Tuy nhiên, kích thước vector tăng trực tiếp theo số lượng lớp. Nếu một từ vựng có 50.000 từ, mỗi từ cần một vector dài 50.000 phần tử nhưng chỉ có một vị trí khác 0.

Loại vector này được gọi là vector thưa (sparse vector). Nếu lưu dưới dạng ma trận thông thường, lượng bộ nhớ bị lãng phí có thể rất lớn. Vì vậy, các thư viện xử lý dữ liệu thường sử dụng cấu trúc ma trận thưa để chỉ lưu những vị trí thực sự có giá trị.

Hạn chế thứ hai là one-hot không mô hình hóa quan hệ giữa các lớp. Trong biểu diễn này, các từ “xe”, “ô tô” và “chuối” đều chỉ là những vị trí khác nhau. One-hot không biết “xe” gần nghĩa với “ô tô” hơn “chuối”.

One-hot khác gì mã hóa nhãn và vector nhúng?

```
Phương pháp Ví dụ Đặc điểm Phù hợp
One-hot [0, 1, 0] Không tạo thứ tự giữa các lớp Biến phân loại có số lớp nhỏ hoặc vừa
Mã hóa nhãn 0, 1, 2 Gọn nhưng có thể tạo cảm giác thứ tự Mã hóa nhãn đầu ra hoặc dữ liệu có thứ tự phù hợp
Vector nhúng [0.21, -0.54, ...] Vector đặc, có thể học quan hệ giữa các đối tượng NLP, học sâu và không gian lớp lớn
```

Mã hóa nhãn (label encoding) biến mỗi lớp thành một số nguyên. Chẳng hạn mèo = 0, chó = 1 và chim = 2. Cách này tiết kiệm không gian nhưng nếu dùng trực tiếp làm đặc trưng đầu vào, một số mô hình có thể hiểu nhầm rằng các số biểu diễn quan hệ lớn nhỏ hoặc khoảng cách.

Vector nhúng (embedding) biểu diễn mỗi đối tượng bằng một vector số thực có số chiều tương đối nhỏ. Các giá trị trong vector có thể được học từ dữ liệu, nhờ đó mô hình có khả năng biểu diễn quan hệ giữa các từ hoặc đối tượng.

Do đó, vector nhúng không đơn giản là phiên bản tốt hơn của one-hot. Hai phương pháp phục vụ các mục tiêu khác nhau. One-hot thích hợp khi cần phân biệt rõ các lớp độc lập, còn vector nhúng phù hợp khi mô hình cần học cấu trúc và mức độ tương đồng giữa chúng.

Khi nào nên sử dụng one-hot vector?

One-hot là lựa chọn hợp lý với những thuộc tính như loại sản phẩm, khu vực, phương thức thanh toán, trình duyệt, nhóm chủ đề hoặc các biến phân loại khác không có thứ tự tự nhiên.

  • Dùng khi biến phân loại không có thứ tự tự nhiên.
  • Dùng khi số lớp nhỏ hoặc vừa phải.
  • Dùng khi cần biểu diễn minh bạch và dễ giải thích.
  • Dùng làm đường cơ sở trước khi thử các phương pháp phức tạp hơn.
  • Cân nhắc phương pháp khác nếu số lớp lên đến hàng chục nghìn hoặc hàng triệu.

Trong NLP hiện đại, one-hot hiếm khi được dùng trực tiếp làm biểu diễn cuối cùng của từ trong các mô hình lớn vì kích thước từ vựng quá cao và biểu diễn không mang thông tin ngữ nghĩa. Tuy nhiên, hiểu one-hot vẫn rất quan trọng vì nó giúp người học nắm được cách một đối tượng rời rạc được ánh xạ sang không gian số.

Quy tắc thực hành:

Nếu các lớp chỉ là tên gọi và không có quan hệ thứ tự, one-hot thường an toàn hơn việc gán trực tiếp các số nguyên. Nếu số lớp quá lớn hoặc cần biểu diễn quan hệ ngữ nghĩa, nên cân nhắc ma trận thưa, các kỹ thuật mã hóa khác hoặc vector nhúng.

Kết luận

One-hot vector là phương pháp biểu diễn dữ liệu phân loại đơn giản, rõ ràng và dễ triển khai. Giá trị cốt lõi của phương pháp nằm ở khả năng chuyển các nhãn rời rạc thành dữ liệu số mà không tự tạo ra quan hệ thứ tự giữa chúng. Với số lượng lớp nhỏ hoặc vừa, one-hot vẫn là một lựa chọn thực dụng; khi không gian lớp quá lớn hoặc cần mô hình hóa quan hệ ngữ nghĩa, các biểu diễn như vector nhúng thường phù hợp hơn.

© 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: One-hot vector: Biểu diễn dữ liệu phân loại trong NLP

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...