sentencepiece
โดย firecrawl
ตัวแยกคำที่ไม่ขึ้นกับภาษา โดยจัดการข้อความในรูปแบบยูนิโค้ดดิบ รองรับอัลกอริทึม BPE และ Unigram รวดเร็ว (50,000 ประโยค/วินาที) น้ำหนักเบา (หน่วยความจำ 6MB)…
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+
Skills เพิ่มเติมจาก firecrawl
oracle
firecrawl
แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ oracle CLI (การรวม prompt และไฟล์, เอ็นจิน, เซสชัน, และรูปแบบการแนบไฟล์)
official
firecrawl-monitor
firecrawl
ตรวจจับเมื่อเนื้อหาบนเว็บไซต์เปลี่ยนแปลงและรับการแจ้งเตือนทางเว็บฮุคหรืออีเมล — ไม่ต้องใช้ cron jobs, scrapers หรือ diff scripts ใช้สกิลนี้เมื่อผู้ใช้ต้องการติดตามการเปลี่ยนแปลงบนหน้าเว็บ ดูราคาคู่แข่ง แจ้งเตือนเมื่อมีประกาศรับสมัครงานหรือโพสต์บล็อกใหม่ ติดตามหน้าเอกสาร/บันทึกการเปลี่ยนแปลง/สถานะ หรือพูดว่า "มอนิเตอร์" "ดู" "ติดตาม" "แจ้งเตือนฉันเมื่อ" "แจ้งเตือนเมื่อ X เปลี่ยนแปลง" "ส่งข้อความหาฉันถ้า" "ส่งอีเมลถึงฉันเมื่อ" หรือ "ส่งเว็บฮุคเมื่อ" ผู้ตัดสิน AI ในตัวจะกรองการจัดรูปแบบ การประทับเวลา และ...
officialweb-scrapingresearch
firecrawl-deep-research
firecrawl
ดำเนินการวิจัยเชิงลึกจากหลายแหล่งที่มาด้วย Firecrawl ใช้เมื่อผู้ใช้ขอให้ค้นคว้าหัวข้อ เปรียบเทียบมุมมอง จัดทำสรุปข้อมูลพร้อมแหล่งอ้างอิง สอบถามประเด็นทางเทคนิคหรือตลาด หรือสังเคราะห์หลักฐานจากเว็บจากหลายแหล่ง
officialresearchweb-scraping
firecrawl-research-papers
firecrawl
ค้นหาและสังเคราะห์เอกสารวิจัย เอกสารไวท์เปเปอร์ ไฟล์ PDF รายงานทางเทคนิค และแหล่งข้อมูลทางวิชาการด้วย Firecrawl ใช้เมื่อผู้ใช้ต้องการทบทวนวรรณกรรม สรุปเอกสาร ภาพรวมงานวิจัย หรือการสังเคราะห์ที่มีแหล่งอ้างอิงจากไฟล์ PDF และสิ่งพิมพ์ทางวิชาการ/อุตสาหกรรม
officialresearchweb-scraping
firecrawl-market-research
firecrawl
ดึงข้อมูลตลาด การเงิน รายได้ อุตสาหกรรม และเมตริกของบริษัทด้วย Firecrawl ใช้เมื่อผู้ใช้สอบถามเกี่ยวกับการวิจัยตลาด แนวโน้มอุตสาหกรรม ข้อมูลบริษัทมหาชน การเปรียบเทียบทางการเงิน การวิจัยรายได้ หรือรายงานตลาดที่มีโครงสร้าง
officialresearchweb-scraping
firecrawl-website-design-clone
firecrawl
ดึงระบบการออกแบบของเว็บไซต์ใดๆ ออกมาเป็น DESIGN.md ที่พร้อมใช้งานสำหรับเอเจนต์ โดยใช้หลักฐานจากการสืบค้นด้วย Firecrawl ใช้เมื่อผู้ใช้ต้องการสี ฟอนต์ ระยะห่าง คอมโพเนนต์ รูปแบบเลย์เอาต์ หรือคำแนะนำด้านแบรนด์/UI จากเว็บไซต์ เพื่อให้เอเจนต์ AI สามารถสร้างเว็บไซต์ใหม่ เลียนแบบรูปลักษณ์ หรือสร้างหน้าที่ได้รับแรงบันดาลใจจากการออกแบบนั้น
officialdesignweb-scraping
firecrawl-knowledge-base
firecrawl
สร้างฐานความรู้จากเนื้อหาเว็บด้วย Firecrawl ใช้สำหรับเอกสารอ้างอิงในเครื่อง, ชิ้นส่วนที่พร้อมสำหรับ RAG, ชุดข้อมูลสำหรับปรับแต่งละเอียด, กระจกสะท้อนเอกสาร, คลังข้อมูลหัวข้อ, หรือมาร์กดาวน์ที่พร้อมสำหรับ LLM ซึ่งจัดระเบียบจากแหล่งข้อมูลเว็บ
officialweb-scrapingresearch
firecrawl-lead-research
firecrawl
สร้างรายงานสรุปข้อมูลลูกค้าเป้าหมายก่อนการประชุมด้วย Firecrawl ใช้เมื่อผู้ใช้ต้องการค้นหาข้อมูลบริษัท ข้อมูลบุคคล ข่าวล่าสุด ประเด็นพูดคุย จุดเจ็บปวด หรือเตรียมการติดต่อก่อนการโทรขาย การประชุมพันธมิตร การสนทนากับนักลงทุน หรือการสัมภาษณ์ลูกค้า
officialresearchweb-scraping