Khái niệm AI với Python

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ụ

Chạy code →
main.py
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ả.

  1. Đổi đầu vào hoặc trọng số và đoán kết quả trước khi chạy.
  2. In các giá trị trung gian để theo dõi từng bước tính toán.
  3. Giải các thử thách được liên kết bên dưới để tự cài đặt ý tưởng.
Chạy trong Python IDE →

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ất cả thử thách