Tổng hợp kiến thức liên quan đến Trình mã hóa văn bản v5- Định nghĩa mô hình đơn giản, cung cấp năng lượng cho hệ sinh thái AI

Tổng hợp kiến thức liên quan đến Trình mã hóa văn bản v5, cung cấp năng lượng cho hệ sinh thái AI

  • 18 min read
Tổng hợp kiến thức liên quan đến Trình mã hóa văn bản v5- Định nghĩa mô hình đơn giản, cung cấp năng lượng cho hệ sinh thái AI
Tổng hợp kiến thức liên quan đến Trình mã hóa văn bản v5, cung cấp năng lượng cho hệ sinh thái AI

Tokenization in Transformers v5: Simpler, Clearer, and More Modular

Transformers v5 mang đến một cuộc cải tổ lớn về cách thức hoạt động của tokenizers. Bản định dạng lại tokenizers lớn này tách biệt thiết kế của tokenizer khỏi bộ từ vựng đã được huấn luyện (tương tự như cách PyTorch tách kiến trúc mạng nơ-ron khỏi trọng số đã học). Kết quả là chúng ta có các tokenizer mà bạn có thể kiểm tra, tùy chỉnhhuấn luyện từ đầu một cách dễ dàng hơn nhiều.

Tóm tắt: Bài viết này giải thích cách tokenization hoạt động trong Transformers và tại sao v5 lại là một bản thiết kế lại lớn, với nội bộ rõ ràng hơn, hệ thống phân cấp lớp sạch sẽ và một backend nhanh duy nhất. Đây là một hướng dẫn thực tế cho bất kỳ ai muốn hiểu, tùy chỉnh hoặc huấn luyện các tokenizer dành riêng cho mô hình thay vì coi chúng như những hộp đen.

Bảng Mục Lục

Dành cho chuyên gia: Nếu bạn đã quen thuộc với các khái niệm và muốn hiểu những thay đổi trong v5, hãy chuyển đến v5 Separates Tokenizer Architecture from Trained Vocab

Trước khi đi sâu vào các thay đổi, hãy cùng xem lại nhanh về tokenization làm gì và các bộ phận khớp với nhau như thế nào.

What is tokenization?

Các mô hình ngôn ngữ lớn không đọc văn bản thô. Chúng tiêu thụ các chuỗi số nguyên thường được gọi là token IDs hoặc input IDs. Tokenization là quá trình chuyển đổi văn bản thô thành các token ID này. (Hãy thử playground tokenization ở đây để hình dung tokenization.)

Tokenization là một khái niệm rộng được sử dụng trong xử lý ngôn ngữ tự nhiên và xử lý văn bản nói chung. Bài viết này tập trung đặc biệt vào tokenization cho các Mô hình Ngôn ngữ Lớn (LLMs) bằng cách sử dụng thư viện transformerstokenizers.

python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained(“HuggingFaceTB/SmolLM3-3B”)

text = “Hello world” tokens = tokenizer(text)

print(tokens[“input_ids”])

[9906, 1917]

print(tokenizer.convert_ids_to_tokens(tokens[“input_ids”]))

[‘Hello’, ‘Ġworld’]

Ġworld (ở trên) là một token duy nhất đại diện cho chuỗi ký tự " world" (có khoảng trắng).

Một token là đơn vị chuỗi nhỏ nhất mà mô hình nhìn thấy. Nó có thể là một ký tự, một từ, hoặc một đoạn từ con như “play” hoặc “##ing” ("##" là một mẫu, đừng lo lắng nếu bạn chưa hiểu rõ lắm 🤗). Bộ từ vựng (vocabulary) ánh xạ mỗi token duy nhất sang token ID.

python from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(“HuggingFaceTB/SmolLM3-3B”) print(tokenizer.vocab)

{‘ÎĹÎľ’: 106502, ‘ĠPeel’: 89694, ‘.languages’: 91078, …}

Một tokenizer tốt nén văn bản thành lượng token nhỏ nhất. Ít token hơn có nghĩa là ngữ cảnh sử dụng nhiều hơn mà không làm tăng kích thước mô hình. Việc huấn luyện một tokenizer về cơ bản là tìm ra các quy tắc nén tốt nhất cho tập dữ liệu của bạn. Ví dụ, nếu bạn làm việc với một kho ngữ liệu tiếng Trung, đôi khi bạn có thể tìm thấy những điều bất ngờ thú vị 😉.

