💥 Fast State-of-the-Art Tokenizers optimized for Research and Production
Go to file
2024-05-05 04:58:02 +09:00
.github Add rust.yml to build libtokenizers_haskell.* 2021-08-06 08:06:31 +09:00
bindings Revert "Fix SPM conversions" 2021-05-03 20:43:21 -04:00
docs Update doc for Python 0.10.0 2021-01-12 16:47:56 -05:00
nix Change rpath 2021-05-19 00:34:16 +03:00
tokenizers Allow invalid_reference_casting 2024-04-21 14:19:19 +09:00
.gitignore add .stack-work 2021-04-27 17:48:03 -04:00
Cargo.lock Add revision to rayon-cond 2021-05-19 00:34:16 +03:00
Cargo.toml add two targets, one for tokenizers and one for tokenizers-haskell 2021-04-11 11:55:41 -04:00
default.nix add two targets, one for tokenizers and one for tokenizers-haskell 2021-04-11 11:55:41 -04:00
flake.lock Add nix flake 2023-08-22 11:56:51 +09:00
flake.nix Add a overlay 2023-08-22 12:03:38 +09:00
libtokenizers.rb Fix the paths of both libc++ and libiconv 2024-05-05 04:58:02 +09:00
LICENSE Create LICENSE 2020-01-04 23:31:02 -05:00
README.md Actually fix the link to pepy.tech on downloads badge 2021-02-09 21:05:52 -05:00
shell.nix add wordpiece tokenizer 2021-04-12 23:00:49 -04:00



Build GitHub

Provides an implementation of today's most used tokenizers, with a focus on performance and versatility.

Main features:

  • Train new vocabularies and tokenize, using today's most used tokenizers.
  • Extremely fast (both training and tokenization), thanks to the Rust implementation. Takes less than 20 seconds to tokenize a GB of text on a server's CPU.
  • Easy to use, but also extremely versatile.
  • Designed for research and production.
  • Normalization comes with alignments tracking. It's always possible to get the part of the original sentence that corresponds to a given token.
  • Does all the pre-processing: Truncate, Pad, add the special tokens your model needs.

Bindings

We provide bindings to the following languages (more to come!):

Quick example using Python:

Choose your model between Byte-Pair Encoding, WordPiece or Unigram and instantiate a tokenizer:

from tokenizers import Tokenizer
from tokenizers.models import BPE

tokenizer = Tokenizer(BPE())

You can customize how pre-tokenization (e.g., splitting into words) is done:

from tokenizers.pre_tokenizers import Whitespace

tokenizer.pre_tokenizer = Whitespace()

Then training your tokenizer on a set of files just takes two lines of codes:

from tokenizers.trainers import BpeTrainer

trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])
tokenizer.train(files=["wiki.train.raw", "wiki.valid.raw", "wiki.test.raw"], trainer=trainer)

Once your tokenizer is trained, encode any text with just one line:

output = tokenizer.encode("Hello, y'all! How are you 😁 ?")
print(output.tokens)
# ["Hello", ",", "y", "'", "all", "!", "How", "are", "you", "[UNK]", "?"]

Check the python documentation or the python quicktour to learn more!