Bot Telegram + ML: algoritmo de correspondência universal

Eu escrevo modelos para casos no Kaggle , estudo estranhos e me inspiro. Todos os artigos que descrevem como implementá-los em um projeto da web, para mim, um estudante junior frontend, fornecem uma sobrecarga de informações complexas, mas eu só quero "emprestar" qualquer modelo legal e implementá-lo rapidamente em meu serviço. As mãos estavam ansiosas para criar um algoritmo universal, então uma solução foi encontrada rapidamente.





Vamos começar. Passo 1

Eu quero pegar o formato da maioria dos modelos do Kaggle , para que no futuro seja fácil pegar emprestado o código de outra pessoa de qualquer complexidade sem entendê-lo. Para carrinhos de barco, escreva no Python 3.9 , usando liby pyTelegramBotAPI , para tratar da compatibilidade das extensões .py e .ipynb yuzaem ipynb .





E assim, instalamos as dependências:





pip install pyTelegramBotAPI
pip install ipynb
      
      



Vá para Kaggle e escolha o modelo que você gosta. Vou começar com o caso clássico do Titanic - Machine Learning from Disaster , pegar essa solução emprestada (Titanic Random Forest: 82,78%) e arrastá-la para o projeto do bot.





Instale as dependências exibidas:





pip install <>
      
      



Vimos o bot. Passo 2

Crie um novo arquivo e importe nossas bibliotecas para ele:





import telebot
from ipynb.fs.defs.ml import is_user_alive
      
      



ipynb.fs.defs.ml



ml , , is_user_alive



, . , .





, ( @BotFather):





bot = telebot.TeleBot('token')
      
      



/start



, . , .





@bot.messagehandler(commands=['start'])
def welcome(message):    
  bot.sendmessage(message.chat.id, '!   ,  ( ), '
                  ' (male/female), ,      (1-, 0-), '
                  '  (1-, 0-),  ,     '
                  ', -   ,      !')
      
      



, . :





@bot.messagehandler(contenttypes=['text'])
def answer(message):    
  bot.sendmessage(message.chat.id, '…')    
  passengerdata = message.text.split()    
  passengerdata.insert(0, 0)    
  passengerdata.insert(9, ',')    
  passengerdata[2] = '"', passengerdata[2], '"'
      
      



, , 9 , .





. 3

cntrl+f



#%%



. . :





<>

def is_user_alive(user_data):
  <  >
      
      



- , :





with open(os.path.join('input', 'test.csv'), "a") as fp:    
  wr = csv.writer(fp, dialect='excel')    
  wr.writerow(user_data)
      
      



Predictions



( ). , (return



):





return predictions[len(predictions)-1:]['Survived']
      
      



. 4

answer



, 0 1… . , :





answer = is_user_alive(passenger_data)

if int(answer) == 1:    
  bot.sendmessage(message.chat.id, '! ,      .')
 elif int(answer) == 0:    
  bot.send_message(message.chat.id, ',    …   .')
      
      



Criamos uma função com uma proposta para verificar outra pessoa, chamamos de answer



com um message



argumento:





def doagain(message):    
  bot.sendmessage(message.chat.id, '  - ?')
      
      



Começamos a votação:





while True:    
  try:        
    bot.polling(none_stop=True)    
  except ():        
    time.sleep(5)
      
      



Resultado

Tudo! Muito simples, certo?

Caso contrário, você pode assistir a versão em vídeo:





Código: https://github.com/freakssha/ml-bot-titanic





Este é um speedrun para mãos com coceira, não é otimizado e pode ser muito melhorado, mas ainda não sei como. Se você sabe como fazer isso sem perder a simplicidade e a versatilidade - escreva, por favor!





GitHub , Inst , VK








All Articles