Telegrammbot + ML: universeller Matching-Algorithmus

Ich schreibe Modelle für Fälle auf Kaggle , studiere Fremde und lasse mich inspirieren. Alle Artikel, in denen beschrieben wird, wie sie in einem Webprojekt implementiert werden, bieten für mich als Junior- Frontend- Student einen Überblick über komplexe Informationen, aber ich möchte einfach jedes coole Modell "ausleihen" und es schnell in meinen Dienst implementieren. Die Hände wollten unbedingt einen universellen Algorithmus entwickeln, sodass schnell eine Lösung gefunden wurde.





Lass uns anfangen. Schritt 1

Ich möchte das Format der meisten Modelle von Kaggle übernehmen , damit es in Zukunft einfach ist, den Code eines anderen von beliebiger Komplexität auszuleihen, ohne ihn zu verstehen. Für Bootswagen schreiben Sie in Python 3.9 mit liby pyTelegramBotAPI , um die Kompatibilität der Erweiterungen .py und .ipynb yuzaem ipynb zu überprüfen .





Und so installieren wir die Abhängigkeiten:





pip install pyTelegramBotAPI
pip install ipynb
      
      



Gehen Sie zu Kaggle und wählen Sie das Modell aus, das Ihnen gefällt. Ich beginne mit dem klassischen Titanic- Fall - Maschinelles Lernen aus Katastrophen , leihe mir diese Lösung aus (Titanic Random Forest: 82,78%) und ziehe sie in das Bot-Projekt.





Installieren Sie die angezeigten Abhängigkeiten:





pip install <>
      
      



Wir haben den Bot gesehen. Schritt 2

Erstellen Sie eine neue Datei und importieren Sie unsere Bibliotheken in diese:





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



Wir erstellen eine Funktion mit einem Vorschlag, um eine andere Person zu überprüfen, und rufen sie answer



mit einem message



Argument auf:





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



Wir beginnen mit der Abstimmung:





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



Ergebnis

Alles! Ziemlich einfach, oder?

Wenn nicht, können Sie die Videoversion ansehen:





Code: https://github.com/freakssha/ml-bot-titanic





Dies ist ein Speedrun für juckende Hände, er ist nicht optimiert und kann stark verbessert werden, aber ich weiß noch nicht wie. Wenn Sie verstehen, wie man das macht, ohne an Einfachheit und Vielseitigkeit zu verlieren - schreiben Sie bitte!





GitHub , Inst , VK








All Articles