Tokenization: từ vựng, one-hot và byte pair encoding trong Python
Mạng nơ-ron chỉ hiểu con số, nên văn bản được tách thành các token trước và mỗi token có một id. Các mô hình ngôn ngữ như GPT dùng byte pair encoding, tạo token từ những mảnh từ hay xuất hiện.
Khái niệm bằng lời đơn giản
Mạng nơ-ron chỉ hiểu con số, nên văn bản được tách thành các token trước và mỗi token có một id. Các mô hình ngôn ngữ như GPT dùng byte pair encoding, tạo token từ những mảnh từ hay xuất hiện.
Biến văn bản thành số như các mô hình ngôn ngữ: xây dựng từ vựng, mã hóa one-hot và học token con bằng BPE.
Ý chính
- Token là một đơn vị văn bản, như một từ, một phần của từ hoặc một ký tự.
- Vector one-hot đơn giản nhưng trở nên rất dài với bộ từ vựng lớn.
- BPE xử lý từ hiếm và từ mới bằng cách tách chúng thành các mảnh đã biết.
- Sau đó mô hình ánh xạ mỗi id token thành một vector học được gọi là embedding.
Khi nào nên sử dụng?
- Hiểu điều gì diễn ra bên trong mạng nơ-ron và các thư viện AI.
- Nắm ý tưởng trước khi tự cài đặt nó trong các thử thách tương ứng.
- Chuẩn bị cho khóa học machine learning, phỏng vấn và dự án.
Xem trực quan
Gõ câu của riêng bạn để tạo từ vựng, rồi nhấn Từng bước để xem byte pair encoding gộp cặp xuất hiện nhiều nhất.
Code ví dụ
from collections import Counter
text = "the cat sat on the mat"
# 1. Build a vocabulary: every distinct word gets an id.
words = text.split()
vocab = {word: i for i, word in enumerate(sorted(set(words)))}
print("vocab:", vocab)
print("ids:", [vocab[w] for w in words])
# 2. One-hot encoding: a vector with a single 1 at the word's id.
def one_hot(word):
return [1 if vocab[word] == i else 0 for i in range(len(vocab))]
print("one-hot 'cat':", one_hot("cat"))
# 3. Byte pair encoding: repeatedly merge the most frequent pair of symbols.
tokens = list("banana")
for _ in range(2):
pairs = Counter(zip(tokens, tokens[1:]))
best = max(pairs, key=pairs.get)
merged, i = [], 0
while i < len(tokens):
if i + 1 < len(tokens) and (tokens[i], tokens[i + 1]) == best:
merged.append(tokens[i] + tokens[i + 1])
i += 2
else:
merged.append(tokens[i])
i += 1
tokens = merged
print("merge", best, "->", tokens)
Kết quả dự kiến
vocab: {'cat': 0, 'mat': 1, 'on': 2, 'sat': 3, 'the': 4}
ids: [4, 0, 3, 2, 4, 1]
one-hot 'cat': [1, 0, 0, 0, 0]
merge ('a', 'n') -> ['b', 'an', 'an', 'a']
merge ('b', 'an') -> ['ban', 'an', 'a']
Cách hoạt động
Từ vựng ánh xạ mỗi từ khác nhau sang một id, và câu văn trở thành danh sách id. Vector one-hot chỉ có số 1 ở vị trí id của từ. BPE đếm các cặp ký hiệu đứng cạnh nhau và gộp cặp xuất hiện nhiều nhất, trước là ('a', 'n') rồi đến ('b', 'an').
Thay đổi giá trị và chạy chương trình bằng trình chạy Python online của CodeUtility mà không cần cài Python.
Bài tập mở rộng
Hãy sửa code theo các bài tập dưới đây để hiểu rõ cách hoạt động thay vì chỉ sao chép kết quả.
- Đổi đầu vào hoặc trọng số và đoán kết quả trước khi chạy.
- In các giá trị trung gian để theo dõi từng bước tính toán.
- Giải các thử thách được liên kết bên dưới để tự cài đặt ý tưởng.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Tách từ và xây dựng từ vựng Tách văn bản thành các từ viết thường và xây dựng từ vựng sắp theo tần suất, bước đầu tiên của mọi mô hình ngôn ngữ. Dễ
- Mã hóa one-hot Biến các danh mục thành vector chỉ có một số 1, định dạng đầu vào cho bộ phân loại và embedding. Dễ
- Các lần gộp Byte Pair Encoding (BPE) Học cách gộp từ con như tokenizer của GPT: liên tục gộp cặp ký hiệu liền kề xuất hiện nhiều nhất. Trung bình