Истории
Zoibana

Как я написал бота-комментатора для TJ. И не умер

История создания Нейро-Илюхера: от телеграм-бота до дерзкого и успешного бота в Аляске.

Материал содержит изображения с замыленной нецензурной и обсценной лексикой, которая может повредить неокрепшей психике. Данный материал не рекомендуется к прочтению лицам, не достигшим 18 лет (в том числе Никите Лихачеву), беременным женщинам и людям с неустойчивой психикой.

У меня есть особенность характера: иногда я должен сам себе доказать, что я что-то смогу. Особенно, если кто-то другой это что-то уже сделал, а я — ещё нет. И я уверен, что сделаю даже лучше. Благодаря этому я двигаюсь вперёд.

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

Еще позже мой друг показал мне свой собственный html-сайт, который он написал своими руками. В груди защекотало знакомое чувство. Через неделю я показал ему свой собственный сайт. С фишками, которых не было у сайта моего друга.

Именно благодаря этому чувству я научился играть на гитаре, писать песни, программировать, готовить, рисовать, фотошопить и многое-многое другое.

И вот месяц назад я сидел в одном телеграм-чате и в груди вновь засвербело знакомое чувство. И причиной этого стал телеграм-бот, которого написал Вадим Краев — «погодный бот».

Я твердо решил сделать своего телеграм-бота. Идея для бота нашлась моментально.

Даже те, кто лишь изредка заходит на ТЖ, так или иначе сталкивались с очень специфичным персонажем – Илюхером. Его манера общения довольна своеобразна, категорична и эпична. Многие его типичные комментарии за много лет стали внутренними мемами на ТЖ.

Все вдруг сложилось: кто-то в чате вдруг вспомнил, как Илюхер триггерится на статьи про Маска, на наркоманов и слово «флешмоб».

«Мой бот будет триггериться на типичные Илюхеровские заскоки». И в качестве сообщений было решено использовать настоящие комменты всех двадцати трёх Илюхеров на tjournal.ru, плюс сообщения Илюхера из телеграм-чатов. Правда, некоторые фразы на определенные действия я всё же придумывал сам, подражая стилю Илюхера.

Для бота я решил попробовать собрать простенькое приложение на PHP из готовых composer-пакетов вместо использования самописных решений и тяжеловесных для такой простой задачи фреймворков.

Пара вечеров за ноутом и тестовая версия готова.

Те, кому не интересна техническая часть, могут сразу пролистать до следующего абзаца. А для интересующихся: алгоритм бота прост — если боту выданы полные права доступа в чате, то каждое сообщение в чате API Telegram присылает моему боту. Бот проходится по списку слов-триггеров и регуляркой ищет совпадения. При совпадении выбирает один из нескольких вариантов ответа и посылает ответ в чат.

Отдельное спасибо Наденьке и Александру Ашкинадзе за первоначальное наполнение бота триггерами.

Всё заработало.

Осталось проверить бота на настоящем чате. Сначала хотел добавить бота в чат Аляски без ведома Илюхера, но оказалось, что кроме него в чат добавить участников никто не может. Или не хочет. Поэтому я написал ему напрямую, и он с удовольствием добавил бота. А параллельно я добавил бота и в другой, более тесный и уютный ТЖ-чат, для тестирования в разных боевых условиях.

За первую неделю я выловил кучу багов, несколько раз менял алгоритм, пока не довел бота до удобоваримого состояния.

И несмотря на то, что в целом большинство участников чатов отнеслись к Илюхер-боту очень позитивно, были и те, кто воспринял идею в штыки и даже уходил из чатов. Таких Илюхер-бот стал нещадно травить.

Бот жил, рос и совершенствовался на протяжении месяца, и я даже успел потерять интерес к нему, пока как-то раз в чате Аляски его не заметил Денис Ширяев, менеджер по продукту ИД «Комитет».

На меня накатила вторая волна «я могу» и я принялся за дело. Благодаря Денису Ширяеву и Илье Чекальскому я оперативно решал все вопросы по слабо документированному API TJ.

Для ТЖ было решено делать расширенную и более умную версию телеграм-бота. Я полностью перестроил архитектуру приложения. С сожалением пришлось убрать из ТЖ-бота несколько триггеров на локальные чатовские мемы, которые не поймут на ТЖ, но в то же время я сильно расширил словарный запас бота – вручную нашёл оставшиеся в живых (не удаленные) старые аккаунты Илюхера, вручную просмотрел, выбрал и сопоставил сотни его комментариев из нескольких тысяч. Выбросил из бота все фразы моего собственного сочинения.

