Проект: AliceBob учим языки, играя в Alias  Публичный пост
1 мая 2023  368
AliceBob учим языки, играя в Alias

Как личный опыт становится идеей для проекта

Привет, меня зовут Артем, я учу с помощью ML разговорных агентов делать что-то полезное или приятно вести диалог о чем-нибудь с пользователем.

Я создаю робо-друга, который помогает повысить уровень владения иностранным языком в формате игры Alias. (*)

Но это сейчас я так думаю, на самом деле все началось с другой идеи

(*) Мне нравится эта игра, я заметил, что иногда тяжело объяснить некоторые слова на родном языке, а во время обучения это и нужно - расшевелить мозг. Чтобы построить связное предложение на лету из слов, которые не в активном лексиконе, мозгу приходится вспоминать буквально все, что было изучено ранее, а в Alias это усложняется тем, что нужно проговаривать слова и слышать собеседника. Тогда я подумал, что это можеть быть отличной возможностью развивать или поддерживать навыки иностранного языка.

Мы с друзьями иногда играем на русском. Но часто тяжело собрать людей похожего уровня регулярно играть с целью обучения, а не покекать. Так появилась идея сделать помощника для игры в Alias. Я смотрю на это как на дополнительный инструмент для развития языка.

С чего все началось

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

Смысл был создать что-то вроде тамогочи, только твой питомец языковая модель (например, GPT), а корм для нее - это определения для слов, которые игра выдает пользователю, такое вот машинное обучение. Ты будешь объяснять роботу слова, он будет запоминать твои определения, но чтобы запустить обучение робота и перейти к новым интересным словам нужен некоторый ресурс. Его можно получить за комбинации вроде "объяснил два слова подряд с первого раза" и других механик. Еще я думал сделать лидерборд для роботов, чтобы смотреть кто лучше всего научилися отгадывать слова (понимать людей).

Я подумал: "Ваууу, хочу попробовать сделать это!", выписал все идеи на телефон и пытался уснуть, чтобы начать на следующий день.

Когда я поменял идею

Во время экспериментов, я понял что мне бывает тяжело объяснить некоторые слова роботу, но в оригинальной игре все было проще. Когда мы с друзьями в очередной раз играли, то заметил, что у нас очень много общего контекста, которым мы пользуемся, а еще используем жестикуляцию, чтобы объяснять слова. Из-за этого объяснить что-то роботу сложнее чем кажется на первый взгляд. А еще он иногда подтупливает 😅️. Приходится тщательно подбирать слова, объяснять детали, пробовать разные варианты. В общем легко отделаться не получится. Кажется это то, что мне очень бы пригодилось, когда я проходил уровни A2/B1.

Это как играть в Alias с незнакомыми людьми у которых повязки на глазах.

Что я вложил в прототип и сколько времени потратил

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

основные механики

Есть два персонажа Алиса и Боб, многие технари их знают как персонажей в задачках по информатике. Аватарку для них сделал в midjourney. Алиса загадывает слово и предлагает пользователю описать его так чтобы Боб понял, стоит сказать это не всегда просто, в общем-то как с людьми.

Обычный день Алисы и Боба, достаточно, чтобы одно из предположений Боба было правильным
Обычный день Алисы и Боба, достаточно, чтобы одно из предположений Боба было правильным

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

Иногда Боб предлагает нестандартные идеи
Иногда Боб предлагает нестандартные идеи

Бот сохраняет прогресс, а если не получается объяснить слово, то его можно пропустить. Еще можно вставлять многоточие (...), чтобы помочь Бобу понять как это слово выглядит в контексте.

Многоточие иногда помогает Бобу
Многоточие иногда помогает Бобу

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

Иногда Боб что-то понимает в жизни людей
Иногда Боб что-то понимает в жизни людей

Бот доступен здесь

сколько было потрачено времени

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

Хронология требований :

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

В итоге я потратил ~60-80 часов, но для моего мозга это было неприятно, он вечно спрашивал "ну когда ты там закончишь?". Особенно последние дни были самыми сложными. Прежде чем сесть за работу, мне часто нужно было объяснить себе зачем я это делаю и почему для меня это важно.

Затраты, аудитория и монетизация

Потратил около 3к на облако. Аудитории нет, проект еще не завершен для потребления, это скорее рабочий прототип, публикую бота здесь первый раз, это волнительно. Пока сделал ссылку для донатов на развитие. Думаю можно попробовать продавать персональные подписки и продавать в некоторой форме в школы по обучению языкам.

Технические детали

Коротко стек: Python, Huggingface и Google Colab для дообучения ruT5, хостинг на Яндекс облаке (Ice Lake. 2x vCPU, RAM 2 GB).

Когда я начинал ChatGPT еще только вышла, кажется не было API и понимания что это нужно пробовать в первую очередь. Я подумал, что придется руками тренировать модель, мне нужны данные, поискал в интернетах ответы на кроссворды и другие словесные игры, что-то стоящее нашел для русского. Окей, данные есть, теперь нужно взять что-нибудь небольшое. Благо для русского языка есть множество моделей всех современных архитектур. Остановился на T5, пробовал BERT с классической MLM задачей, так и metric-learning, ну и GPT тоже пробовал завести. Модель уместилась в 1 GB на инференс, можно заморочиться с квантизацией в ONNX и тогда потребуется всего~300 MB, а можно просто докинуть памяти 🙃️. Хранение прогресса сделал просто в файловой системе в json, что грешно.

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