The tokenization pipeline

Tokenization diễn ra theo từng giai đoạn. Mỗi giai đoạn biến đổi văn bản trước khi chuyển nó sang giai đoạn tiếp theo:

Stage Purpose Example
Normalizer Tiêu chuẩn hóa văn bản (chữ thường, chuẩn hóa unicode, làm sạch khoảng trắng) "HELLO World""hello world"
Pre-tokenizer Tách văn bản thành các khối sơ bộ "hello world"["hello", " world"]
Model Áp dụng thuật toán tokenization (BPE, Unigram, v.v.) ["hello", " world"][9906, 1917]
Post-processor Thêm các token đặc biệt (BOS, EOS, padding) [9906, 1917][1, 9906, 1917, 2]
Decoder Chuyển đổi token IDs trở lại văn bản [9906, 1917]"hello world"

Mỗi thành phần là độc lập. Bạn có thể thay đổi normalizers hoặc thay đổi algorithm mà không cần viết lại mọi thứ khác.

Bạn có thể truy cập tokenizer dựa trên rust thông qua _tokenizer. Chúng tôi sẽ đi sâu hơn về nó trong phần này.

python from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(“google/gemma-3-270m-it”)

print(f"{tokenizer._tokenizer.normalizer=}")

Replace(…)

print(f"{tokenizer._tokenizer.pre_tokenizer=}")

Split(…)

print(f"{tokenizer._tokenizer.model=}")

BPE(…)

print(f"{tokenizer._tokenizer.post_processor=}")

TemplateProcessing(…)

print(f"{tokenizer._tokenizer.decoder=}")

Sequence(decoders=[Replace(…), ByteFallback(), Fuse()])

Tokenization algorithms

Các thuật toán tokenization sau đây chiếm ưu thế trong các tokenizer mô hình ngôn ngữ hiện đại:

  1. Byte Pair Encoding (BPE) lặp đi lặp lại việc hợp nhất các cặp ký tự xuất hiện thường xuyên nhất. Thuật toán này có tính xác định và được sử dụng rộng rãi. (Đọc thêm về BPE)

    python from transformers import AutoTokenizer

    tokenizer = AutoTokenizer.from_pretrained(“openai/gpt-oss-20b”) print(tokenizer._tokenizer.model)

    BPE(…)

  2. Unigram sử dụng phương pháp xác suất, chọn cách phân tách có khả năng xảy ra nhất từ một bộ từ vựng ban đầu lớn. Điều này linh hoạt hơn BPE nghiêm ngặt. (Đọc thêm về Unigram)

    python from transformers import AutoTokenizer

    tokenizer = AutoTokenizer.from_pretrained(“google-t5/t5-base”) print(tokenizer._tokenizer.model)

    Unigram(…)

  3. WordPiece tương tự BPE nhưng sử dụng các tiêu chí hợp nhất khác nhau dựa trên khả năng xảy ra. (Đọc thêm về WordPiece)

    python from transformers import AutoTokenizer

    tokenizer = AutoTokenizer.from_pretrained(“bert-base-uncased”) print(tokenizer._tokenizer.model)

    WordPiece(…)

Accessing tokenizers through transformers

Thư viện tokenizers là một công cụ tokenization dựa trên Rust. Nó nhanh, hiệu quả và hoàn toàn độc lập với mô hình ngôn ngữ. Thư viện này xử lý các cơ chế chuyển đổi văn bản thành token IDs và ngược lại. Thư viện tokenizers là một công cụ đa dụng triển khai các thuật toán tokenization, nhưng không triển khai các quy ước kết nối các thuật toán đó với các mô hình ngôn ngữ cụ thể.

Hãy xem xét những gì xảy ra khi bạn sử dụng tokenizers trực tiếp với mô hình SmolLM3-3B:

python from tokenizers import Tokenizer

tokenizer = Tokenizer.from_pretrained(“HuggingFaceTB/SmolLM3-3B”) text = “Hello world” encodings = tokenizer.encode(text)

print(encodings.ids)

[9906, 1917]

print(encodings.tokens)

[‘Hello’, ‘Ġworld’]

Kết quả là tokenization thô. Bạn nhận được token IDs và các đoạn chuỗi tương ứng. Không có gì khác.

