Токен — это единица текста, которая намеренно сегментирована для эффективной обработки большой языковой моделью. Этими единицами могут быть слова или любой другой подмножество языка — части слов, сочетания слов или знаки пунктуации.
Токенизация — это процесс преобразования частей языка в биты данных, которые можно использовать в программе, а токенизатор — это алгоритм или функция, которая выполняет этот процесс, т. е. берет язык и преобразует его в эти пригодные для использования биты данных.
Упрощая: токенизация – это конвертирование слов в цифры, с которыми компьютер уже может работать как с цифрами, производя любые заданные математические операции.
LLM работают с числовыми представлениями объектов. Слова и текст преобразуются в векторные вложения (эмбеддинги). Для этого модели должны сопоставить слова с числами. Присваивать каждому слову, n-грамме или шинглу собственный номер неэффективно, поэтому нужно уменьшить количество этих объектов, взяв части слов (или другие последовательности) и преобразовав их в токены.
Как слова преобразуются в токены
Токен — это не фиксированный объект (ни слово, ни буква), а единица, которую модель использует для обработки текста.
Большинство современных LLM используют субсловарное токенизирование (subword tokenization), например, Byte-Pair Encoding (BPE) или его варианты.
Слова могут делиться на токены. Если слово встречается часто (например, “the”, “cat”), оно может быть одним токеном. Если слово редкое (например, “antidisestablishmentarianism”), оно будет разбито на несколько субсловарных токенов (например, “anti”, “dis”, “establish”, “ment”, “arian”, “ism”).
Знаки препинания (запятые, точки, скобки) обычно являются отдельными токенами.
Пробелы могут быть включены в токен (обычно в начале токена).
Для среднестатистического текста на английском языке (включая служебные слова, пробелы и пунктуацию) часто получается, что 1000 токенов кодируют примерно 750 слов.
Для русского языка и других языков со сложной морфологией (множество окончаний и приставок) это соотношение может быть ниже (больше токенов на слово). Русские слова длиннее и имеют больше морфем. Это означает, что для кодирования одного русского слова модель может чаще использовать 2 или даже 3 субсловарных токена, тогда как для английского слова может хватить одного. В русском языке 1 токен может кодировать меньше, чем 4/5 слова, то есть 1000 токенов могут кодировать меньше 700 слов.
Где соотношение ломается (для всех языков):
Код или числа. Если вы подаете модели программный код, JSON или длинные последовательности чисел, соотношение резко меняется. Символы, скобки и операторы могут стать отдельными токенами, и 1 токен может представлять всего 1-2 символа.
Очень редкие слова: длинное, редкое слово (неологизм, научный термин) может быть разбито на множество токенов.
Как ещё LLM используют токены
Токены также являются полезной формой измерения. Размер текста, который LLM может обрабатывать и генерировать, измеряется в токенах. Кроме того, операционные расходы LLM прямо пропорциональны количеству обрабатываемых токенов — чем меньше токенов, тем ниже стоимость, и наоборот.
В постоянных усилиях по улучшению и оптимизации методов токенизации в разных моделях больших языков используются разные методы токенизации. Некоторые токенизаторы зависят от контекста и поэтому различаются в зависимости от использования текста. LLM от Google, BERT, полагается на такую токенизацию.
Использование токенов — важный шаг в рабочем процессе LLM и часто включает в себя нечто большее, чем просто сегментирование текста. Скорее, используются различные методы токенизации (по крайней мере частично), чтобы помочь различить и выделить основные лингвистические структуры.