Можно сделать своего минибоба, например, чтобы отгадывать мемасы 😅️.

С какими самыми неожиданными трудностями пришлось столкнуться?

Данные

Думал что для английского языка будет больше качественных данных, но смог найти подходящие ресурсы только для русского. Я искал словари для учащихся, кроссворды, словесные игры и часто оказывалось, что парсить дорого (для меня), а данные не всегда релевантные. Повезло найти ресурс на котором было что мне нужно, правда на русском. Пробовал использовать словари из Вики, но они оказались слишком формальными и пестрили более сложными терминами.

Хостинг модели и бота

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

Прием платежей

Это была моя самая главная боль, я хотел приделать кнопку в телеграм, чтобы во-первых, научиться брать деньги, а во-вторых, собрать что-то вроде чаевых или донатов на развитие, в тот момент появилась благая причина на что просить. Я начал с YooKassa, они предлагали интеграцию с телеграм. Добавил все что нужно и опробовал на тестовом аккаунте, мне понравилось. Но они не работают с просто физлицами. Поэтому я зарегистрировался самозанятым, это делается в течение часа в Сбере (в других банках наверно также). Далее нужно было составить договор и объяснить что я буду продавать.

тётя, 👉️ 👈️ я просто начинающий инди хакер и хочу собрать чаевые со своих 5 пользователей (мама и 4 друга)

В общем такое не прокатило, но больше всего меня расстроило другое:

Важно: на данный момент для самозанятых не поддерживается возможность приема платежей через наше решение для чат-бота Telegram с использованием платежного токена от @BotFather.

Сейчас может что-то изменилось. Делать ИП я не хотел, но решил дойти до конца. Пробовал завести аккаунт на Бусти, но оказалось, что донатеру нужно быть пользователем Бусти, то есть во время оплаты требуется авторизация. Это очень неудобно. В итоге я использовал простую ссылку на сбор денег в Тинькофф. Хотя в последствии нашел сервис CloudTips.

Какие планы на будущее?

Хочу получить доступы к ChatGPT, чтобы поэксперементировать, очень вероятно мне ее хватит для этой задачи. Думаю сделать следующий шаг в англоизучающую аудиторию и посмотрю отклик. Сейчас читаю книжку Make и как раз остановился на главе "сначала продавай потом делай".

Я хочу сделать датасет с помощью толокеров (разметчиков), давать им слова и просить их описать будто они играют в Alias. Это будет полезно не только для моего проекта, но и для обучения аналогов ChatGPT следовать инструкциям. Я опубликую 50% датасета под лицензией для коммерческого использования.

Нужны ли какие-то советы или помощь Клуба?

прием платежей

Подскажите какие есть варианты организовать прием платежей от иностранных пользователей для пет-проекта (сайт/бот), если ты резидент РФ и хочешь оставаться самозанятым? Чем вы пользуетесь для своих проектов? Какие есть подводные камни?

Я знаю можно открыть бизнес в стране, которая работает со Stripe, но кажется это оверхед для проекта, который стартует. Знаю про несколько эквайрингов, которые работают с самозанятыми с комиссией в 10% (Enot.io). Можно еще карту открыть в условном Узбекистане, но я не погружался как там предпринимательство устроено.

потестить идею

У меня сейчас появилось некоторое представление как может выглядеть бот. Я хочу протестировать, что пользователи готовы платить за это или во всяком случае оказывают интерес, также я хочу понять интересно ли такое может быть школам английского языка. Я хотел сделать лендос с чери пик примерами хороших диалогов, нагнать трафик, поставить кнопку "хочу в бета" и посмотреть конверсию. В чем недостаток этого подхода? Какие еще есть варианты? Чтобы вы попробовали в первую очередь?

ищу людей

Хочу в следующей итерации поработать в команде, поэтому ищу с кем поразвивать эту идею в какую-нибудь сторону 🙋️.

Совет тем кто начинает делать пет-проекты

Публиковать свою работу вне зависимости от результата. Тем кто на шаг позади это может пригодиться, то что понятно одному может вызвать трудности у другого. Публиковаться может быть страшно, но если страшно сейчас, то что будет, если масштаб работы окажется крупнее? Будет еще страшнее, это такая маленькая инвестиция в будущую уверенность в себе. Если очень страшно, можно сделать что-то попроще. Я как-то написал небольшую техническую заметку и просто выложил на гитхаб, оказалось что одному человеку это было важно и он был готов заплатить мне деньги за консультацию по этой теме. Если опубликоваться, то в худшем случае станет просто спокойнее, а в лучшем кто знает.

Определить конечный результат проекта и делать вещи, которые ведут только к нему. Например, если это продукт, не нужно собирать опыт на новых технологиях, это всегда обучение, которое отнимает силы и фокус, будет тяжело объяснить мозгу зачем это делается в контексте основной цели, в результате может отпасть желание двигаться дальше. Если задуматься, то у продукта, обучения и создании чего-то для сообщества даже способы достижения цели разные. Поэтому лучше сложить на потом цели и попробовать сделать их в отдельной итерации, если будет желание.

Ссылки на финальный результат

  1. Прототип в телеграм
  2. Дообученная модель
  3. Собранный датасет
  4. Пошаговый туториал
  5. Поддержать автора здесь
Откомментируйте первым 👇

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб