Giới thiệu Tiny BPE Trainer
Hầu hết các mô hình NLP hiện đại ngày nay, từ GPT đến RoBERTa, đều dựa vào mã hóa từ phụ bằng Mã hóa cặp byte (BPE). Nhưng nếu bạn muốn tự huấn luyện vốn từ vựng của mình bằng C++ thuần túy thì sao?
Hãy làm quen với Tiny BPE Trainer - một trình huấn luyện BPE cực nhanh, chỉ tập trung vào tiêu đề, được viết bằng C++ 17/20 hiện đại, không phụ thuộc, hỗ trợ UTF-8 đầy đủ và đầu ra tương thích với HuggingFace (vocab.txt
, merges.txt
).
Tại sao lại là một trình huấn luyện BPE khác?
Bởi vì các tùy chọn hiện có thường:
- Chỉ dành cho Python, với các phụ thuộc thời gian chạy lớn (Rust, Protobuf, v.v.)
- Không dễ nhúng vào các ứng dụng C++
- Không tập trung vào tốc độ, tính đơn giản hoặc sử dụng đa nền tảng
Tiny BPE Trainer:
- Chỉ dành cho tiêu đề
- Đa nền tảng (Linux, Windows, macOS)
- Tương thích với HuggingFace
- Và nó kết hợp hoàn hảo với dự án khác của tôi: Modern Text Tokenizer
Các tính năng cốt lõi
- Đào tạo BPE đầy đủ từ tập dữ liệu văn bản thuần túy hoặc JSONL
- Hỗ trợ CLI và API C++ – lý tưởng cho việc tạo công cụ hoặc nhúng
- Đầu ra tương thích với HuggingFace (
vocab.txt
,merges.txt
) - An toàn với UTF-8 – xử lý biểu tượng cảm xúc, đa ngôn ngữ tập lệnh, ký tự đặc biệt
- Có thể cấu hình – chữ thường, tách dấu câu, tần suất tối thiểu, v.v.
- Chế độ Demo – kiểm tra mọi thứ bằng lệnh một dòng
Demo
1./Tiny-BPE-Trainer --demo
Điều này tạo ra một kho dữ liệu tổng hợp, huấn luyện từ vựng, in số liệu thống kê và chạy mã hóa — tất cả chỉ trong vài giây. Tuyệt vời cho các bài kiểm tra CI và smoke.
Cách huấn luyện một Tokenizer BPE
Xây dựng nó
1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
Huấn luyện trên một ngữ liệu
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer
Hoặc từ JSONL:
1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000
Mã hóa văn bản
1./Tiny-BPE-Trainer --test "Xin chào thế giới! Đây là một bài kiểm tra."
Hoạt động liền mạch với Modern Text Tokenizer
Sau khi được đào tạo, bạn có thể sử dụng từ vựng tùy chỉnh của mình trực tiếp trong [Modern Text Tokenizer] của tôi (https://github.com/Mecanik/Modern-Text-Tokenizer) :
1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");
Điều này cung cấp cho bạn một đường ống phân tích cú pháp hoàn toàn bằng C++, không phụ thuộc vào thời gian chạy.
Sử dụng Bộ dữ liệu Thực
Bạn có thể dễ dàng tạo tập dữ liệu bằng bộ dữ liệu HuggingFace:
1from datasets import load_dataset
2
3dataset = load_dataset("imdb", split="train")
4with open("corpus.txt", "w", encoding="utf-8") as f:
5 for x in dataset:
6 f.write(x["text"].strip().replace("\n", " ") + "\n")
Sau đó đào tạo:
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer
Điểm chuẩn
1Đã xử lý: 33 triệu ký tự
2Số từ duy nhất: 106 nghìn
3Kích thước từ vựng: 32000
4Thời gian đào tạo: ~30 phút (Ryzen 9, -O3)
Ngay cả trên các tệp ngữ liệu lớn (IMDB, WikiText), Tiny BPE Trainer vẫn hoạt động hiệu quả và có thể dự đoán được — và tạo ra các từ vựng tương thích với HuggingFace, SentencePiece và các bộ mã hóa C++ của riêng bạn.
Trường hợp sử dụng
- Đào tạo bộ mã hóa tùy chỉnh cho các chương trình LLM và bộ chuyển đổi
- NLP trên thiết bị khi Python không khả dụng
- Xây dựng bộ tiền xử lý hiệu suất cao
- Đào tạo các từ vựng chuyên ngành (pháp lý, y tế, mã)
Hãy thử ngay
1git clone https://github.com/Mecanik/Tiny-BPE-Trainer
2cd Tiny-BPE-Trainer
3g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
4./Tiny-BPE-Trainer --demo
Xem tệp README đầy đủ trên GitHub để biết các tùy chọn nâng cao, cờ CLI và mẹo tích hợp:
Được xây dựng với ❤️ dành cho cộng đồng NLP và C++.
Nếu bạn thích, hãy đánh dấu sao trên GitHub , sử dụng trong các dự án của bạn hoặc đóng góp!
Bình luận