Мой блог
Игрок создал рабочий ИИ-чат-бот прямо в чистой Minecraft с помощью командных блоков

Любой, кто провел в Minecraft достаточно времени, наверняка знаком с впечатляющими творениями игрового сообщества. Энтузиасты уже давно создают внутри виртуального мира работающие графические калькуляторы, генераторы QR-кодов и полноценные версии тетриса, используя для этого командные блоки, модификации и колоссальное количество свободного времени. Создание искусственного интеллекта выглядит вполне закономерным следующим шагом, и в этом направлении уже появлялось немало сложных проектов, реализованных на базе редстоуна. Однако пользователь Reddit под ником Objz пошел еще дальше, реализовав полноценную языковую модель исключительно с помощью командных блоков.


Особенности уникальной нейросети в Minecraft
Автор проекта обошелся без каких-либо сторонних модификаций, плагинов или датапаков. По собственному признанию разработчика, работа над этой системой оказалась настоящей головной болью. Созданная языковая модель получилась не слишком масштабной: она располагает 64-мерным пространством вложений, скрытым слоем на 256 нейронов и скромным словарным запасом из 2048 слов. В качестве обучающей выборки использовался корпус диалогов DailyDialog, насчитывающий 11 118 реплик. Игроки могут общаться с виртуальным собеседником, используя встроенную игровую команду «/dialog», а генерируемый ответ поступает постепенно, по одному слову за раз, в точности как у современных коммерческих чат-ботов.




Тем не менее, даже после такого обучения разработчик честно предупреждает, что модель способна лишь поддерживать простую беседу и не отличается выдающимся умом. Она не умеет решать математические задачи и не обладает широкой эрудицией. Но техническое исполнение проекта все равно впечатляет. 445 782 командных блока — именно столько в итоге потребовалось для работы системы — звучит как огромная цифра, пока не станет известно, что без серьезной оптимизации подобная структура потребовала бы буквально миллионов кубов. Изначальная версия модели насчитывала почти 2 миллиона блоков.




Техническая оптимизация и ограничения системы
Обычно веса языковых моделей выражаются числами с плавающей запятой, реализация которых в игре оказалась бы чрезмерно сложной. Чтобы обойти это препятствие, Objz решил использовать для весов исключительно троичные значения: -1, 0 и +1. Встроенная в Minecraft команда «scoreboard» поддерживает умножение и деление, но она оперирует исключительно целыми числами. Применение стандартного подхода потребовало бы постоянного преобразования типов данных, что породило бы множество дополнительных операций.



Изначальная квантизация к трем возможным значениям позволила решить сразу две задачи: сократить количество необходимых команд и уменьшить размер датасета. В результате эквивалент каждой операции умножения с накоплением требует в среднем всего 0,67 команды благодаря обилию нулевых значений. Автор отмечает, что значения не просто округлялись из готовой стандартной модели уже постфактум. Квантизация применялась с самого начала для прямого прохода через модель в процессе обучения, а для обновления базовых весов с плавающей запятой использовался метод сквозного пропуска градиента.




Этот шаг помог снизить показатель перплексии, отражающий вероятность генерации бессмысленного слова в ответной последовательности, с 48,7 до 38,8 после дополнительных этапов оптимизации. Из-за жестких ограничений Minecraft на количество одновременно выполняемых команд языковая модель была разделена на более мелкие группы. Даже при таком подходе на генерацию одного слова в ответ на сервере с частотой 35 тиков в секунду уходит около 1,8 секунды.




Автор подчеркивает, что создание более крупной и умной языковой модели потребовало бы колоссальных вычислительных затрат. Например, система с архитектурой на 135 миллионов параметров оказалась бы в 200 раз масштабнее данного проекта. Тем не менее, эта работа наглядно демонстрирует, как жесткие ограничения способны стимулировать нестандартное инженерное творчество.


Источник: tomshardware.com

