Токенизация текста

Материал из MachineLearning.

Версия от 13:16, 13 июля 2026; Aleksandra Ivanova (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Переработанный текст на основе загруженной статьи.

Токенизация текста — разбиение текстовой последовательности на элементы, которые модель способна обработать как отдельные единицы. Такими элементами, или токенами, служат слова, части слов, символы, байты и специальные обозначения. Токенизация определяет не только форму входных данных, но и длину последовательности, размер словаря, вычислительные затраты и способность модели работать с редкими словами, разными языками и нестандартными символами.

Содержание

Определение

Пусть x — строка, а V — конечный словарь токенов. Токенизатор задаёт отображение T(x)=(t_1,t_2,\ldots,t_n),\quad t_i\in V. Результатом становится упорядоченная последовательность, сохраняющая порядок фрагментов исходного текста. Обратное преобразование называют детокенизацией.

Число токенов n не определяется одной лишь длиной строки. Оно зависит от алгоритма, состава словаря, правил нормализации, языка и корпуса, на котором обучался токенизатор. Одна и та же фраза может превратиться в несколько словесных токенов, десятки символов или ещё более длинную последовательность байтов.

Токенизация не равна морфологическому анализу. Морфологический анализ устанавливает лемму, часть речи и грамматические признаки, тогда как токенизатор прежде всего задаёт границы вычислительных единиц. Эти границы иногда совпадают с границами слов или морфем, но статистические методы часто выделяют фрагменты, не имеющие самостоятельного лингвистического значения.

Разбиение на предложения, удаление лишних пробелов, приведение регистра и нормализация Unicode также не входят в токенизацию в строгом смысле. На практике эти операции образуют общий конвейер предварительной обработки, поэтому их порядок должен быть зафиксирован и одинаково применяться при обучении и использовании модели.[1]

Основные виды токенизации

Токенизация по словам

При словесной токенизации каждому слову ставится в соответствие отдельный токен. Такой способ даёт короткие и легко интерпретируемые последовательности. Для простой строки границы можно определить по пробелам и знакам препинания.

Этого правила недостаточно для реальных текстов. Неоднозначность возникает при обработке дефисов, апострофов, сокращений, дат, адресов, десятичных чисел и составных имён. Строки «Санкт-Петербург», «т. е.», «3,14» и адрес электронной почты нельзя без потери структуры разбивать по каждому небуквенному символу.

Словесная токенизация плохо масштабируется на языки с богатой морфологией. Разные падежные, временные и словообразовательные формы создают множество отдельных элементов словаря. Редкая или новая форма может отсутствовать в нём и заменяться специальным токеном неизвестного слова. В китайском и японском письме возникает другая проблема: пробелы обычно не обозначают словесные границы, поэтому требуется отдельная модель сегментации.

Символьная токенизация

Символьный токенизатор разбивает строку на отдельные символы. Размер словаря при этом невелик, а неизвестные слова почти исчезают: новое слово представляется через уже известные буквы и знаки. Модель получает прямой доступ к орфографии, окончаниям и повторяющимся фрагментам написания.

Главный недостаток — длина последовательности. Слово, которое при словесном подходе занимает одну позицию, превращается в несколько символов. Модели приходится восстанавливать словесную и смысловую структуру из более мелких единиц.

Само понятие символа требует уточнения. Видимый знак может состоять из нескольких кодовых точек Unicode. Например, буква с диакритическим знаком хранится как единый код либо как сочетание основной буквы и модификатора. Без единой формы Unicode-нормализации визуально одинаковые строки могут получить разные последовательности токенов.

Байтовая токенизация

Байтовая токенизация представляет текст как последовательность байтов, обычно после кодирования в UTF-8. Базовый словарь содержит не более 256 значений и способен выразить любую строку, доступную в выбранной кодировке.

Такой подход полностью устраняет проблему неизвестных символов и устойчив к смешению языков, эмодзи, ошибкам ввода и редким письменностям. Вместе с тем символы за пределами ASCII кодируются несколькими байтами. Русский, арабский или китайский текст поэтому образует более длинные последовательности, чем английский текст сравнимого объёма.

Байтовые модели показывают, что обязательная зависимость от обучаемого подсловного словаря отсутствует. Ограничение смещается в вычислительную область: длинные последовательности требуют больше памяти и операций.[1]

Подсловная токенизация

Подсловная токенизация делит текст на элементы крупнее символа, но не обязательно совпадающие с целым словом. Частотные слова могут храниться целиком, тогда как редкие и новые формы собираются из нескольких фрагментов. Такой подход ограничивает размер словаря и одновременно избегает массовой замены редких слов неизвестным токеном.

Подсловные методы стали стандартом для нейронного машинного перевода и крупных языковых моделей.[1]

Byte Pair Encoding (BPE) начинает работу с набора базовых символов. Затем алгоритм находит наиболее частую соседнюю пару и заменяет её новым токеном. Операция повторяется до достижения заданного размера словаря или числа объединений. Частотные последовательности постепенно превращаются в крупные элементы, а редкие слова продолжают раскладываться на более мелкие части.

BPE хорошо сжимает корпус и сравнительно прост в реализации. Однако частотное объединение не обязано учитывать морфологию. Алгоритм может отделить приставку от корня, сохранить случайный фрагмент окончания или создать токен, значимый только для нескольких частотных слов.

WordPiece также строит словарь через последовательное объединение элементов, но оценивает кандидатов по их вкладу в вероятностное описание корпуса. При кодировании строки обычно выбирается самый длинный фрагмент, присутствующий в словаре. WordPiece получил распространение в распознавании речи и предварительно обученных языковых моделях.[1]

Unigram language model использует обратную схему. Сначала формируется избыточный набор подслов, после чего из него удаляются элементы, наименее полезные для вероятности обучающего корпуса. Для одной строки может существовать несколько допустимых разбиений. Выбор наиболее вероятного варианта применяется при обычном кодировании, а случайный выбор из нескольких вариантов — как способ регуляризации.[1]

SentencePiece реализует BPE и Unigram language model и обучается непосредственно на строках, не требуя предварительного разбиения по пробелам. Пробел кодируется как обычный символ, что упрощает восстановление исходной строки и позволяет применять один алгоритм к языкам с разными системами письма.[1]

Лингвистическая токенизация

Границы токенов могут задаваться морфемами, слогами или другими лингвистическими единицами. Морфемная сегментация позволяет явно выделять корни, приставки и окончания. Это полезно для языков с развитым словоизменением и словообразованием.

Такие методы требуют словарей, размеченных корпусов или отдельной морфологической модели. Они хуже переносятся между языками и предметными областями, чем статистические алгоритмы. Поэтому в универсальных системах чаще применяются подсловные методы, даже если их разбиения не совпадают с лингвистической структурой.

Представление токенов в модели

Каждому элементу словаря присваивается целочисленный идентификатор. Для словаря V={v_0,v_1,\ldots,v_{|V|-1}} токен v_i передаётся модели как число i. Значение идентификатора условно: соседние числа не означают сходства токенов.

Перед обработкой идентификатор преобразуется в плотный вектор. Матрица векторных представлений E\in\mathbb{R}^{|V|\times d} содержит отдельную строку для каждого элемента словаря, где d — размерность вектора. Эти параметры обучаются вместе с моделью.

Последовательность часто дополняется специальными токенами. Они обозначают начало и конец текста, границу между фрагментами, пропущенную часть или позицию заполнения. Модель также получает маску, указывающую, какие позиции содержат данные, а какие добавлены для выравнивания длины.

Для задач, где предсказание связывается с исходным фрагментом текста, сохраняются смещения токенов. Они указывают начальную и конечную позицию каждого элемента в исходной строке. Без таких смещений сложно корректно восстановить границы имён, терминов и извлечённых ответов.

Токенизатор нельзя заменять независимо от модели. Идентификаторы определяют строки матрицы векторных представлений. Если словарю назначить другой порядок или добавить элементы без изменения параметров, прежние числовые идентификаторы начнут обозначать другие фрагменты текста.

Числовой пример

Пусть корпус состоит из трёх слов: «кот», «коты» и «котик». Начальный BPE-словарь содержит пять символов: «к», «о», «т», «ы» и «и». До объединений корпус записывается как 12 символьных токенов: 3 токена в слове «кот», 4 — в слове «коты» и 5 — в слове «котик».

Пара «к о» встречается во всех трёх словах. После объединения создаётся токен «ко», а число токенов сокращается с 12 до 9. Следующей частотной парой становится «ко т». После второго объединения появляется токен «кот».

Корпус принимает вид «кот», «кот ы» и «кот и к». Теперь он содержит 6 токенов. Размер словаря вырос с 5 до 7 за счёт элементов «ко» и «кот», зато длина последовательности сократилась в два раза. Более крупный словарь уменьшил число входных позиций, но потребовал хранения дополнительных векторных представлений.

Области применения

В поисковых системах токенизация определяет, какие фрагменты документа попадут в индекс и будут сопоставляться с запросом. Ошибка в границах способна отделить значимую часть термина или, наоборот, объединить несвязанные элементы.

В классификации текстов токены используются для определения темы, тональности, токсичности и спама. В машинном переводе от сегментации зависит обработка редких слов, имён и морфологических вариантов. В распознавании именованных сущностей токенизатор задаёт позиции, которым модель присваивает метки.

Диалоговые и генеративные модели предсказывают следующий токен, а не следующее слово. Длина контекстного окна и стоимость обработки также измеряются токенами. Одинаковый объём текста на разных языках может занимать неодинаковое число позиций из-за различий в словаре и способе сегментации.

При анализе программного кода токенами становятся ключевые слова, операторы, идентификаторы либо статистически выделенные фрагменты. В медицинских, юридических и финансовых системах токенизация должна сохранять структуру терминов, сокращений, числовых обозначений и формул.

Влияние токенизации на качество модели

Размер словаря и длина последовательности образуют прямой инженерный компромисс. Крупный словарь позволяет кодировать частотные слова целиком и сокращает вход. Одновременно растёт матрица векторных представлений, а редкие элементы получают мало обучающих примеров. Малый словарь содержит меньше параметров, но создаёт длинные последовательности.

Для трансформерных моделей длина особенно важна. Вычислительная сложность стандартного механизма внимания квадратично зависит от числа позиций. Разбиение одного документа на 2000 токенов вместо 1000 может увеличить объём вычислений внимания примерно в четыре раза.

Один из внутренних показателей качества — коэффициент дробления: F=\frac{1}{m}\sum_{j=1}^{m}n_j, где n_j — число токенов в j-м слове, а m — число слов. Высокое значение означает, что слова часто распадаются на множество частей. Этот показатель отражает эффективность кодирования, но не заменяет оценку модели на целевой задаче.

Неудачная сегментация разрывает повторяющиеся морфемы, имена и специальные термины. Модель видит связанные формы как разные наборы фрагментов и хуже переносит информацию между ними. В многоязычных системах эта проблема распределяется неравномерно: языки, слабо представленные при обучении токенизатора, обычно получают более длинные последовательности и фактически меньший доступный контекст.[1]

Минимальная длина кодирования не гарантирует лучшего результата. Токенизатор способен хорошо сжимать корпус и одновременно создавать фрагменты, неудобные для обучения. Сравнения BPE и Unigram language model показывают, что структура словаря и характер границ влияют на качество предварительного обучения и последующих задач.[1]

Типичные ошибки и способы предотвращения

Наиболее существенная ошибка — обучение токенизатора на корпусе, который не соответствует будущим данным. Словарь, построенный преимущественно на английских новостях, будет неэффективно кодировать русскую морфологию, медицинские термины или программный код. Корпус должен отражать языки, жанры, письменности и предметные области, с которыми будет работать модель.

Несогласованная нормализация создаёт разные последовательности для визуально одинаковых строк. Причиной становятся регистр, варианты кавычек и дефисов, неразрывные пробелы и разные формы Unicode. Правила нормализации должны быть детерминированными и одинаковыми на всех этапах. Изменять регистр или удалять знаки следует только тогда, когда эти различия не несут информации для решаемой задачи.

Механическое разделение по пробелам и пунктуации повреждает даты, адреса, десятичные числа, сокращения, эмодзи и хештеги. Словесные токенизаторы требуют набора проверяемых правил. Подсловные методы уменьшают зависимость от ручных исключений, но не гарантируют осмысленного разбиения каждого специального объекта.

Ещё одна ошибка — изменение словаря после обучения модели. Добавленный токен не имеет обученного векторного представления, а перестановка элементов нарушает соответствие между идентификаторами и параметрами. Версия словаря, правила нормализации и набор специальных токенов должны храниться вместе с моделью.

Незаметное усечение длинных последовательностей может удалить основную часть документа или фрагмент, содержащий целевой ответ. До обучения необходимо исследовать распределение длины в токенах и выбрать явную стратегию: усечение начала, конца, центральной части либо разбиение документа на перекрывающиеся фрагменты.

Качество токенизатора нельзя оценивать только на обучающем корпусе. Нужна независимая выборка, отражающая реальные входные данные. На ней проверяются длина последовательностей, доля неизвестных элементов, корректность детокенизации, сохранение смещений и показатели конечной модели. Такая оценка отделяет свойства токенизатора от случайных особенностей корпуса, по которому строился словарь.

Перспективы развития

Фиксированный словарь остаётся удобным, но жёстким посредником между строкой и моделью. Байтовые и символьные архитектуры устраняют неизвестные элементы и легче работают с несколькими языками, однако создают слишком длинные последовательности. Поэтому перспективны иерархические модели, которые начинают с байтов или символов, а затем динамически объединяют их в более крупные блоки.

Другое направление — совместное обучение сегментации и основной модели. Современный токенизатор обычно оптимизируется до обучения нейронной сети и не учитывает её ошибку. Контекстно-зависимая сегментация способна выбирать разные разбиения одной строки в зависимости от окружения и задачи. Это особенно важно для многозначных фрагментов, имён и специальной терминологии.

Для многоязычных систем центральной становится не только точность, но и равномерность представления. Токенизатор, который кодирует один язык вдвое длиннее другого, не является нейтральным: он увеличивает стоимость обработки и уменьшает полезный контекст. Поэтому оценка всё чаще включает качество прикладных задач, коэффициент дробления, вычислительную стоимость, устойчивость к шуму и различия между языками.

Примечания


Литература

  • Jurafsky D., Martin J. H. Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition. 3rd ed. Draft. Stanford University, 2025.
  • Sennrich R., Haddow B., Birch A. Neural Machine Translation of Rare Words with Subword Units // Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics. Berlin: Association for Computational Linguistics, 2016. P. 1715–1725.
  • Kudo T. Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates // Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics. Melbourne: Association for Computational Linguistics, 2018. P. 66–75.
  • Kudo T., Richardson J. SentencePiece: A Simple and Language Independent Subword Tokenizer and Detokenizer for Neural Text Processing // Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations. Brussels: Association for Computational Linguistics, 2018. P. 66–71.
  • Bostrom K., Durrett G. Byte Pair Encoding Is Suboptimal for Language Model Pretraining // Findings of the Association for Computational Linguistics: EMNLP 2020. Association for Computational Linguistics, 2020. P. 4617–4624.
  • Rust P., Pfeiffer J., Vulić I., Ruder S., Gurevych I. How Good Is Your Tokenizer? On the Monolingual Performance of Multilingual Language Models // Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing. Association for Computational Linguistics, 2021. P. 3118–3135.
  • Xue L., Barua A., Constant N., Al-Rfou R., Narang S., Kale M., Roberts A., Raffel C. ByT5: Towards a Token-Free Future with Pre-trained Byte-to-Byte Models // Transactions of the Association for Computational Linguistics. 2022. Vol. 10. P. 291–306.
Личные инструменты