Alterna · учебный материал
12.5 Большой словарь и короткая последовательность
Больше кусочков в словаре может сократить число токенов, но увеличивает таблицу представлений и число выходных оценок.
Что в этом материале
- Экономия в одном месте стоит ресурсов в другом
Содержание и основные понятия
На предыдущей странице: разбить и восстановить текст.
Больше кусочков в словаре может сократить число токенов, но увеличивает таблицу представлений и число выходных оценок.
Разбиение задаётся конкретным словарём и правилами. Байт, символ, слово и токен не обязаны совпадать. Полученный номер — адрес, а не числовой смысл слова.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Экономия в одном месте стоит ресурсов в другом
ПослеMуспешных merges наш vocabulary содержит256+Mtokens. Частые byte-последовательности получают короткое представление в IDs. На новом тексте длина может уменьшиться слабее, чем на training corpus; это зависит от содержания и языка.
При vocabularyV и embedding widthd матрица E занимаетVdпараметров. Независимый LM head добавляет ещёdV, часто такжеVbias. Поэтому больший словарь делает входную/выходную таблицы дороже. Зато более короткая sequence уменьшает число attention-пар n².
Если длина последовательности уменьшилась вдвое, плотная attention-матрица имеет вчетверо меньше ячеек. Но вся стоимость Transformer не равна n²: проекции и FFN тоже требуют операций, а LM head зависит отV. Нельзя выбирать tokenizer по одному коэффициенту compression.
Эксперимент.
Меняйте requested merges0..24 при фиксированном corpus и query. Сравните actual merges, vocabulary size, bytes count и token count. Алгоритм может остановиться раньше requested budget; это не ошибка. Если query состоит из невстречавшихся комбинаций, byte tokens останутся длинной последовательностью.
Граница.
Полученные tokens не обязаны быть морфемами или словами. Частые пробелы с буквами могут сливаться, а редкие буквы — оставаться разделёнными на bytes. Эта реализация не содержит language-specific pre-tokenizer и не претендует на оптимальный tokenizer для русского языка.
V,d,n=256,4,12
assert V*d==1024
assert n*n==144
assert (n//2)**2==36
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Больше строк/кандидатов означает больше параметров входной/выходной таблицы.
У разных словарей разные правила. Как этот вопрос продолжает полученный результат?
Python-примеры главы 12
Академическая база →