Токенизация
Материал из MachineLearning.
| Строка 1: | Строка 1: | ||
| - | {{well|Статья | + | {{well|Статья объединена из материалов страниц [[Токенизация]] и [[Токенизация текста]]. Исходные тексты написаны с использованием LLM '''Claude Opus 4.8''' и '''GPT-5.6 Sol Hight''' и проверены участниками [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] и [[Участник:Aleksandra Ivanova|Aleksandra Ivanova]].}} |
{{TOCright}} | {{TOCright}} | ||
| - | '''Токениза́ция''' (англ. ''tokenization'') в | + | '''Токениза́ция''' (англ. ''tokenization'') — преобразование текста в упорядоченную последовательность элементов, которые модель обрабатывает как отдельные единицы. Такие элементы называют '''токенами'''. Токеном может быть слово, часть слова, символ, байт или специальное служебное обозначение. |
| - | + | Токенизация определяет размер словаря, длину входной последовательности, вычислительные затраты и способность модели обрабатывать редкие слова, разные языки, числа, программный код и нестандартные символы. [[Большая языковая модель|Языковая модель]] получает не исходную строку, а числовые идентификаторы токенов, поэтому способ разбиения текста непосредственно влияет на её работу. | |
| - | + | ||
| - | + | == Определение == | |
| - | + | Пусть <tex>x</tex> — исходная строка, а <tex>V</tex> — конечный словарь допустимых токенов. Токенизатор задаёт отображение <tex>T(x)=(t_1,t_2,\ldots,t_n),\quad t_i\in V</tex>. Результатом становится последовательность токенов, сохраняющая порядок фрагментов исходного текста. Обратное преобразование называют '''детокенизацией'''. | |
| - | + | ||
| - | + | Число токенов <tex>n</tex> зависит не только от длины строки. На него влияют алгоритм токенизации, размер и состав словаря, язык, правила предварительной обработки и корпус, использованный при построении словаря. Одна и та же фраза может быть представлена несколькими словами, десятками символов или ещё более длинной последовательностью байтов. | |
| - | + | Токенизация не равна морфологическому анализу. Морфологический анализ определяет лемму, часть речи и грамматические признаки слова, тогда как токенизатор устанавливает границы вычислительных единиц. Эти единицы могут совпадать со словами или морфемами, но статистические алгоритмы часто создают фрагменты без самостоятельного лингвистического значения. | |
| - | + | ||
| - | === | + | Разбиение на предложения, изменение регистра, удаление пробелов и нормализация символов Unicode также не относятся к токенизации в строгом смысле. На практике эти операции выполняются в одном конвейере предварительной обработки, поэтому их порядок должен быть одинаковым при обучении и применении модели.<ref>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.</ref> |
| - | ''' | + | |
| + | == Назначение токенизации == | ||
| + | |||
| + | [[Нейронная сеть]] работает с числами, а не с текстовыми строками. Токенизатор разделяет строку на элементы и сопоставляет каждому элементу целочисленный идентификатор из словаря. Затем идентификатор преобразуется в [[Embedding|векторное представление]], которое поступает в модель. | ||
| + | |||
| + | Выбор единицы разбиения определяет соотношение между размером словаря и длиной последовательности. Словарь из целых слов позволяет кодировать текст небольшим числом токенов, но быстро разрастается и плохо обрабатывает новые словоформы. Словарь из символов остаётся компактным, однако последовательности становятся значительно длиннее. Подсловная токенизация занимает промежуточное положение между этими подходами. | ||
| + | |||
| + | == Основные виды токенизации == | ||
| + | |||
| + | === Токенизация по словам === | ||
| + | |||
| + | При словесной токенизации каждому слову соответствует отдельный токен. Такой способ создаёт сравнительно короткие последовательности, а результат легко интерпретируется. | ||
| + | |||
| + | Простое разделение по пробелам и знакам препинания работает только для ограниченного набора текстов. Неоднозначность возникает при обработке дефисов, апострофов, сокращений, дат, адресов, десятичных чисел и составных имён. Строки «Санкт-Петербург», «т. е.», «3,14» и адрес электронной почты нельзя без потери структуры разбивать по каждому небуквенному символу. | ||
| + | |||
| + | В языках с развитым словоизменением словесный словарь быстро увеличивается. Формы «читать», «читаю», «читала» и «прочитанный» могут рассматриваться как независимые токены. Редкие или новые формы отсутствуют в словаре и заменяются специальным токеном неизвестного слова. Эту ситуацию называют проблемой '''out-of-vocabulary''' (OOV). | ||
| + | |||
| + | Словесное разбиение неприменимо как универсальное правило для языков, в которых пробелы не обозначают границы слов. Для китайского, японского и некоторых других языков требуется отдельная сегментация. | ||
| + | |||
| + | === Символьная токенизация === | ||
| + | |||
| + | Символьный токенизатор разделяет строку на отдельные символы. Размер словаря при этом невелик, а новые слова можно представить через уже известные буквы и знаки. Модель получает доступ к структуре написания, окончаниям и повторяющимся буквенным сочетаниям. | ||
| + | |||
| + | Недостаток символьного подхода — длина последовательности. Слово, которое при словесной токенизации занимает одну позицию, превращается в несколько токенов. Модель должна самостоятельно восстанавливать словесную и смысловую структуру из мелких элементов. | ||
| + | |||
| + | Понятие символа неоднозначно. Один видимый знак может быть представлен одной или несколькими кодовыми точками Unicode. Например, буква с диакритическим знаком хранится как единый код либо как сочетание основной буквы и модификатора. Без общей формы Unicode-нормализации визуально одинаковые строки могут получить разные токены. | ||
| + | |||
| + | === Байтовая токенизация === | ||
| + | |||
| + | Байтовая токенизация представляет строку как последовательность байтов, обычно в кодировке UTF-8. Базовый словарь содержит не более 256 значений и способен закодировать любой текст, представимый в выбранной кодировке. | ||
| + | |||
| + | Такой подход устраняет проблему неизвестных символов и устойчив к смешению языков, эмодзи, редким письменностям и ошибкам ввода. Однако символы за пределами ASCII кодируются несколькими байтами. Русский, арабский или китайский текст поэтому образует более длинные последовательности, чем английский текст сопоставимого объёма. | ||
| + | |||
| + | Байтовые модели показывают, что обработка текста возможна без обучаемого подсловного словаря. Основным ограничением становится вычислительная стоимость длинных последовательностей.<ref>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.</ref> | ||
| + | |||
| + | === Подсловная токенизация === | ||
| + | |||
| + | Подсловная токенизация разделяет текст на элементы, которые крупнее символа, но не обязаны совпадать с целым словом. Частотные слова могут храниться в словаре целиком, а редкие и новые формы составляются из нескольких частей. | ||
| + | |||
| + | Подсловное представление ограничивает размер словаря и сокращает число неизвестных слов. В крайнем случае редкая строка может быть разбита на символы или байты. Такой подход стал стандартным для нейронного машинного перевода и современных языковых моделей.<ref>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.</ref> | ||
| + | |||
| + | Подсловные элементы не обязательно совпадают с корнями, приставками или окончаниями. Фрагменты определяются статистикой корпуса, поэтому их лингвистическая интерпретация часто условна. | ||
| + | |||
| + | === Byte Pair Encoding === | ||
| + | |||
| + | '''Byte Pair Encoding''' (BPE) строит словарь снизу вверх. Исходный текст сначала представляется последовательностями базовых символов или байтов. Затем алгоритм находит наиболее частую пару соседних элементов и заменяет её новым токеном. Операция повторяется до достижения заданного размера словаря или числа объединений. | ||
| + | |||
| + | Частотные сочетания постепенно превращаются в крупные элементы. Распространённые слова могут получить собственные токены, тогда как редкие слова продолжают раскладываться на части. | ||
| + | |||
| + | BPE сравнительно прост и хорошо сокращает длину корпуса. Однако частотное объединение не учитывает морфологическую структуру. Алгоритм может создать фрагмент, полезный только внутри нескольких частых слов, или разделить родственные словоформы по-разному. | ||
| + | |||
| + | '''Byte-level BPE''' применяет объединения не к символам, а к байтам UTF-8. Начальный словарь покрывает любой текст, поэтому неизвестные символы отсутствуют. Такой вариант используется в ряде моделей семейства [[Большая языковая модель|GPT]]. | ||
=== WordPiece === | === WordPiece === | ||
| - | |||
| - | + | '''WordPiece''' также строит словарь через объединение элементов, но выбирает кандидатов не только по частоте. Критерий учитывает изменение вероятностного описания обучающего корпуса. При кодировании строки обычно выбирается самый длинный фрагмент, присутствующий в словаре. | |
| - | ''' | + | |
| - | === | + | WordPiece применяется в модели [[BERT]] и связанных с ней архитектурах.<ref>Schuster M., Nakajima K. Japanese and Korean Voice Search // 2012 IEEE International Conference on Acoustics, Speech and Signal Processing. Kyoto: IEEE, 2012. P. 5149–5152.</ref> |
| - | ''' | + | |
| + | === Unigram language model === | ||
| + | |||
| + | '''Unigram language model''' использует обратный порядок построения словаря. Сначала формируется избыточный набор подсловных элементов, после чего из него последовательно удаляются токены, наименее полезные для вероятности корпуса. | ||
| + | |||
| + | Для одной строки могут существовать несколько допустимых вариантов разбиения. При обычном кодировании выбирается наиболее вероятная последовательность. Во время обучения может использоваться случайное разбиение из нескольких возможных вариантов. Такой приём называют '''подсловной регуляризацией''': модель становится менее зависимой от одного фиксированного способа сегментации.<ref>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.</ref> | ||
| + | |||
| + | === SentencePiece === | ||
| + | |||
| + | '''SentencePiece''' — система построения и применения подсловных токенизаторов, поддерживающая BPE и Unigram language model. Она обучается непосредственно на строках и не требует предварительного разделения текста по пробелам. | ||
| + | |||
| + | Пробел рассматривается как обычный символ. Это позволяет восстанавливать исходное разделение и использовать один алгоритм для языков с различными системами письма.<ref>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.</ref> | ||
| + | |||
| + | === Лингвистическая токенизация === | ||
| + | |||
| + | Границы токенов могут определяться морфемами, слогами или другими лингвистическими единицами. Морфемная сегментация явно выделяет корни, приставки и окончания, что полезно для языков с развитым словоизменением и словообразованием. | ||
| + | |||
| + | Такие методы требуют словарей, размеченных корпусов или отдельной морфологической модели. Они хуже переносятся между языками и предметными областями, чем статистические алгоритмы. В универсальных системах поэтому чаще применяются подсловные методы, даже если полученные фрагменты не совпадают с лингвистическими границами. | ||
| + | |||
| + | == Представление токенов в модели == | ||
| + | |||
| + | Каждому элементу словаря присваивается целочисленный идентификатор. Если словарь имеет вид <tex>V={v_0,v_1,\ldots,v_{|V|-1}}</tex>, токен <tex>v_i</tex> передаётся модели как число <tex>i</tex>. Значение идентификатора условно: соседние числа не означают сходства токенов. | ||
| + | |||
| + | Перед обработкой идентификатор преобразуется в плотный вектор. Матрица векторных представлений <tex>E\in\mathbb{R}^{|V|\times d}</tex> содержит отдельную строку для каждого элемента словаря, где <tex>d</tex> — размерность вектора. Эти параметры обучаются вместе с моделью. | ||
| + | |||
| + | Токенизатор и модель образуют связанную систему. Идентификаторы токенов определяют строки матрицы векторных представлений. Изменение порядка элементов словаря без согласованного изменения параметров модели разрушает соответствие между токенами и векторами. | ||
== Специальные токены == | == Специальные токены == | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | + | Помимо элементов исходного текста, словарь обычно содержит служебные токены. Они могут обозначать: | |
| - | * ''' | + | |
| - | + | * начало и конец последовательности; | |
| - | + | * границу между двумя фрагментами текста; | |
| - | + | * замаскированный элемент; | |
| + | * неизвестный элемент; | ||
| + | * позицию заполнения; | ||
| + | * роли участников диалога; | ||
| + | * вызов внешнего инструмента или специальный режим генерации. | ||
| + | |||
| + | В BERT-подобных моделях применяются обозначения ''[CLS]'', ''[SEP]'' и ''[MASK]''. В генеративных моделях используются маркеры начала и конца последовательности, часто обозначаемые как ''<bos>'' и ''<eos>''. | ||
| + | |||
| + | Токен заполнения необходим для объединения последовательностей разной длины в один пакет. Вместе с ним передаётся маска внимания, которая отделяет содержательные позиции от искусственно добавленных. | ||
| + | |||
| + | Для задач, где предсказание связывается с исходным текстом, сохраняются смещения токенов. Они указывают начальную и конечную позицию каждого элемента в строке и позволяют восстановить границы имён, терминов и извлечённых ответов. | ||
| + | |||
| + | == Числовой пример == | ||
| + | |||
| + | Пусть корпус состоит из трёх слов: «кот», «коты» и «котик». Начальный BPE-словарь содержит пять символов: «к», «о», «т», «ы» и «и». До объединений корпус представлен 12 токенами: 3 токена в слове «кот», 4 — в слове «коты» и 5 — в слове «котик». | ||
| + | |||
| + | Пара «к о» встречается во всех трёх словах. После её объединения создаётся токен «ко», а число токенов сокращается с 12 до 9. Следующей частотной парой становится «ко т». После второго объединения появляется токен «кот». | ||
| + | |||
| + | Корпус принимает вид «кот», «кот ы» и «кот и к». Теперь он содержит 6 токенов. Размер словаря увеличился с 5 до 7 за счёт элементов «ко» и «кот», а длина корпуса сократилась в два раза. | ||
| + | |||
| + | Пример отражает основной компромисс токенизации: увеличение словаря позволяет сократить последовательность, но требует хранения дополнительных векторных представлений. | ||
| + | |||
| + | == Области применения == | ||
| + | |||
| + | В поисковых системах токенизация определяет единицы индексирования и сопоставления запросов с документами. Ошибка в границах может отделить значимую часть термина или объединить несвязанные элементы. | ||
| + | |||
| + | В классификации текстов токены используются для определения темы, тональности, токсичности и спама. В машинном переводе от сегментации зависит обработка редких слов, имён и морфологических форм. В распознавании именованных сущностей токенизатор задаёт позиции, которым модель присваивает метки. | ||
| + | |||
| + | Диалоговые и генеративные модели предсказывают следующий токен, а не следующее слово. В токенах измеряются размер контекстного окна, длина запроса и объём сгенерированного ответа. Одинаковые по смыслу тексты на разных языках могут занимать разное число позиций из-за различий в составе словаря. | ||
| + | |||
| + | При анализе программного кода токенами становятся ключевые слова, операторы, идентификаторы либо статистически выделенные фрагменты. В медицинских, юридических и финансовых системах токенизация должна сохранять структуру терминов, сокращений, чисел и формул. | ||
| + | |||
| + | == Влияние токенизации на качество модели == | ||
| + | |||
| + | Размер словаря и длина последовательности связаны обратным соотношением. Крупный словарь позволяет кодировать частотные слова целиком и сокращает вход. Одновременно увеличивается матрица векторных представлений, а редкие токены получают мало обучающих примеров. Малый словарь содержит меньше параметров, но создаёт более длинные последовательности. | ||
| + | |||
| + | Для [[Трансформер|трансформеров]] длина входа особенно важна. Вычислительная сложность стандартного механизма внимания квадратично зависит от числа позиций. Увеличение последовательности с 1000 до 2000 токенов может увеличить объём вычислений внимания приблизительно в четыре раза. | ||
| + | |||
| + | Один из показателей качества токенизатора — '''коэффициент дробления''': <tex>F=\frac{1}{m}\sum_{j=1}^{m}n_j</tex>, где <tex>n_j</tex> — число токенов в <tex>j</tex>-м слове, а <tex>m</tex> — число слов. Высокое значение означает, что слова часто распадаются на множество частей. | ||
| + | |||
| + | Коэффициент дробления отражает эффективность кодирования, но не определяет качество модели. Токенизатор может хорошо сжимать корпус и одновременно создавать фрагменты, неудобные для обучения. Сравнение BPE и Unigram language model показывает, что структура словаря и характер границ влияют на предварительное обучение и последующие задачи.<ref>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.</ref> | ||
| + | |||
| + | Неудачная сегментация разрывает повторяющиеся морфемы, имена, числа и специальные термины. Модель видит связанные формы как разные наборы фрагментов и хуже переносит информацию между ними. | ||
| + | |||
| + | == Особенности токенизации языковых моделей == | ||
| + | |||
| + | Токен не совпадает со словом или символом. Одно слово может быть представлено несколькими токенами, а короткий частотный фрагмент — одним. Пробел также может входить в состав токена. | ||
| + | |||
| + | Это различие объясняет трудности языковых моделей в задачах, требующих точной работы с буквами: подсчёте определённого символа, перестановке букв или развороте строки. Модель получает последовательность подслов, а не непосредственную последовательность графем. | ||
| + | |||
| + | Числа также могут разбиваться на фрагменты разной длины. Близкие числовые значения не обязательно имеют сходное токенное представление. Это затрудняет обучение арифметическим закономерностям. | ||
| + | |||
| + | Программный код содержит идентификаторы, отступы, операторы и повторяющиеся служебные конструкции. Токенизатор, обученный преимущественно на обычном тексте, может представлять код чрезмерно длинными или неустойчивыми последовательностями. | ||
| + | |||
| + | == Неравномерность между языками == | ||
| + | |||
| + | Многоязычный токенизатор не обязательно одинаково эффективно представляет разные языки. Если определённый язык слабо представлен в обучающем корпусе, его слова чаще дробятся на мелкие части. | ||
| + | |||
| + | Более длинное представление увеличивает вычислительную стоимость и уменьшает объём текста, помещающийся в контекстное окно. Поэтому два текста сопоставимого содержания могут занимать разное число токенов в зависимости от языка и письменности. | ||
| + | |||
| + | Неравномерность токенизации влияет не только на скорость, но и на качество модели. Язык, представленный длинными последовательностями, получает меньше содержательного контекста при одинаковом техническом ограничении длины.<ref>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.</ref> | ||
| + | |||
| + | == Типичные ошибки и способы предотвращения == | ||
| + | |||
| + | Наиболее существенная ошибка — обучение токенизатора на корпусе, который не соответствует будущим данным. Словарь, построенный преимущественно на английских новостях, неэффективно представляет русскую морфологию, медицинские термины или программный код. Обучающий корпус должен отражать языки, жанры, письменности и предметные области целевой системы. | ||
| + | |||
| + | Несогласованная нормализация приводит к тому, что визуально одинаковые строки получают разные токены. Причиной становятся регистр, варианты кавычек и дефисов, неразрывные пробелы и формы Unicode. Правила нормализации должны быть детерминированными и одинаковыми на всех этапах обработки. | ||
| + | |||
| + | Механическое разделение по пробелам и пунктуации повреждает даты, адреса, десятичные числа, сокращения, эмодзи и хештеги. Словесные токенизаторы требуют проверяемых правил для таких конструкций. Подсловные методы уменьшают зависимость от ручных исключений, но не гарантируют осмысленного разбиения каждого объекта. | ||
| + | |||
| + | Изменение словаря после обучения модели нарушает соответствие между токенами и параметрами. Добавленный элемент не имеет обученного векторного представления, а перестановка идентификаторов изменяет смысл строк матрицы встраиваний. Версия словаря, правила нормализации и набор специальных токенов должны храниться вместе с моделью. | ||
| + | |||
| + | Незаметное усечение длинных последовательностей может удалить ключевой фрагмент документа. До обучения необходимо исследовать распределение длины текстов в токенах и зафиксировать стратегию обработки: усечение начала, конца, центральной части либо разбиение документа на перекрывающиеся фрагменты. | ||
| + | |||
| + | == Оценка токенизатора == | ||
| + | |||
| + | Токенизатор нельзя оценивать только на корпусе, по которому строился его словарь. Такая проверка показывает способность кодировать уже известное распределение данных, но не устойчивость к новым текстам. | ||
| + | |||
| + | Для независимой оценки используется отдельная выборка, отражающая реальные входные данные. На ней измеряются длина последовательностей, коэффициент дробления, доля неизвестных элементов, корректность детокенизации и сохранение смещений. | ||
| + | |||
| + | Основной критерий — качество конечной модели. Токенизаторы сравниваются при одинаковой архитектуре, объёме обучения и наборе данных. Дополнительно учитываются скорость, потребление памяти и распределение длины между языками и предметными областями. | ||
| + | |||
| + | Независимая оценка отделяет свойства алгоритма от особенностей корпуса, использованного для построения словаря. Без такого разделения низкое число токенов на обучающих данных может быть ошибочно принято за универсальную эффективность. | ||
| + | |||
| + | == Перспективы развития == | ||
| + | |||
| + | Фиксированный словарь остаётся удобным, но жёстким посредником между строкой и моделью. Байтовые и символьные архитектуры устраняют неизвестные элементы и легче работают с несколькими языками, однако создают длинные последовательности. | ||
| + | |||
| + | Один из подходов состоит в построении иерархических моделей, которые начинают с байтов или символов, а затем объединяют их в более крупные блоки. Границы таких блоков могут определяться самой моделью, а не фиксированным словарём. | ||
| + | |||
| + | Другое направление — совместное обучение сегментации и основной нейронной сети. Современный токенизатор обычно строится до обучения модели и не учитывает её ошибку. Контекстно-зависимая сегментация способна выбирать разные разбиения одной строки в зависимости от окружения и задачи. | ||
| + | |||
| + | Для многоязычных моделей важна равномерность представления. Токенизатор, который кодирует один язык значительно длиннее другого, увеличивает стоимость его обработки и уменьшает полезный контекст. Поэтому оценка всё чаще включает не только сжатие, но и качество прикладных задач, устойчивость к шуму, вычислительную эффективность и различия между языками. | ||
== Связь с другими понятиями == | == Связь с другими понятиями == | ||
| - | После токенизации каждый | + | |
| + | После токенизации каждый идентификатор преобразуется в [[Embedding|векторное представление]]. С этими векторами работают модели [[Дистрибутивная семантика|дистрибутивной семантики]], рекуррентные нейронные сети и [[Трансформер|трансформеры]]. | ||
| + | |||
| + | Токенизация задаёт набор элементов, через который модель воспринимает текст. Ошибки на этом этапе влияют на все последующие операции: построение представлений, обучение механизма внимания, классификацию, перевод и генерацию. | ||
== См. также == | == См. также == | ||
| + | |||
| + | * [[Обработка естественного языка]] | ||
* [[Большая языковая модель]] | * [[Большая языковая модель]] | ||
| - | * [[Embedding|Векторное представление | + | * [[Embedding|Векторное представление]] |
* [[Трансформер]] | * [[Трансформер]] | ||
* [[BERT]] | * [[BERT]] | ||
| - | * [[ | + | * [[Контекстное окно]] |
| + | * [[Дистрибутивная семантика]] | ||
| + | |||
| + | == Примечания == | ||
| + | |||
| + | <references /> | ||
== Литература == | == Литература == | ||
| - | |||
| - | |||
| - | |||
| + | * 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. | ||
| + | * Schuster M., Nakajima K. Japanese and Korean Voice Search // 2012 IEEE International Conference on Acoustics, Speech and Signal Processing. Kyoto: IEEE, 2012. P. 5149–5152. | ||
| + | * 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. | ||
[[Категория:Машинное обучение]] | [[Категория:Машинное обучение]] | ||
[[Категория:Анализ текстов]] | [[Категория:Анализ текстов]] | ||
Текущая версия
| | Статья объединена из материалов страниц Токенизация и Токенизация текста. Исходные тексты написаны с использованием LLM Claude Opus 4.8 и GPT-5.6 Sol Hight и проверены участниками Iaroslav Lyakhov и Aleksandra Ivanova. |
Токениза́ция (англ. tokenization) — преобразование текста в упорядоченную последовательность элементов, которые модель обрабатывает как отдельные единицы. Такие элементы называют токенами. Токеном может быть слово, часть слова, символ, байт или специальное служебное обозначение.
Токенизация определяет размер словаря, длину входной последовательности, вычислительные затраты и способность модели обрабатывать редкие слова, разные языки, числа, программный код и нестандартные символы. Языковая модель получает не исходную строку, а числовые идентификаторы токенов, поэтому способ разбиения текста непосредственно влияет на её работу.
Определение
Пусть — исходная строка, а
— конечный словарь допустимых токенов. Токенизатор задаёт отображение
. Результатом становится последовательность токенов, сохраняющая порядок фрагментов исходного текста. Обратное преобразование называют детокенизацией.
Число токенов зависит не только от длины строки. На него влияют алгоритм токенизации, размер и состав словаря, язык, правила предварительной обработки и корпус, использованный при построении словаря. Одна и та же фраза может быть представлена несколькими словами, десятками символов или ещё более длинной последовательностью байтов.
Токенизация не равна морфологическому анализу. Морфологический анализ определяет лемму, часть речи и грамматические признаки слова, тогда как токенизатор устанавливает границы вычислительных единиц. Эти единицы могут совпадать со словами или морфемами, но статистические алгоритмы часто создают фрагменты без самостоятельного лингвистического значения.
Разбиение на предложения, изменение регистра, удаление пробелов и нормализация символов Unicode также не относятся к токенизации в строгом смысле. На практике эти операции выполняются в одном конвейере предварительной обработки, поэтому их порядок должен быть одинаковым при обучении и применении модели.[1]
Назначение токенизации
Нейронная сеть работает с числами, а не с текстовыми строками. Токенизатор разделяет строку на элементы и сопоставляет каждому элементу целочисленный идентификатор из словаря. Затем идентификатор преобразуется в векторное представление, которое поступает в модель.
Выбор единицы разбиения определяет соотношение между размером словаря и длиной последовательности. Словарь из целых слов позволяет кодировать текст небольшим числом токенов, но быстро разрастается и плохо обрабатывает новые словоформы. Словарь из символов остаётся компактным, однако последовательности становятся значительно длиннее. Подсловная токенизация занимает промежуточное положение между этими подходами.
Основные виды токенизации
Токенизация по словам
При словесной токенизации каждому слову соответствует отдельный токен. Такой способ создаёт сравнительно короткие последовательности, а результат легко интерпретируется.
Простое разделение по пробелам и знакам препинания работает только для ограниченного набора текстов. Неоднозначность возникает при обработке дефисов, апострофов, сокращений, дат, адресов, десятичных чисел и составных имён. Строки «Санкт-Петербург», «т. е.», «3,14» и адрес электронной почты нельзя без потери структуры разбивать по каждому небуквенному символу.
В языках с развитым словоизменением словесный словарь быстро увеличивается. Формы «читать», «читаю», «читала» и «прочитанный» могут рассматриваться как независимые токены. Редкие или новые формы отсутствуют в словаре и заменяются специальным токеном неизвестного слова. Эту ситуацию называют проблемой out-of-vocabulary (OOV).
Словесное разбиение неприменимо как универсальное правило для языков, в которых пробелы не обозначают границы слов. Для китайского, японского и некоторых других языков требуется отдельная сегментация.
Символьная токенизация
Символьный токенизатор разделяет строку на отдельные символы. Размер словаря при этом невелик, а новые слова можно представить через уже известные буквы и знаки. Модель получает доступ к структуре написания, окончаниям и повторяющимся буквенным сочетаниям.
Недостаток символьного подхода — длина последовательности. Слово, которое при словесной токенизации занимает одну позицию, превращается в несколько токенов. Модель должна самостоятельно восстанавливать словесную и смысловую структуру из мелких элементов.
Понятие символа неоднозначно. Один видимый знак может быть представлен одной или несколькими кодовыми точками Unicode. Например, буква с диакритическим знаком хранится как единый код либо как сочетание основной буквы и модификатора. Без общей формы Unicode-нормализации визуально одинаковые строки могут получить разные токены.
Байтовая токенизация
Байтовая токенизация представляет строку как последовательность байтов, обычно в кодировке UTF-8. Базовый словарь содержит не более 256 значений и способен закодировать любой текст, представимый в выбранной кодировке.
Такой подход устраняет проблему неизвестных символов и устойчив к смешению языков, эмодзи, редким письменностям и ошибкам ввода. Однако символы за пределами ASCII кодируются несколькими байтами. Русский, арабский или китайский текст поэтому образует более длинные последовательности, чем английский текст сопоставимого объёма.
Байтовые модели показывают, что обработка текста возможна без обучаемого подсловного словаря. Основным ограничением становится вычислительная стоимость длинных последовательностей.[1]
Подсловная токенизация
Подсловная токенизация разделяет текст на элементы, которые крупнее символа, но не обязаны совпадать с целым словом. Частотные слова могут храниться в словаре целиком, а редкие и новые формы составляются из нескольких частей.
Подсловное представление ограничивает размер словаря и сокращает число неизвестных слов. В крайнем случае редкая строка может быть разбита на символы или байты. Такой подход стал стандартным для нейронного машинного перевода и современных языковых моделей.[1]
Подсловные элементы не обязательно совпадают с корнями, приставками или окончаниями. Фрагменты определяются статистикой корпуса, поэтому их лингвистическая интерпретация часто условна.
Byte Pair Encoding
Byte Pair Encoding (BPE) строит словарь снизу вверх. Исходный текст сначала представляется последовательностями базовых символов или байтов. Затем алгоритм находит наиболее частую пару соседних элементов и заменяет её новым токеном. Операция повторяется до достижения заданного размера словаря или числа объединений.
Частотные сочетания постепенно превращаются в крупные элементы. Распространённые слова могут получить собственные токены, тогда как редкие слова продолжают раскладываться на части.
BPE сравнительно прост и хорошо сокращает длину корпуса. Однако частотное объединение не учитывает морфологическую структуру. Алгоритм может создать фрагмент, полезный только внутри нескольких частых слов, или разделить родственные словоформы по-разному.
Byte-level BPE применяет объединения не к символам, а к байтам UTF-8. Начальный словарь покрывает любой текст, поэтому неизвестные символы отсутствуют. Такой вариант используется в ряде моделей семейства GPT.
WordPiece
WordPiece также строит словарь через объединение элементов, но выбирает кандидатов не только по частоте. Критерий учитывает изменение вероятностного описания обучающего корпуса. При кодировании строки обычно выбирается самый длинный фрагмент, присутствующий в словаре.
WordPiece применяется в модели BERT и связанных с ней архитектурах.[1]
Unigram language model
Unigram language model использует обратный порядок построения словаря. Сначала формируется избыточный набор подсловных элементов, после чего из него последовательно удаляются токены, наименее полезные для вероятности корпуса.
Для одной строки могут существовать несколько допустимых вариантов разбиения. При обычном кодировании выбирается наиболее вероятная последовательность. Во время обучения может использоваться случайное разбиение из нескольких возможных вариантов. Такой приём называют подсловной регуляризацией: модель становится менее зависимой от одного фиксированного способа сегментации.[1]
SentencePiece
SentencePiece — система построения и применения подсловных токенизаторов, поддерживающая BPE и Unigram language model. Она обучается непосредственно на строках и не требует предварительного разделения текста по пробелам.
Пробел рассматривается как обычный символ. Это позволяет восстанавливать исходное разделение и использовать один алгоритм для языков с различными системами письма.[1]
Лингвистическая токенизация
Границы токенов могут определяться морфемами, слогами или другими лингвистическими единицами. Морфемная сегментация явно выделяет корни, приставки и окончания, что полезно для языков с развитым словоизменением и словообразованием.
Такие методы требуют словарей, размеченных корпусов или отдельной морфологической модели. Они хуже переносятся между языками и предметными областями, чем статистические алгоритмы. В универсальных системах поэтому чаще применяются подсловные методы, даже если полученные фрагменты не совпадают с лингвистическими границами.
Представление токенов в модели
Каждому элементу словаря присваивается целочисленный идентификатор. Если словарь имеет вид , токен
передаётся модели как число
. Значение идентификатора условно: соседние числа не означают сходства токенов.
Перед обработкой идентификатор преобразуется в плотный вектор. Матрица векторных представлений содержит отдельную строку для каждого элемента словаря, где
— размерность вектора. Эти параметры обучаются вместе с моделью.
Токенизатор и модель образуют связанную систему. Идентификаторы токенов определяют строки матрицы векторных представлений. Изменение порядка элементов словаря без согласованного изменения параметров модели разрушает соответствие между токенами и векторами.
Специальные токены
Помимо элементов исходного текста, словарь обычно содержит служебные токены. Они могут обозначать:
- начало и конец последовательности;
- границу между двумя фрагментами текста;
- замаскированный элемент;
- неизвестный элемент;
- позицию заполнения;
- роли участников диалога;
- вызов внешнего инструмента или специальный режим генерации.
В BERT-подобных моделях применяются обозначения [CLS], [SEP] и [MASK]. В генеративных моделях используются маркеры начала и конца последовательности, часто обозначаемые как <bos> и <eos>.
Токен заполнения необходим для объединения последовательностей разной длины в один пакет. Вместе с ним передаётся маска внимания, которая отделяет содержательные позиции от искусственно добавленных.
Для задач, где предсказание связывается с исходным текстом, сохраняются смещения токенов. Они указывают начальную и конечную позицию каждого элемента в строке и позволяют восстановить границы имён, терминов и извлечённых ответов.
Числовой пример
Пусть корпус состоит из трёх слов: «кот», «коты» и «котик». Начальный BPE-словарь содержит пять символов: «к», «о», «т», «ы» и «и». До объединений корпус представлен 12 токенами: 3 токена в слове «кот», 4 — в слове «коты» и 5 — в слове «котик».
Пара «к о» встречается во всех трёх словах. После её объединения создаётся токен «ко», а число токенов сокращается с 12 до 9. Следующей частотной парой становится «ко т». После второго объединения появляется токен «кот».
Корпус принимает вид «кот», «кот ы» и «кот и к». Теперь он содержит 6 токенов. Размер словаря увеличился с 5 до 7 за счёт элементов «ко» и «кот», а длина корпуса сократилась в два раза.
Пример отражает основной компромисс токенизации: увеличение словаря позволяет сократить последовательность, но требует хранения дополнительных векторных представлений.
Области применения
В поисковых системах токенизация определяет единицы индексирования и сопоставления запросов с документами. Ошибка в границах может отделить значимую часть термина или объединить несвязанные элементы.
В классификации текстов токены используются для определения темы, тональности, токсичности и спама. В машинном переводе от сегментации зависит обработка редких слов, имён и морфологических форм. В распознавании именованных сущностей токенизатор задаёт позиции, которым модель присваивает метки.
Диалоговые и генеративные модели предсказывают следующий токен, а не следующее слово. В токенах измеряются размер контекстного окна, длина запроса и объём сгенерированного ответа. Одинаковые по смыслу тексты на разных языках могут занимать разное число позиций из-за различий в составе словаря.
При анализе программного кода токенами становятся ключевые слова, операторы, идентификаторы либо статистически выделенные фрагменты. В медицинских, юридических и финансовых системах токенизация должна сохранять структуру терминов, сокращений, чисел и формул.
Влияние токенизации на качество модели
Размер словаря и длина последовательности связаны обратным соотношением. Крупный словарь позволяет кодировать частотные слова целиком и сокращает вход. Одновременно увеличивается матрица векторных представлений, а редкие токены получают мало обучающих примеров. Малый словарь содержит меньше параметров, но создаёт более длинные последовательности.
Для трансформеров длина входа особенно важна. Вычислительная сложность стандартного механизма внимания квадратично зависит от числа позиций. Увеличение последовательности с 1000 до 2000 токенов может увеличить объём вычислений внимания приблизительно в четыре раза.
Один из показателей качества токенизатора — коэффициент дробления: , где
— число токенов в
-м слове, а
— число слов. Высокое значение означает, что слова часто распадаются на множество частей.
Коэффициент дробления отражает эффективность кодирования, но не определяет качество модели. Токенизатор может хорошо сжимать корпус и одновременно создавать фрагменты, неудобные для обучения. Сравнение BPE и Unigram language model показывает, что структура словаря и характер границ влияют на предварительное обучение и последующие задачи.[1]
Неудачная сегментация разрывает повторяющиеся морфемы, имена, числа и специальные термины. Модель видит связанные формы как разные наборы фрагментов и хуже переносит информацию между ними.
Особенности токенизации языковых моделей
Токен не совпадает со словом или символом. Одно слово может быть представлено несколькими токенами, а короткий частотный фрагмент — одним. Пробел также может входить в состав токена.
Это различие объясняет трудности языковых моделей в задачах, требующих точной работы с буквами: подсчёте определённого символа, перестановке букв или развороте строки. Модель получает последовательность подслов, а не непосредственную последовательность графем.
Числа также могут разбиваться на фрагменты разной длины. Близкие числовые значения не обязательно имеют сходное токенное представление. Это затрудняет обучение арифметическим закономерностям.
Программный код содержит идентификаторы, отступы, операторы и повторяющиеся служебные конструкции. Токенизатор, обученный преимущественно на обычном тексте, может представлять код чрезмерно длинными или неустойчивыми последовательностями.
Неравномерность между языками
Многоязычный токенизатор не обязательно одинаково эффективно представляет разные языки. Если определённый язык слабо представлен в обучающем корпусе, его слова чаще дробятся на мелкие части.
Более длинное представление увеличивает вычислительную стоимость и уменьшает объём текста, помещающийся в контекстное окно. Поэтому два текста сопоставимого содержания могут занимать разное число токенов в зависимости от языка и письменности.
Неравномерность токенизации влияет не только на скорость, но и на качество модели. Язык, представленный длинными последовательностями, получает меньше содержательного контекста при одинаковом техническом ограничении длины.[1]
Типичные ошибки и способы предотвращения
Наиболее существенная ошибка — обучение токенизатора на корпусе, который не соответствует будущим данным. Словарь, построенный преимущественно на английских новостях, неэффективно представляет русскую морфологию, медицинские термины или программный код. Обучающий корпус должен отражать языки, жанры, письменности и предметные области целевой системы.
Несогласованная нормализация приводит к тому, что визуально одинаковые строки получают разные токены. Причиной становятся регистр, варианты кавычек и дефисов, неразрывные пробелы и формы Unicode. Правила нормализации должны быть детерминированными и одинаковыми на всех этапах обработки.
Механическое разделение по пробелам и пунктуации повреждает даты, адреса, десятичные числа, сокращения, эмодзи и хештеги. Словесные токенизаторы требуют проверяемых правил для таких конструкций. Подсловные методы уменьшают зависимость от ручных исключений, но не гарантируют осмысленного разбиения каждого объекта.
Изменение словаря после обучения модели нарушает соответствие между токенами и параметрами. Добавленный элемент не имеет обученного векторного представления, а перестановка идентификаторов изменяет смысл строк матрицы встраиваний. Версия словаря, правила нормализации и набор специальных токенов должны храниться вместе с моделью.
Незаметное усечение длинных последовательностей может удалить ключевой фрагмент документа. До обучения необходимо исследовать распределение длины текстов в токенах и зафиксировать стратегию обработки: усечение начала, конца, центральной части либо разбиение документа на перекрывающиеся фрагменты.
Оценка токенизатора
Токенизатор нельзя оценивать только на корпусе, по которому строился его словарь. Такая проверка показывает способность кодировать уже известное распределение данных, но не устойчивость к новым текстам.
Для независимой оценки используется отдельная выборка, отражающая реальные входные данные. На ней измеряются длина последовательностей, коэффициент дробления, доля неизвестных элементов, корректность детокенизации и сохранение смещений.
Основной критерий — качество конечной модели. Токенизаторы сравниваются при одинаковой архитектуре, объёме обучения и наборе данных. Дополнительно учитываются скорость, потребление памяти и распределение длины между языками и предметными областями.
Независимая оценка отделяет свойства алгоритма от особенностей корпуса, использованного для построения словаря. Без такого разделения низкое число токенов на обучающих данных может быть ошибочно принято за универсальную эффективность.
Перспективы развития
Фиксированный словарь остаётся удобным, но жёстким посредником между строкой и моделью. Байтовые и символьные архитектуры устраняют неизвестные элементы и легче работают с несколькими языками, однако создают длинные последовательности.
Один из подходов состоит в построении иерархических моделей, которые начинают с байтов или символов, а затем объединяют их в более крупные блоки. Границы таких блоков могут определяться самой моделью, а не фиксированным словарём.
Другое направление — совместное обучение сегментации и основной нейронной сети. Современный токенизатор обычно строится до обучения модели и не учитывает её ошибку. Контекстно-зависимая сегментация способна выбирать разные разбиения одной строки в зависимости от окружения и задачи.
Для многоязычных моделей важна равномерность представления. Токенизатор, который кодирует один язык значительно длиннее другого, увеличивает стоимость его обработки и уменьшает полезный контекст. Поэтому оценка всё чаще включает не только сжатие, но и качество прикладных задач, устойчивость к шуму, вычислительную эффективность и различия между языками.
Связь с другими понятиями
После токенизации каждый идентификатор преобразуется в векторное представление. С этими векторами работают модели дистрибутивной семантики, рекуррентные нейронные сети и трансформеры.
Токенизация задаёт набор элементов, через который модель воспринимает текст. Ошибки на этом этапе влияют на все последующие операции: построение представлений, обучение механизма внимания, классификацию, перевод и генерацию.
См. также
- Обработка естественного языка
- Большая языковая модель
- Векторное представление
- Трансформер
- BERT
- Контекстное окно
- Дистрибутивная семантика
Примечания
Литература
- 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.
- Schuster M., Nakajima K. Japanese and Korean Voice Search // 2012 IEEE International Conference on Acoustics, Speech and Signal Processing. Kyoto: IEEE, 2012. P. 5149–5152.
- 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.