Bây giờ hãy xem xét những gì còn thiếu. SmolLM3-3B là một mô hình hội thoại. Khi bạn tương tác với nó, bạn thường cấu trúc đầu vào của mình dưới dạng một cuộc trò chuyện với các vai trò như “user” và “assistant”. Mô hình ngôn ngữ mong đợi các token định dạng đặc biệt để biểu thị các vai trò này. Thư viện tokenizers thô không có khái niệm nào về điều này.

How do you bridge the gap between raw tokenization and model requirements?

Thư viện transformers thu hẹp khoảng cách này. Thư viện này chủ yếu được biết đến như một thư viện định nghĩa mô hình, nhưng nó cũng cung cấp một lớp trừu tượng tokenizer gói gọn backend tokenizers thô và thêm chức năng nhận biết mô hình.

Đây là cùng một tokenization với wrapper transformers:

python from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(“HuggingFaceTB/SmolLM3-3B”)

Định dạng một cuộc trò chuyện bằng cách sử dụng mẫu chat của mô hình

prompt = “Give me a brief explanation of gravity in simple terms.” messages = [{“role”: “user”, “content”: prompt}] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, )

print(text)

<|im_start|>system

<|im_start|>user

Give me a brief explanation of gravity in simple terms.<|im_end|>

<|im_start|>assistant

model_inputs = tokenizer([text], return_tensors=“pt”)

Lưu ý cách các token đặc biệt như &lt;|im_start|&gt;&lt;|im_end|&gt; được áp dụng cho prompt trước khi tokenization. Điều này hữu ích để mô hình học được vị trí bắt đầu và kết thúc của một chuỗi mới.

Tokenizer transformers bổ sung mọi thứ mà thư viện thô còn thiếu:

  • Áp dụng mẫu chat. Phương thức apply_chat_template định dạng các cuộc trò chuyện theo các mẫu Jinja được lưu trữ trong cấu hình tokenizer, chèn các token và dấu phân cách đặc biệt chính xác.
  • Chèn token đặc biệt tự động. Các token bắt đầu chuỗi và kết thúc chuỗi được thêm vào những nơi mô hình mong đợi chúng.
  • Cắt bớt đến độ dài ngữ cảnh. Bạn có thể chỉ định truncation=True và tokenizer sẽ tôn trọng độ dài chuỗi tối đa của mô hình.
  • Mã hóa theo lô với padding. Nhiều đầu vào có thể được đệm đến cùng một độ dài với token padding và hướng chính xác.
  • Tùy chọn định dạng trả về. Bạn có thể yêu cầu các tensor PyTorch (return_tensors="pt") , mảng NumPy và các định dạng khác.

transformers triển khai API tokenization được sử dụng phổ biến nhất trong toàn bộ cộng đồng ML (encode, decode, convert_tokens_to_ids, v.v.)

The Tokenizer Class Hierarchy in transformers

Thư viện transformers tổ chức các tokenizer thành một hệ thống phân cấp lớp. Ở trên cùng là một lớp cơ sở định nghĩa giao diện chung. Bên dưới nó, các lớp backend xử lý tokenization thực tế bằng cách sử dụng các engine khác nhau. Ở dưới cùng, các lớp dành riêng cho mô hình cấu hình các backend cho các mô hình cụ thể.

Layer Component Responsibility
Entry Point AutoTokenizer Tự động chọn và khởi tạo lớp tokenizer chính xác
Model-Specific LlamaTokenizer, GPT2Tokenizer, v.v. Cấu hình backend với kiến trúc chuẩn hóa, tiền xử lý, v.v., token đặc biệt và cài đặt dành riêng cho mô hình
Backend TokenizersBackend, PythonBackend, SentencePieceBackend Thực hiện tokenization thực tế bằng cách sử dụng engine cụ thể
Base PreTrainedTokenizerBase Định nghĩa giao diện chung và chức năng được chia sẻ
Engine tokenizers (Rust), SentencePiece, Pure Python Thực hiện tokenization thô

PreTrainedTokenizerBase defines the common interface for all tokenizers

PreTrainedTokenizerBase là lớp cơ sở trừu tượng cho tất cả các tokenizer trong transformers. Nó định nghĩa giao diện mà mọi tokenizer phải triển khai.

