Почему люди большие языковые модели до сих пор галлюцинируют? Всё дело в токенах. И да — к робототехнике это имеет прямое отношение 👁
В основе больших языковых моделей (БЯМ или по-английски Large Language Model, LLM) лежит нейросеть, обученная на огромном массиве различных текстов или знаковых последовательностей. Каждый такой текст модель разбивает на токены — кусочки информации, с которыми ей удобно работать. Токены могут быть целыми словами, знаками препинания, символами и цифрами, даже частями слов.
❗️Термин «токен» пришел в искусственный интеллект из теории компиляторов. Токен в компиляторе — дискретная синтаксическая единица, создаваемая лексером. Например, ключевое слово, идентификатор, оператор. Это слово подразумевает дискретность, четкость границ и атомарность.
🔜 Современный ИИ унаследовал как сам термин, так и его значение. Токены теперь являются единицей обучения, логического вывода и ценообразования. Контекстное окно моделей состоит из n токенов. А стоимость логического вывода составляет x долларов за миллион токенов. Благодаря словарному запасу токены воспринимаются как естественные атомы языковой обработки.
И действительно, ещё совсем недавно я объяснял принципы работы БЯМ примерно так:
Слово «вездеход» длинное, его можно поделить на два токена: «везде» и «ход». Важно понимать, что на выходе БЯМ не сочиняет тексты, а лишь умеет довольно точно предсказывать, какой токен появится следующим после некоторого набора других токенов. Скажем, у нас есть ряд: «”По” - “рель” - “сам” - “ехал” - “паро”…». Нейросети требуется сгенерировать следующий токен — часть слова. Имеющиеся варианты: «ним», «ход», «воз», то есть — «пароним», «пароход», «паровоз».
Во время обучения модель «узнала», что если токену «паро» предшествуют «рель» и «сам», вероятность следующего токена оказаться «ним» — 0,5%, «ход» — 4,5%, а «воз» — 95%. Создав таким образом распределение вероятностей токенов, она выбирает самый статистически частый вариант.
‼️ Так вот, это не так. «Токен» в современных БЯМ — это артефакт кодирования в виде пары байтов: строка символов, которая достаточно часто встречается в обучающих данных, чтобы заслужить собственное представление. Процедура создания токенов носит статистический, а не лингвистический характер.
👀 Сами по себе токены не являются единицами языка. Это единицы сжатия, оптимизированные для эффективного представления, а не для выполнения каких-либо функций, которые люди ассоциируют со словами или морфемами, как в примере выше.
〰️〰️ Вот почему модели ведут себя странно на границах токенов. Им сложно подсчитать количество букв в слове, потому что слово может быть одним токеном. Им сложно работать с символами, потому что они никогда не воспринимали символы как единое целое. Они разбивают числа на части, которые не имеют математического смысла.
👁 Поэтому правильнее их называть не «токенами», а «единицами сжатия» или «фрагментами кодирования». И именно проблемы бессмысленного — с точки зрения человека — разделения как раз и приводят к галлюцинациям моделей и сбоям поведения роботов.
Словно дежавю, ошибка Матрицы в момент склейки двух токенов реальности при вторжении Агентов…