22 个不稳定版本 (4 个重大更改)
0.19.1 | 2024年4月17日 |
---|---|
0.15.2 | 2024年2月12日 |
0.15.0 | 2023年11月14日 |
0.13.4-rc2 | 2023年5月17日 |
0.12.1 | 2022年4月13日 |
#522 in 解析器实现
8,390 个星标 & 117 个关注者
370KB
7.5K SLoC
Tokenizers
提供当今最常用分词器的实现,重点关注性能和多功能性。
基于Rust实现的绑定。如果您对高级设计感兴趣,可以前往查看。
否则,让我们深入了解!
主要功能
- 使用4个预制的分词器(Bert WordPiece和3种最常见的BPE版本)训练新词汇并进行分词。
- 由于Rust实现,速度极快(包括训练和分词)。在服务器的CPU上对1GB的文本进行分词不到20秒。
- 易于使用,但功能极其强大。
- 专为研究和生产设计。
- 归一化带有对齐跟踪。始终可以获取与给定标记相对应的原始句子部分。
- 执行所有预处理操作:截断、填充、添加模型所需的特殊标记。
安装
使用pip
pip install tokenizers
从源代码安装
要使用此方法,您需要安装Rust
# Install with:
curl https://sh.rustup.rs -sSf | sh -s -- -y
export PATH="$HOME/.cargo/bin:$PATH"
Rust安装后,您可以通过以下方式进行编译
git clone https://github.com/huggingface/tokenizers
cd tokenizers/bindings/python
# Create a virtual env (you can use yours as well)
python -m venv .env
source .env/bin/activate
# Install `tokenizers` in the current virtual env
pip install -e .
从Hub加载预训练的标记器
from tokenizers import Tokenizer
tokenizer = Tokenizer.from_pretrained("bert-base-cased")
使用提供的标记器
我们提供了一些预构建的标记器来覆盖最常见的用例。您可以使用一些 vocab.json
和 merges.txt
文件轻松加载这些中的一个
from tokenizers import CharBPETokenizer
# Initialize a tokenizer
vocab = "./path/to/vocab.json"
merges = "./path/to/merges.txt"
tokenizer = CharBPETokenizer(vocab, merges)
# And then encode:
encoded = tokenizer.encode("I can feel the magic, can you?")
print(encoded.ids)
print(encoded.tokens)
并且您可以像这样简单地训练它们
from tokenizers import CharBPETokenizer
# Initialize a tokenizer
tokenizer = CharBPETokenizer()
# Then train it!
tokenizer.train([ "./path/to/files/1.txt", "./path/to/files/2.txt" ])
# Now, let's use it:
encoded = tokenizer.encode("I can feel the magic, can you?")
# And finally save it somewhere
tokenizer.save("./path/to/directory/my-bpe.tokenizer.json")
提供的标记器
CharBPETokenizer
:原始的BPEByteLevelBPETokenizer
:BPE的字节级别版本SentencePieceBPETokenizer
:与SentencePiece使用的BPE兼容的BPE实现BertWordPieceTokenizer
:著名的Bert标记器,使用WordPiece
所有这些都可以像上面解释的那样使用和训练!
构建自己的
当这些提供的标记器不能给您足够的自由时,您可以构建自己的标记器,通过将所有需要的不同部分组合在一起。您可以查看我们如何实现提供的标记器,并轻松地根据您的需求进行适配。
构建字节级BPE
以下是一个示例,展示如何通过将所有不同的部分组合在一起来构建自己的字节级BPE,并将其保存到单个文件中
from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers, processors
# Initialize a tokenizer
tokenizer = Tokenizer(models.BPE())
# Customize pre-tokenization and decoding
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=True)
tokenizer.decoder = decoders.ByteLevel()
tokenizer.post_processor = processors.ByteLevel(trim_offsets=True)
# And then train
trainer = trainers.BpeTrainer(
vocab_size=20000,
min_frequency=2,
initial_alphabet=pre_tokenizers.ByteLevel.alphabet()
)
tokenizer.train([
"./path/to/dataset/1.txt",
"./path/to/dataset/2.txt",
"./path/to/dataset/3.txt"
], trainer=trainer)
# And Save it
tokenizer.save("byte-level-bpe.tokenizer.json", pretty=True)
现在,当您想使用这个标记器时,就像这样简单
from tokenizers import Tokenizer
tokenizer = Tokenizer.from_file("byte-level-bpe.tokenizer.json")
encoded = tokenizer.encode("I can feel the magic, can you?")
依赖关系
~13–22MB
~344K SLoC