Telegram bot + ML: algoritmo de coincidencia universal

Escribo modelos para casos de Kaggle , estudio a extraños y me inspiro. Todos los artículos que describen cómo implementarlos en un proyecto web, para mí, un estudiante junior de frontend, dan una visión general de información compleja, pero solo quiero "tomar prestado" cualquier modelo interesante e implementarlo rápidamente en mi servicio. Las manos ansiaban idear un algoritmo universal, por lo que se encontró una solución rápidamente.





Empecemos. Paso 1

Quiero tomar el formato de la mayoría de los modelos de Kaggle , para que en el futuro sea fácil tomar prestado el código de otra persona de cualquier complejidad sin entenderlo. Escribimos un bot para un carrito en Python 3.9 , usando pyTelegramBotAPI , para resolver el problema de compatibilidad de las extensiones .py y .ipynb, usamos ipynb .





Y así, instalamos las dependencias:





pip install pyTelegramBotAPI
pip install ipynb
      
      



Ve a Kaggle y elige el modelo que más te guste. Comenzaré con el caso clásico de Titanic: Machine Learning from Disaster , tome prestada esta solución (Titanic Random Forest: 82.78%), arrástrela al proyecto de bot.





Instale las dependencias aparecidas:





pip install <>
      
      



Vimos el bot. Paso 2

Cree un nuevo archivo e importe nuestras bibliotecas en él:





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, ',    …   .')
      
      



Creamos una función con una propuesta para verificar a otra persona, la llamamos answer



con un message



argumento:





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



Empezamos a sondear:





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



Resultado

¡Todo! Bastante simple, ¿verdad?

De lo contrario, puede ver la versión en video:





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





Este es un speedrun para manos que pican, no está optimizado y se puede mejorar mucho, pero todavía no sé cómo. Si entiende cómo hacer esto sin perder simplicidad y versatilidad, ¡escriba, por favor!





GitHub , Inst , VK








All Articles