🏠 Главная › user guide › mlops huggingface tokenizers
{/ Эта страница автоматически создается на основе файла SKILL.md навыка с помощью сайта site/scripts/generate-skill-docs.py. Редактируйте исходный код SKILL.md, а не эту страницу. /}
Токенизаторы Huggingface
Быстрые токенизаторы, оптимизированные для исследований и производства. Реализация на основе Rust токенизирует 1 ГБ за <20 секунд. Поддерживает алгоритмы BPE, WordPiece и Unigram. Обучайте пользовательские словари, отслеживайте выравнивание, обрабатывайте заполнение/усечение. Легко интегрируется с трансформерами. Используйте его, когда вам нужна высокопроизводительная токенизация или обучение пользовательскому токенизатору.
Метаданные навыков
Источник
Необязательно — установите с помощью hermesskills installofficial/mlops/huggingface-tokenizers
Ниже приведено полное определение навыка, которое Гермес загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.
Токенизаторы HuggingFace — быстрая токенизация для НЛП
Быстрые, готовые к использованию токенизаторы с производительностью Rust и простотой использования Python.
Когда использовать токенизаторы HuggingFace
Используйте токенизаторы HuggingFace, когда:
- Требуется чрезвычайно быстрая токенизация (<20 секунд на ГБ текста)
- Обучение пользовательским токенизаторам с нуля.
- Хотите отслеживать выравнивание (токен → исходное положение текста)
- Построение производственных конвейеров НЛП
- Необходимость эффективной токенизации крупных корпораций
Производительность:
- Скорость: <20 секунд для токенизации 1 ГБ на ЦП.
- Реализация: ядро Rust с привязками Python/Node.js.
- Эффективность: в 10–100 раз быстрее, чем реализации на чистом Python.
Вместо этого используйте альтернативы:
- SentencePiece: не зависит от языка, используется T5/ALBERT.
- tiktoken: токенизатор BPE OpenAI для моделей GPT.
- Transformers AutoTokenizer: загрузка только предварительно обученных (использует эту библиотеку внутри себя)
Быстрый старт
Установка
# Install tokenizers
pipinstalltokenizers
# With transformers integration
pipinstalltokenizerstransformers
Загрузка предварительно обученного токенизатора
fromtokenizersimportTokenizer# Load from HuggingFace Hubtokenizer=Tokenizer.from_pretrained("bert-base-uncased")# Encode textoutput=tokenizer.encode("Hello, how are you?")print(output.tokens)# ['hello', ',', 'how', 'are', 'you', '?']print(output.ids)# [7592, 1010, 2129, 2024, 2017, 1029]# Decode backtext=tokenizer.decode(output.ids)print(text)# "hello, how are you?"
Обучение пользовательскому токенизатору BPE
fromtokenizersimportTokenizerfromtokenizers.modelsimportBPEfromtokenizers.trainersimportBpeTrainerfromtokenizers.pre_tokenizersimportWhitespace# Initialize tokenizer with BPE modeltokenizer=Tokenizer(BPE(unk_token="[UNK]"))tokenizer.pre_tokenizer=Whitespace()# Configure trainertrainer=BpeTrainer(vocab_size=30000,special_tokens=["[UNK]","[CLS]","[SEP]","[PAD]","[MASK]"],min_frequency=2)# Train on filesfiles=["train.txt","validation.txt"]tokenizer.train(files,trainer)# Savetokenizer.save("my-tokenizer.json")
Время обучения: ~1–2 минуты для корпуса объемом 100 МБ, ~10–20 минут для корпуса 1 ГБ.
Как это работает:
1. Начните со словарного запаса на уровне персонажа.
2. Найдите наиболее часто встречающуюся пару символов.
3. Объединить в новый токен, добавить в словарь
4. Повторяйте до тех пор, пока не будет достигнут размер словарного запаса.
Преимущества:
- Хорошо обрабатывает OOV-слова (разбивается на подслова)
- Гибкий размер словарного запаса
- Подходит для морфологически богатых языков.
Компромиссы:
- Токенизация зависит от порядка слияния
- Может неожиданно разделить общие слова
Слово
Как это работает:
1. Начните со словарного запаса персонажей
2. Пары слияния оценок: частота(пара) / (частота(первая) × частота(вторая))
3. Объедините пару с самым высоким результатом.
4. Повторяйте до тех пор, пока не будет достигнут размер словарного запаса.
Преимущества:
- Отдает приоритет значимым слияниям (высокий балл = семантически связаны)
- Успешно используется в BERT (самые современные результаты)
Компромиссы:
- Неизвестные слова становятся [UNK], если ни одно подслово не совпадает.
- Сохраняет словарный запас, а не объединяет правила (файлы большего размера)
Униграмма
Как это работает:
1. Начните с большого словарного запаса (все подстроки)
2. Вычислить потери для корпуса с текущим словарным запасом.
3. Удаление токенов с минимальным влиянием на потерю
4. Повторяйте до тех пор, пока не будет достигнут размер словарного запаса.
Преимущества:
- Вероятностный (находит наиболее вероятную токенизацию)
- Хорошо работает для языков без границ слов.
- Работает с различными языковыми контекстами.
Компромиссы:
- Вычислительно дорогое обучение
- Больше гиперпараметров для настройки
Конвейер токенизации
Полный конвейер: Нормализация → Предварительная токенизация → Модель → Постобработка
Нормализация
Очистите и стандартизируйте текст:
fromtokenizers.normalizersimportNFD,StripAccents,Lowercase,Sequencetokenizer.normalizer=Sequence([NFD(),# Unicode normalization (decompose)Lowercase(),# Convert to lowercaseStripAccents()# Remove accents])# Input: "Héllo WORLD"# After normalization: "hello world"
fromtokenizers.pre_tokenizersimportWhitespace,Punctuation,Sequence,ByteLevel# Split on whitespace and punctuationtokenizer.pre_tokenizer=Sequence([Whitespace(),Punctuation()])# Input: "Hello, world!"# After pre-tokenization: ["Hello", ",", "world", "!"]
Общие предварительные токенизаторы:
- Whitespace() — разделение на пробелы, табуляцию и новую строку.
- ByteLevel() - разделение на уровне байтов в стиле GPT-2.
- Punctuation() - Изолировать пунктуацию
- Digits(individual_digits=True) - разделить цифры по отдельности
- Metaspace() - Заменить пробелы на (стиль SentencePiece)
Случаи использования:
- Распознавание названного объекта (предсказания карты возвращаются в текст)
- Ответы на вопросы (извлечение интервалов ответов)
- Классификация токенов (выровнять метки по исходным позициям)
Интеграция с трансформерами
Загрузка с помощью AutoTokenizer
fromtransformersimportAutoTokenizer# AutoTokenizer automatically uses fast tokenizerstokenizer=AutoTokenizer.from_pretrained("bert-base-uncased")# Check if using fast tokenizerprint(tokenizer.is_fast)# True# Access underlying tokenizers.Tokenizerfast_tokenizer=tokenizer.backend_tokenizerprint(type(fast_tokenizer))# <class 'tokenizers.Tokenizer'>
Преобразование пользовательского токенизатора в преобразователи
fromtokenizersimportTokenizerfromtransformersimportPreTrainedTokenizerFast# Train custom tokenizertokenizer=Tokenizer(BPE())#... train tokenizer...tokenizer.save("my-tokenizer.json")# Wrap for transformerstransformers_tokenizer=PreTrainedTokenizerFast(tokenizer_file="my-tokenizer.json",unk_token="[UNK]",pad_token="[PAD]",cls_token="[CLS]",sep_token="[SEP]",mask_token="[MASK]")# Use like any transformers tokenizeroutputs=transformers_tokenizer("Hello world",padding=True,truncation=True,max_length=512,return_tensors="pt")
Производительность: обработка 1 ГБ примерно за 10–20 минут.
Включить усечение и дополнение
# Enable truncationtokenizer.enable_truncation(max_length=512)# Enable paddingtokenizer.enable_padding(pad_id=tokenizer.token_to_id("[PAD]"),pad_token="[PAD]",length=512# Fixed length, or None for batch max)# Encode with bothoutput=tokenizer.encode("This is a long sentence that will be truncated...")print(len(output.ids))# 512
Многопроцессорность
fromtokenizersimportTokenizerfrommultiprocessingimportPool# Load tokenizertokenizer=Tokenizer.from_file("tokenizer.json")defencode_batch(texts):returntokenizer.encode_batch(texts)# Process large corpus in parallelwithPool(8)aspool:# Split corpus into chunkschunk_size=1000chunks=[corpus[i:i+chunk_size]foriinrange(0,len(corpus),chunk_size)]# Encode in parallelresults=pool.map(encode_batch,chunks)
Ускорение: 5–8 раз при 8 ядрах
Тесты производительности
Скорость тренировки
Размер корпуса
BPE (30 тысяч слов)
WordPiece (30 КБ)
Униграмма (8k)
10 МБ
15 секунд
18 сек
25 секунд
100 МБ
1,5 мин
2 мин
4 мин
1 ГБ
15 мин
20 мин
40 мин
Аппаратное обеспечение: 16-ядерный процессор, протестировано в английской Википедии.
Скорость токенизации
Реализация
Корпус 1 ГБ
Пропускная способность
Чистый Питон
~20 минут
~50 МБ/мин
HF-токенизаторы
~15 секунд
~4 ГБ/мин
Ускорение
80×
80×
Тест: текст на английском языке, средняя длина предложения 20 слов.
Использование памяти
Задача
Память
Загрузить токенизатор
~10 МБ
Поезд БПЭ (30к словарного запаса)
~200 МБ
Закодируйте 1 млн предложений
~500 МБ
Поддерживаемые модели
Предварительно обученные токенизаторы доступны через from_pretrained():
Семья БЕРТ:
- bert-base-без корпуса, bert-large-cased
- дистильберт-база-без оболочки
- Роберта-база, Роберта-большая
Семейство GPT:
- gpt2, gpt2-средний, gpt2-большой
- дистиллгпт2
Семейство T5:
- t5-маленький, t5-базовый, t5-большой
- google/flan-t5-xxl