Lớp cơ sở xử lý các chức năng không phụ thuộc vào backend tokenization:

  • Thuộc tính token đặc biệt. Các thuộc tính như bos_token, eos_token, pad_tokenunk_token được định nghĩa ở đây. Các thuộc tính này cung cấp quyền truy cập vào các token đặc biệt mà mô hình sử dụng để đánh dấu ranh giới chuỗi và xử lý các đầu vào không xác định.
  • Giao diện mã hóa. Các phương thức __call__, encodeencode_plus được định nghĩa ở đây. Các phương thức này chấp nhận đầu vào văn bản và trả về token IDs cùng với mặt nạ chú ý và siêu dữ liệu khác.
  • Giao diện giải mã. Các phương thức decodebatch_decode chuyển đổi token IDs trở lại văn bản.
  • Serialize. Các phương thức save_pretrainedfrom_pretrained xử lý việc tải xuống các tệp chính xác, đọc thông tin, lưu trữ tokenizer vào đĩa, v.v.
  • Hỗ trợ mẫu chat. Phương thức apply_chat_template nằm ở đây, định dạng các cuộc trò chuyện theo mẫu Jinja được lưu trữ trong cấu hình tokenizer.

Mọi tokenizer trong transformers cuối cùng đều kế thừa từ PreTrainedTokenizerBase. Lớp cơ sở đảm bảo hành vi nhất quán trên tất cả các tokenizer, bất kể chúng sử dụng backend nào cho tokenization thực tế.

TokenizersBackend wraps the tokenizers library

TokenizersBackend là lớp backend chính cho hầu hết các tokenizer hiện đại. Nó kế thừa từ PreTrainedTokenizerBase và gói gọn thư viện tokenizers dựa trên Rust.

Lớp này lưu trữ đối tượng tokenizer Rust bên trong:

python class TokenizersBackend(PreTrainedTokenizerBase): def init(self, tokenizer_object, …): self._tokenizer = tokenizer_object # The Rust tokenizer …

Khi bạn gọi các phương thức mã hóa trên một tokenizer TokenizersBackend, lớp này sẽ ủy quyền tokenization thực tế cho backend Rust:

python def _batch_encode_plus(self, batch_text_or_text_pairs, …): encodings = self._tokenizer.encode_batch(batch_text_or_text_pairs, …) …

Backend Rust thực hiện công việc tính toán chuyên sâu, trong khi lớp wrapper Python thêm các tính năng nhận biết mô hình ở trên.

Nhiều tokenizer dành riêng cho mô hình kế thừa từ TokenizersBackend, ví dụ bao gồm:

  • LlamaTokenizer
  • GemmaTokenizer

Các lớp dành riêng cho mô hình này cấu hình backend với bộ từ vựng, quy tắc hợp nhất, token đặc biệt và cài đặt chính xác cho các mô hình tương ứng của chúng.

PythonBackend provides a pure-Python mixin

PythonBackend kế thừa từ PreTrainedTokenizerBase và triển khai tokenization bằng Python thuần túy. Lớp này được đặt tên là PreTrainedTokenizer.

Backend Python thuần túy tồn tại vì một số lý do:

  • Logic tokenization tùy chỉnh. Một số mô hình yêu cầu hành vi tokenization không phù hợp với quy trình tokenizers tiêu chuẩn.
  • Tương thích di sản. Các triển khai mô hình cũ hơn có thể dựa vào hành vi dành riêng cho Python.

Backend Python chậm hơn backend Rust. Đối với hầu hết các trường hợp sử dụng, backend dựa trên Rust TokenizersBackend được ưu tiên.

Các tokenizer dành riêng cho mô hình kế thừa từ PythonBackend (hoặc bí danh PreTrainedTokenizer của nó) bao gồm một số mô hình cũ hoặc chuyên biệt, như:

  • CTRLTokenizer
  • CanineTokenizer

SentencePieceBackend handles SentencePiece models

SentencePieceBackend kế thừa từ PythonBackend và cung cấp tích hợp với thư viện SentencePiece của Google. SentencePiece là một thư viện tokenization độc lập mà nhiều mô hình sử dụng, đặc biệt là những mô hình được Google huấn luyện.

Backend này gói gọn một bộ xử lý SentencePiece:

