Как детали складываются в модель

Как детали складываются в модель

За последний месяц у Тернита появилось много технологий с непонятными названиями: TERMAP, TERNIC, TERLUT. По отдельности каждая — инженерная мелочь. Рассказываю, что они дают вместе: что уже работает и что откроется дальше.

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

Что уже работает

Размер. Обычная модель хранит каждый вес дробным числом на 16 бит. У Тернита веса записаны тритами — цифрами −1, 0 и +1. Ядро — часть, которая читает вопрос и пишет ответ, — содержит полтора миллиарда весов и занимает 0,8 ГБ. В обычной записи то же ядро весило бы почти вчетверо больше.

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

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

Память снаружи. Маленькая модель не может помнить весь мир, и пытаться не нужно. Знания лежат в банке — там Википедия и темы, подготовленные людьми, — и в интернете. Счёт ведёт калькулятор. Ядро работает как человек за столом с черновиком:

  • пишет запрос;
  • программа кладёт найденное на доску;
  • ядро выписывает оттуда нужное слово в слово, а программа проверяет, что выписка правда есть в найденном;
  • только потом ядро отвечает.

На вопросы о фактах бот теперь почти всегда сначала ищет, а не вспоминает наугад.

Новые умения — отдельными частями. Обычную модель для нового умения доучивают целиком, и она забывает часть старого. У Тернита новое умение встаёт рядом с ядром отдельной частью — экспертом. Для каждого слова распределитель решает, звать эксперта или нет; если не звать, модель отвечает в точности как голое ядро. Ядро при этом не меняется, а эксперта можно выключить, усилить или переучить.

Как детали складываются в модель

Что это даст дальше

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

Большая модель, выращенная по частям. Ядру не нужно читать весь мир, чтобы его запомнить: факты лежат в банке, поэтому читать ему нужно столько, чтобы понимать язык и рассуждать.

  • Темы и умения добавляются экспертами.
  • Каждый эксперт учится только своему на отдельной карте, потом вливается в общую модель.
  • Само ядро тоже растёт добавками, которые рождаются, ничего не меняя.

Так можно дойти до уровня модели на 4 миллиарда параметров и дальше, не начиная каждый раз с начала и не переучивая всё целиком.

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

Попробовать Тернит: Telegram — @ternitus_bot, MAX — max.ru/id4706100100_bot. Дневник разработки с замерами, удачами и провалами — blog.ternit.ru.

11