sentencepiece

Tokenizer independiente del idioma que trata el texto como Unicode sin procesar. Soporta algoritmos BPE y Unigram. Rápido (50k oraciones/segundo), ligero (6MB de memoria),…

npx skills add https://github.com/firecrawl/ai-research-skills --skill sentencepiece

SentencePiece - 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 TypeCoverageRationale
English0.9995Most common chars
CJK (Chinese)1.0All characters needed
Multilingual0.9995Balance

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

CorpusBPE (16k)Unigram (8k)
100 MB1-2 min3-4 min
1 GB10-15 min30-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

Resources

Más skills de firecrawl

oracle
firecrawl
Mejores prácticas para usar la CLI de oracle (prompt + agrupación de archivos, motores, sesiones y patrones de adjuntar archivos).
official
firecrawl-monitor
firecrawl
Detecta cuándo cambia el contenido de un sitio web y recibe notificaciones por webhook o correo electrónico, sin necesidad de cron jobs, scrapers ni scripts de diferencias. Usa esta habilidad cada vez que el usuario quiera rastrear cambios en una página, monitorear precios de la competencia, recibir alertas sobre nuevas ofertas de trabajo o publicaciones de blog, supervisar páginas de documentación/changelog/estado, o diga "monitorear", "vigilar", "rastrear", "alertarme cuando", "notificarme cuando X cambie", "avísame si", "enviarme un correo cuando" o "enviar un webhook cuando". Un juez de IA integrado filtra formato, marcas de tiempo y...
officialweb-scrapingresearch
firecrawl-deep-research
firecrawl
Realizar investigación profunda de múltiples fuentes con Firecrawl. Usar cuando el usuario solicite investigar un tema, comparar perspectivas, producir un informe con fuentes, indagar una pregunta técnica o de mercado, o sintetizar evidencia web de muchas fuentes.
officialresearchweb-scraping
firecrawl-research-papers
firecrawl
Encuentra y sintetiza artículos de investigación, documentos técnicos, PDFs, informes técnicos y fuentes académicas con Firecrawl. Úsalo cuando el usuario quiera una revisión bibliográfica, resumen de artículos, panorama de investigación o síntesis con fuentes de PDFs y publicaciones académicas o de la industria.
officialresearchweb-scraping
firecrawl-market-research
firecrawl
Extrae métricas de mercado, financieras, de ganancias, industriales y de empresas con Firecrawl. Úsalo cuando el usuario solicite investigación de mercado, tendencias de la industria, datos de empresas públicas, comparaciones financieras, investigación de ganancias o informes de mercado estructurados.
officialresearchweb-scraping
firecrawl-website-design-clone
firecrawl
Extrae el sistema de diseño de cualquier sitio web y conviértelo en un DESIGN.md listo para agentes, utilizando evidencia extraída con Firecrawl. Úsalo cuando el usuario quiera colores, fuentes, espaciados, componentes, patrones de diseño o guías de marca/interfaz de un sitio web, para que agentes de IA puedan crear nuevos sitios, clonar una apariencia o construir páginas inspiradas en ese diseño.
officialdesignweb-scraping
firecrawl-knowledge-base
firecrawl
Construye una base de conocimiento a partir de contenido web con Firecrawl. Úsalo para documentación de referencia local, fragmentos listos para RAG, conjuntos de datos para ajuste fino, espejos de documentación, corpus temáticos o markdown listo para LLM organizado desde fuentes web.
officialweb-scrapingresearch
firecrawl-lead-research
firecrawl
Producir resúmenes de inteligencia de prospectos previos a reuniones con Firecrawl. Usar cuando el usuario necesite investigación de empresas, investigación de personas, noticias recientes, puntos de conversación, puntos débiles o preparación para contactos antes de una llamada de ventas, reunión de asociación, conversación con inversores o entrevista con clientes.
officialresearchweb-scraping