Рубрики
Без рубрики

Недостаточно друзей? Получите бота!

Как построить своего первого друга бота. Tagged с ботами, Python.

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

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

После нескольких часов чтения и кодирования я смог получить своего собственного бота, называемого Telegrambotfriend , готов к бегу в контейнере Docker.

Итак, что нам нужно, чтобы создать нашего собственного бота?

  • Источник данных.
  • Текстовый провайдер.
  • Генератор контента.
  • Платформа агностик бот.
  • Разъем платформы.
  • Оркестратор.

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

Откуда вы можете получить этот текст?

  • В моем случае я пошел в одну из групп моего друга WhatsApp и экспортировал историю группы.
  • Ваша учетная запись в Твиттере и даже учетные записи вашего друга в Твиттере.
  • Ваш блог.
  • Ослабление

Вам нужно собрать как можно больше текста.

Возможно, вам понадобится пост-обработка этого текста, потому что, как мы все знаем, «мусор, мусор». Возможно, вы захотите удалить URL -адреса или мусор, сгенерированные источником, например, WhatsApp добавляет «Аудио, игнорируемое» изображением, проигнорировалось », если вы экспортируете историю без контента, но вы должны полностью оставить смайлики:).

Текстовый провайдер – это класс со следующей подписью

def TextProvider(object):
    def get_text(self):
        #Loads the data source and returns its content
    def add_text(self):
        #Add new content to the file

Зачем нам нужен класс для этой простой задачи? В моем случае я хотел получить этот файл от Dropbox, чтобы экземпляр Docker мог быть легко удален или воссоздан. Возможно, вы захотите использовать свою локальную файловую систему или Google Drive, если вы создаете класс, который соответствует этой подписи.

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

Теперь мы добираемся до веселой части. Генератор контента будет отвечать за обучение на исходных данных и возврат нового контента при вызове.

Генератор контента выглядит так:

dev ContentGenerator(object):
    def load(self):
        #Setups the instance using a TextProvider
    def get_message(self, text):
        #It expects a text and try to returns a message based on that input

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

Большинство из этих генераторов контента (необязательно) ожидают семенного текста и возвращают строку на основе этого текста. Вы можете обрабатывать контент как аргумент, удалив Stop Words, а затем попытка генерировать содержательный ответ ..

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

Хотя мой бот называется Телеграмма Ботский друг, после нескольких часов кодирования я узнал, что это может работать с любой платформой. Мне нужно было бы написать всю логику в классе Agnostic платформы И тогда мне нужно было бы кодировать класс, конкретный платформ, который использует моего абстрактного бота, который выглядит так:

def AbstractBot(object):
    def process_incoming_message(self, chat_id, text):
        #Expects a text and returns a reply using a Content Generator
        #chat_id can be set to 0 if it's not a concept valid in the platform

Абстрактный бот будет вызван специфическим ботом платформы и:

  • Верните строку, если он был упомянут (да, это он).
  • Он присоединится к сообщению и вернет сообщение после случайного количества полученных сообщений, вот где входит Chat_id.
  • При желании он добавит новое сообщение в исходные данные.

Бот, специфичный для платформы, такой как Telegrambot, Twitterbot и т. Д., Получит платформу -агностик -агностический бот в __init__ функция И тогда это позвонит Process_incoming_message метод при необходимости.

Мой бот Telegram просто следует за этой простой подписью:

class TelegramClient(object):
    def __init__(self, abstract_bot, token):

Только что найдено режим редактирования предложений:)

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

В моей реализации bot_friend.py Скрипт получает аргументы из окружающей среды (очень легко настроить в докере) или из командных аргументов (легко отладка), а затем готовит бот:

text_provider = DropboxTextProvider(dropbox_access_token, dropbox_file)
provider = MarkovifyProvider(language, text_provider)
meme_text_provider = DropboxTextProvider(dropbox_access_token, meme_file)
meme_provider = MemeProvider(meme_text_provider)
abstract_bot = AbstractBot(name, provider, auto_feed, meme_provider)
TelegramClient(abstract_bot, token)

Да, конечно, я забыл упомянуть, у меня также есть Memeprovider. Бот не бот, если он не может использовать мемы.

Вы можете использовать моего бота, как и следуя этим шагам:

Создайте свой собственный Telegrambot

Есть много учебников в Интернете, но это очень легко:

  • Откройте поболтать с Botfather
  • Тип: /новичок
  • Он попросит у вас имя, и даст вам токен
  • Тогда вы должны напечатать /setPrivacy и установите на Отключить Чтобы иметь возможность прочитать входящие сообщения

Создайте токен доступа Dropbox

  • Перейти к https://www.dropbox.com/developers/apps/create
  • Создайте новый “Dropbox API”
  • Это даст вам знак
  • Скопируйте в папке, созданной в Dropbox в чате и файле списка мемов.

Докер

Вы можете настроить новый контейнер Docker, используя инструкции в Репо Анкет

ПРИМЕЧАНИЕ. Файл списка мемов – это файл отделения запятой, что -то вроде этого:

trigger word(s),meme url

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

Во -вторых, кодирующие боты – это весело, я имею в виду, очень весело!

И последнее, но не менее важное: этот проект открывает дверь для изучения новых вещей, проработав основы. Теперь я могу вернуться в RNN в TensorFlow и просто заменить марковье -типконтент -провидер или создать слабый бот, заменив Telegrambot Slack One или даже запустить с использованием одного и того же экземпляра AbstractBot.

От hardkoded.com

Оригинал: “https://dev.to/hardkoded/not-enough-friends-get-a-bot-a2j”