python class SentencePieceBackend(PythonBackend): def init(self, vocab_file, …): self.sp_model = spm.SentencePieceProcessor() self.sp_model.Load(vocab_file) …

Các mô hình sử dụng SentencePiece tokenization kế thừa từ backend này. Ví dụ bao gồm:

  • SiglipTokenizer
  • BartphoTokenizer

Backend SentencePiece kế thừa từ PythonBackend thay vì trực tiếp từ PreTrainedTokenizerBase vì nó chia sẻ phần lớn giao diện và logic padding/truncation tương tự.

AutoTokenizer Automatically Selects the Correct Tokenizer Class

AutoTokenizer là điểm truy cập được khuyến nghị để tải tokenizer. Nó tự động xác định lớp tokenizer nào cần sử dụng cho một mô hình nhất định và trả về một instance của lớp đó.

python from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(“gpt2”)

Bên dưới bề mặt, AutoTokenizer thực hiện các bước sau:

  1. Tải xuống cấu hình tokenizer. Phương thức from_pretrained lấy tokenizer_config.json từ Hub (hoặc từ thư mục cục bộ).

  2. Xác định loại mô hình. Cấu hình chứa siêu dữ liệu giúp xác định loại mô hình (ví dụ: “gpt2”, “llama”, “bert”).

  3. Tra cứu lớp tokenizer. AutoTokenizer duy trì một ánh xạ gọi là TOKENIZER_MAPPING_NAMES ánh xạ các loại mô hình với tên lớp tokenizer:

    python TOKENIZER_MAPPING_NAMES = { “gpt2”: “GPT2Tokenizer”, “llama”: “LlamaTokenizer”, “bert”: “BertTokenizer”, … }

  4. Khởi tạo lớp chính xác. AutoTokenizer nhập lớp tokenizer phù hợp và gọi phương thức from_pretrained của nó.

  5. Trả về tokenizer đã cấu hình. Bạn nhận được một tokenizer dành riêng cho mô hình được cấu hình đầy đủ, sẵn sàng để sử dụng.

Lợi ích của AutoTokenizer là bạn không cần biết mô hình sử dụng lớp tokenizer nào. Cho dù mô hình sử dụng LlamaTokenizer, GPT2Tokenizer hay BertTokenizer, cùng một lệnh gọi AutoTokenizer.from_pretrained("model-name") đều hoạt động.

Hệ thống tokenizer trong transformers tạo thành một kiến trúc phân lớp:

Layer Component Responsibility
Entry Point AutoTokenizer Tự động chọn và khởi tạo lớp tokenizer chính xác
Model-Specific LlamaTokenizer, GPT2Tokenizer, v.v. Cấu hình backend với kiến trúc chuẩn hóa, tiền xử lý, v.v., token đặc biệt và cài đặt dành riêng cho mô hình
Backend TokenizersBackend, PythonBackend, SentencePieceBackend Thực hiện tokenization thực tế bằng cách sử dụng engine cụ thể
Base PreTrainedTokenizerBase Định nghĩa giao diện chung và chức năng được chia sẻ
Engine tokenizers (Rust), SentencePiece, Pure Python Thực hiện tokenization thô

v5 Separates Tokenizer Architecture from Trained Vocab

Thay đổi quan trọng nhất trong Transformers v5 là sự thay đổi triết lý trong cách định nghĩa tokenizer. Tokenizer hiện hoạt động như nn.Module của PyTorch: trước tiên bạn định nghĩa kiến trúc, sau đó điền vào nó các tham số đã học.

The problem with v4: tokenizers were opaque and tightly coupled

Trong v4, tokenizer là những hộp đen gắn liền với các tệp checkpoint đã được huấn luyện trước. Nếu bạn tải LlamaTokenizerFast, bạn không thể dễ dàng trả lời các câu hỏi cơ bản về nó:

  • Nó là BPE hay Unigram?
  • Nó chuẩn hóa văn bản như thế nào?
  • Nó sử dụng chiến lược tiền xử lý nào?
  • Các token đặc biệt là gì và vị trí của chúng ở đâu?

Phương thức __init__ không cung cấp bất kỳ gợi ý nào. Bạn phải đào sâu vào các tệp được serialize hoặc tài liệu bên ngoài để hiểu tokenizer thực sự làm gì.

python

LlamaTokenizerFast như trong transformers v4

V4 cũng duy trì hai triển khai song song cho mỗi mô hình:

  1. một tokenizer Python “chậm” (LlamaTokenizer kế thừa từ PreTrainedTokenizer) và
  2. một tokenizer “nhanh” dựa trên Rust (LlamaTokenizerFast kế thừa từ PreTrainedTokenizerFast).

Điều này có nghĩa là:

  • Hai tệp cho mỗi mô hình (ví dụ: tokenization_llama.pytokenization_llama_fast.py)
  • Sao chép mã trên hàng trăm mô hình
  • Sự khác biệt về hành vi giữa phiên bản chậm và nhanh, dẫn đến các lỗi tinh vi
  • Bộ kiểm thử ngày càng tăng dành riêng cho việc xác minh rằng các tokenizer chậm và nhanh tạo ra kết quả giống hệt nhau
  • Sự nhầm lẫn của người dùng về việc nên sử dụng tokenizer nào và khi nào

Quan trọng nhất, bạn không thể tạo một kiến trúc tokenizer trống. Nếu bạn muốn huấn luyện một tokenizer kiểu LLaMA trên dữ liệu dành riêng cho miền của mình, sẽ không có cách rõ ràng nào để khởi tạo một tokenizer LLaMA “trống” và điền vào đó bộ từ vựng và các quy tắc hợp nhất của bạn. Tokenizer chỉ tồn tại dưới dạng các checkpoint đã tải, không phải dưới dạng các mẫu có thể cấu hình.

The v5 solution: architecture and parameters are now separate

V5 coi kiến trúc tokenizer (normalizer, pre-tokenizer, loại mô hình, post-processor, decoder) là riêng biệt với các tham số đã được huấn luyện (bộ từ vựng, quy tắc hợp nhất). Điều này phản ánh cách PyTorch tách kiến trúc mô hình khỏi trọng số đã học.

Với nn.Module, bạn định nghĩa các lớp trước:

python from torch import nn

model = nn.Sequential( nn.Embedding(vocab_size, embed_dim), nn.Linear(embed_dim, hidden_dim), )

Kiến trúc đã được định nghĩa; trọng số được khởi tạo ngẫu nhiên hoặc tải sau

Tokenizer v5 tuân theo cùng một mẫu:

python from transformers import LlamaTokenizer

Khởi tạo tokenizer trống

tokenizer = LlamaTokenizer()

Huấn luyện trên dữ liệu của riêng bạn để điền vào bộ từ vựng và quy tắc hợp nhất

tokenizer.train(files=[“my_corpus.txt”])

Lớp tokenizer hiện khai báo rõ ràng cấu trúc của nó. Nhìn vào LlamaTokenizer trong v5, bạn có thể thấy ngay:

  • Nó sử dụng BPE làm loại mô hình tokenization của nó
  • Nó có thể thêm một tiền tố khoảng trắng trước văn bản
  • Các token đặc biệt của nó ( unk, bos, eos) nằm ở các vị trí bộ từ vựng cụ thể
  • không chuẩn hóa văn bản đầu vào
  • LlamaTokenizer như trong transformers v5

Sự minh bạch này là không thể có trong v4, nơi thông tin tương tự được chôn trong các tệp được serialize.

V5 hợp nhất hệ thống hai tệp thành một tệp duy nhất cho mỗi mô hình. LlamaTokenizer hiện kế thừa từ TokenizersBackend, gói gọn tokenizer dựa trên Rust đã từng được hiển thị dưới dạng triển khai “nhanh” và hiện là mặc định.

Triển khai Python “chậm” trước đây nằm rõ ràng phía sau PythonBackend, và SentencePieceBackend vẫn dành cho các mô hình yêu cầu nó, nhưng tokenization dựa trên Rust là mặc định được ưu tiên.

Thay đổi này loại bỏ:

  • Mã trùng lặp giữa các triển khai chậm/nhanh
  • Quy ước đặt tên khó hiểu Tokenizer so với TokenizerFast
  • Bộ kiểm thử dành riêng để kiểm tra sự tương đương chậm-nhanh

Người dùng hiện có một điểm vào rõ ràng. Người dùng nâng cao cần tùy chỉnh vẫn có thể truy cập các thành phần cấp thấp hơn, nhưng thư viện không còn buộc mọi người phải điều hướng hai triển khai song song nữa.