Время поджимало. Быстро протестировали бота на тестовой версии ТЖ и запустили его в Аляску 15 апреля – в день рождения Илюхера.

В качестве иронии аватаркой был выбран отзеркаленный аватар настоящего Илюхера, на котором теперь вместо буквы «И» красовалась буква «N». Денис Ширяев предложил переименовать Илюхер-бота в Нейро-Илюхера и мы запустились.

Бот вызывался кроном (система автоматического запуска скриптов) каждую минуту, он брал последние 5 постов из Аляски, проходился по всем комментариям, пытался стриггериться на них. Если получалось – отвечал ответами на триггер, если нет – писал относительно «универсальные» комментарии.

Сразу после запуска было несколько эпичных багов. Например, Илюхер-бот вдруг стал общаться сам с собой и накомментировал большую ветку.

Очевидные баги были оперативно исправлены и бот начал свою активную комментаторскую деятельность в Аляске.

И хоть он вполне успешно и смешно комментил, уже через пару дней стало очевидно, что словарный запас бота скуден, он плохо распознает содержимое комментариев, очень часто отвечает невпопад и часто повторяется. Поэтому пришлось внедрить кучу дополнительных проверок: отвечал ли уже бот на этот комментарий, комментировал ли пост, какие комментарии уже были в этом посте, чтобы не повторяться и т.д. Это сделало бота чуть разумнее, но всё равно я был им недоволен.

Бот правился прямо на ходу, но уже было понятно, что этого недостаточно. У бота были очевидные проблемы с алгоритмом работы.

Для следующей версии бота было решено добавить боту немного человечности: возможность отвечать персонально (я отобрал комменты Илюхера с упоминанием имен, никнеймов и навесил их на определенные аккаунты), научить бота распознавать вопросы «как», «где», «почему» и т.д., отвечать на них соответственно, научить бота лайкать и дизлайкать по определённой логике, а также распознавать тип содержимого коммента – видео, картинка и/или текст. Плюс было решено радикально увеличить базу комментариев. Для этого у настоящего Илюхера я запросил список всех его 23-х аккаунтов, написал парсер комментов и напарсил больше 14 тысяч комментариев, оставленных за все время присутствия Илюхера на ТЖ. И еще примерно столько же удалены кровавой администрацией ТЖ. Это позволило увеличить базу комментов практически втрое.

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

Бот начал вторую жизнь, активно набирал рейтинг, позволяющий больше не думать о платной подписке, а также породил несколько внутренних мемов.

Но вместе с новой версией обнаружились и новые недостатки. Из-за неверной логики приоритетов триггеров бот снова стал очень часто повторяться. Т.к. набор персональных ответов довольно скуден, то ответы определенным пользователям были почти всегда одни и те же. Другим недостатком стало и то, что вначале было даже плюсом – бот отвечает на любой комментарий, написанный в ответ на его комментарий. Т.е. ветка может продолжаться до тех пор, пока либо это не надоест человеку-собеседнику, либо пока не кончится база ответов. В постах, посвященных Илюхер-боту, это было очень даже уместно, а вот в постах на посторонние темы это стало проблемой – он комментил все подряд, триггерился невпопад и его стало СЛИШКОМ много. О чем справедливо стали заявлять как олдфаги ТЖ, так и ньюфаги.

И когда в очередной раз он загадил весь прямой эфир ответами невпопад, я понял, что пришло время отключить питание.

Теперь вы снова можете постить голые задницы, опросы и глупые вопросы в Аляску, не боясь, что вас затравит Нейро-Илюхер.

Как сказал бы сам Нейро-Илюхер,

А в это время в его мозгах происходит капремонт (или, в рамках новых веяний, реновация). Регулярные выражения, на которых были построены первые версии бота, были признаны исчерпавшими свой ресурс, и на смену им приходят нейросети, чтобы оправдать гордое имя Нейро-Илюхера.

Что из этого выйдет – никто не знает. 14 тысяч комментариев должно хватить на обучение нейронки. Но т.к. это будет первый мой опыт работы с нейросетями, то за результат я ручаться не могу. Буду рад любой помощи в области нейронок.

И хотя в груди у меня снова свербит то самое знакомое ощущение «я могу», у меня есть и другая особенность – я быстро загораюсь идеей и еще быстрее гасну. Что будет впереди – неизвестно. Но это был отличный опыт как в рамках программирования, так и в рамках понимания коммуникативных процессов.

Материал написан по просьбе Жени Кузьмина

Всем мира, всем спасибо, все – пидоры!

#истории