sentencepiece
bởi firecrawl
Bộ tách từ không phụ thuộc ngôn ngữ, xử lý văn bản dưới dạng Unicode thô. Hỗ tr
npx skills add https://github.com/firecrawl/ai-research-skills --skill sentencepieceSentencePiece - Language-Independent Tokenization
Unsupervised tokenizer that works on raw text without language-specific preprocessing.
When to use SentencePiece
Use SentencePiece when:
- Building multilingual models (no language-specific rules)
- Working with CJK languages (Chinese, Japanese, Korean)
- Need reproducible tokenization (deterministic vocabulary)
- Want to train on raw text (no pre-tokenization needed)
- Require lightweight deployment (6MB memory, 50k sentences/sec)
Performance:
- Speed: 50,000 sentences/sec
- Memory: ~6MB for loaded model
- Languages: All (language-independent)
Use alternatives instead:
- HuggingFace Tokenizers: Faster training, more flexibility
- tiktoken: OpenAI models (GPT-3.5/4)
- BERT WordPiece: English-centric tasks
Quick start
Installation
# Python
pip install sentencepiece
# C++ (requires CMake)
git clone https://github.com/google/sentencepiece.git
cd sentencepiece
mkdir build && cd build
cmake .. && make -j $(nproc)
sudo make install
Train model
# Command-line (BPE with 8000 vocab)
spm_train --input=data.txt --model_prefix=m --vocab_size=8000 --model_type=bpe
# Python API
import sentencepiece as spm
spm.SentencePieceTrainer.train(
input='data.txt',
model_prefix='m',
vocab_size=8000,
model_type='bpe'
)
Training time: ~1-2 minutes for 100MB corpus
Encode and decode
import sentencepiece as spm
# Load model
sp = spm.SentencePieceProcessor(model_file='m.model')
# Encode to pieces
pieces = sp.encode('This is a test', out_type=str)
print(pieces) # ['▁This', '▁is', '▁a', '▁test']
# Encode to IDs
ids = sp.encode('This is a test', out_type=int)
print(ids) # [284, 47, 11, 1243]
# Decode
text = sp.decode(ids)
print(text) # "This is a test"
Language-independent design
Whitespace as symbol (▁)
text = "Hello world"
pieces = sp.encode(text, out_type=str)
print(pieces) # ['▁Hello', '▁world']
# Decode preserves spaces
decoded = sp.decode_pieces(pieces)
print(decoded) # "Hello world"
Key principle: Treat text as raw Unicode, whitespace = ▁ (meta symbol)
Tokenization algorithms
BPE (Byte-Pair Encoding)
spm.SentencePieceTrainer.train(
input='data.txt',
model_prefix='bpe_model',
vocab_size=16000,
model_type='bpe'
)
Used by: mBART
Unigram (default)
spm.SentencePieceTrainer.train(
input='data.txt',
model_prefix='unigram_model',
vocab_size=8000,
model_type='unigram'
)
Used by: T5, ALBERT, XLNet
Training configuration
Essential parameters
spm.SentencePieceTrainer.train(
input='corpus.txt',
model_prefix='m',
vocab_size=32000,
model_type='unigram',
character_coverage=0.9995, # 1.0 for CJK
user_defined_symbols=['[SEP]', '[CLS]'],
unk_piece='<unk>',
num_threads=16
)
Character coverage
| Language Type | Coverage | Rationale |
|---|---|---|
| English | 0.9995 | Most common chars |
| CJK (Chinese) | 1.0 | All characters needed |
| Multilingual | 0.9995 | Balance |
Encoding options
Subword regularization
# Sample different tokenizations
for _ in range(3):
pieces = sp.encode('tokenization', out_type=str, enable_sampling=True, alpha=0.1)
print(pieces)
# Output (different each time):
# ['▁token', 'ization']
# ['▁tok', 'en', 'ization']
Use case: Data augmentation for robustness.
Common patterns
T5-style training
spm.SentencePieceTrainer.train(
input='c4_corpus.txt',
model_prefix='t5',
vocab_size=32000,
model_type='unigram',
user_defined_symbols=[f'<extra_id_{i}>' for i in range(100)],
unk_id=2,
eos_id=1,
pad_id=0
)
Integration with transformers
from transformers import T5Tokenizer
# T5 uses SentencePiece internally
tokenizer = T5Tokenizer.from_pretrained('t5-base')
inputs = tokenizer('translate English to French: Hello', return_tensors='pt')
Performance benchmarks
Training speed
| Corpus | BPE (16k) | Unigram (8k) |
|---|---|---|
| 100 MB | 1-2 min | 3-4 min |
| 1 GB | 10-15 min | 30-40 min |
Tokenization speed
- SentencePiece: 50,000 sentences/sec
- HF Tokenizers: 200,000 sentences/sec (4× faster)
Supported models
T5 family: t5-base, t5-large (32k vocab, Unigram)
ALBERT: albert-base-v2 (30k vocab, Unigram)
XLNet: xlnet-base-cased (32k vocab, Unigram)
mBART: facebook/mbart-large-50 (250k vocab, BPE)
References
- Training Guide - Detailed options, corpus preparation
- Algorithms - BPE vs Unigram, subword regularization
Resources
- GitHub: https://github.com/google/sentencepiece ⭐ 10,000+
- Paper: https://arxiv.org/abs/1808.06226 (EMNLP 2018)
- Version: 0.2.0+
Thêm skills từ firecrawl
oracle
firecrawl
Các phương pháp hay nhất khi sử dụng CLI oracle (gộp lời nhắc + tệp, engine, phiên và các mẫu đính kèm tệp).
official
firecrawl-monitor
firecrawl
Phát hiện khi nội dung trên một trang web thay đổi và nhận thông báo qua webhook hoặc email — không cần cron job, trình thu thập dữ liệu hay tập lệnh diff. Sử dụng kỹ năng này bất cứ khi nào người dùng muốn theo dõi thay đổi trên một trang, theo dõi giá của đối thủ cạnh tranh, cảnh báo về tin tuyển dụng hoặc bài đăng blog mới, giám sát trang tài liệu/thay đổi/trạng thái, hoặc nói "giám sát", "theo dõi", "cảnh báo tôi khi", "thông báo khi X thay đổi", "nhắn tôi nếu", "gửi email cho tôi khi", hoặc "gửi webhook khi". Một bộ đánh giá AI tích hợp sẽ lọc ra
officialweb-scrapingresearch
firecrawl-deep-research
firecrawl
Thực hiện nghiên cứu sâu đa nguồn với Firecrawl. Sử dụng khi người dùng yêu cầu nghiên cứu một chủ đề, so sánh các góc nhìn, tạo bản tóm tắt có nguồn, điều tra câu hỏi kỹ thuật hoặc thị trường, hoặc tổng hợp bằng chứng từ web từ nhiều nguồn.
officialresearchweb-scraping
firecrawl-research-papers
firecrawl
Tìm kiếm và tổng hợp các bài báo nghiên cứu, sách trắng, tệp PDF, báo cáo kỹ thuật và nguồn học thuật với Firecrawl. Sử dụng khi người dùng muốn một bài tổng quan tài liệu, tóm tắt bài báo, bức tranh nghiên cứu, hoặc tổng hợp có nguồn từ các tệp PDF và ấn phẩm học thuật/ngành.
officialresearchweb-scraping
firecrawl-market-research
firecrawl
Trích xuất các chỉ số thị trường, tài chính, thu nhập, ngành và công ty với Firecrawl. Sử dụng khi người dùng yêu cầu nghiên cứu thị trường, xu hướng ngành, dữ liệu công ty đại chúng, so sánh tài chính, nghiên cứu thu nhập hoặc báo cáo thị trường có cấu trúc.
officialresearchweb-scraping
firecrawl-website-design-clone
firecrawl
Trích xuất hệ thống thiết kế của bất kỳ trang web nào thành tệp DESIGN.md sẵn sàng cho agent bằng cách sử dụng bằng chứng thu thập từ Firecrawl. Sử dụng khi người dùng muốn lấy màu sắc, phông chữ, khoảng cách, thành phần, mẫu bố cục hoặc hướng dẫn thương hiệu/giao diện từ một trang web để các agent AI có thể tạo trang web mới, sao chép giao diện hoặc xây dựng các trang lấy cảm hứng từ thiết kế đó.
officialdesignweb-scraping
firecrawl-knowledge-base
firecrawl
Xây dựng cơ sở tri thức từ nội dung web với Firecrawl. Dùng cho tài liệu tham khảo cục bộ, các đoạn dữ liệu sẵn sàng cho RAG, tập dữ liệu tinh chỉnh, bản sao tài liệu, kho ngữ liệu chủ đề, hoặc markdown sẵn sàng cho LLM được tổ chức từ các nguồn web.
officialweb-scrapingresearch
firecrawl-lead-research
firecrawl
Tạo bản tóm tắt thông tin khách hàng tiềm năng trước cuộc họp với Firecrawl. Sử dụng khi người dùng cần nghiên cứu công ty, nghiên cứu cá nhân, tin tức gần đây, điểm thảo luận, điểm khó khăn hoặc chuẩn bị tiếp cận trước cuộc gọi bán hàng, cuộc họp đối tác, cuộc trò chuyện với nhà đầu tư hoặc phỏng vấn khách hàng.
officialresearchweb-scraping