You can now train model specific tokenizers from scratch

Giả sử bạn muốn một tokenizer hoạt động giống hệt như của LLaMA – cùng một chuẩn hóa, cùng một tiền xử lý, cùng một loại mô hình BPE – nhưng được huấn luyện trên một kho ngữ liệu dành riêng cho miền (văn bản y tế, tài liệu pháp lý, một ngôn ngữ mới). Trong v4, điều này đòi hỏi phải xây dựng lại thủ công quy trình tokenizer từ các nguyên tắc cơ bản của thư viện tokenizers cấp thấp. Trong v5, bạn có thể khởi tạo kiến trúc trực tiếp và gọi train:

python from transformers import LlamaTokenizer from datasets import load_dataset

Khởi tạo tokenizer trống

tokenizer = LlamaTokenizer()

dataset = load_dataset(“wikitext”, “wikitext-2-raw-v1”, split=“train”)

def get_training_corpus(): batch = 1000 for i in range(0, len(dataset), batch): yield dataset[i : i + batch][“text”]

trained_tokenizer = tokenizer.train_new_from_iterator( text_iterator=get_training_corpus(), vocab_size=32000, length=len(dataset), show_progress=True, )

trained_tokenizer.push_to_hub(“my_custom_tokenizer”)

tokenizer = LlamaTokenizer.from_pretrained(“my_custom_tokenizer”)

Tokenizer kết quả sẽ có bộ từ vựng và quy tắc hợp nhất tùy chỉnh của bạn, nhưng sẽ xử lý văn bản giống như cách tokenizer LLaMA tiêu chuẩn sẽ làm với cùng xử lý khoảng trắng, cùng quy ước token đặc biệt, cùng hành vi giải mã.

Aspect V4 V5
Files per model Two (tokenization_X.py, tokenization_X_fast.py) One (tokenization_X.py)
Default backend Split between Python and Rust Rust (TokenizersBackend) preferred
Architecture visibility Hidden in serialized files Explicit in class definition
Training from scratch Required manual pipeline construction tokenizer.train(files=[...])
Component inspection Difficult, undocumented Direct properties (tokenizer.normalizer, etc.)
Parent classes PreTrainedTokenizer, PreTrainedTokenizerFast TokenizersBackend (or SentencePieceBackend, PythonBackend)

Sự chuyển đổi từ “tokenizer như các checkpoint đã tải” sang “tokenizer như các kiến trúc có thể cấu hình” làm cho thư viện trở nên mô-đun hơn, minh bạch hơn và phù hợp hơn với cách các chuyên gia nghĩ về việc xây dựng hệ thống ML.

Summary

Transformers v5 mang lại ba cải tiến cho tokenization:

  1. Một tệp cho mỗi mô hình thay vì các triển khai chậm/nhanh riêng biệt
  2. Kiến trúc hiển thị để bạn có thể kiểm tra normalizer, pre-tokenizer và decoder
  3. Các mẫu có thể huấn luyện cho phép bạn tạo các tokenizer tùy chỉnh phù hợp với thiết kế của bất kỳ mô hình nào

Lớp wrapper giữa tokenizers và Transformers vẫn rất cần thiết. Nó bổ sung nhận biết mô hình, độ dài ngữ cảnh, mẫu chat, token đặc biệt mà tokenization thô không cung cấp. V5 chỉ làm cho lớp đó rõ ràng hơn và có thể tùy chỉnh hơn.

Nếu bạn muốn tìm hiểu thêm về tokenization, đây là một số tài nguyên:

Recommended for You

Chuyển đổi AI trong dịch vụ tài chính- 5 yếu tố dự báo thành công vào năm 2026

Chuyển đổi AI trong dịch vụ tài chính- 5 yếu tố dự báo thành công vào năm 2026

Các doanh nghiệp dịch vụ tài chính đang tích cực áp dụng AI dựa trên tác nhân, với các Công ty Tiên phong dẫn đầu công cuộc chuyển đổi. Dưới đây là năm yếu tố dự báo quan trọng sẽ tạo nên sự khác biệt cho các nhà lãnh đạo vào năm 2026.

Codex đang mã hóa nguồn mở các mô hình AI

Codex đang mã hóa nguồn mở các mô hình AI

Codex đang mã hóa nguồn mở các mô hình AI