Telegram bot + ML: algoritma pencocokan universal

Saya menulis model untuk kasus di Kaggle , mempelajari orang asing, dan mendapatkan inspirasi. Semua artikel yang menjelaskan cara menerapkannya dalam proyek web, bagi saya, seorang siswa frontend junior , memberikan informasi yang rumit secara berlebihan, tetapi saya hanya ingin "meminjam" model yang keren dan segera menerapkannya ke dalam layanan saya. Tangan-tangan ingin sekali menghasilkan algoritme universal, jadi solusi ditemukan dengan cepat.





Mari kita mulai. Langkah 1

Saya ingin mengambil format sebagian besar model dari Kaggle , sehingga di masa mendatang akan mudah untuk meminjam kode orang lain dengan kerumitan apa pun tanpa memahaminya. Untuk gerobak Boat, tulis dengan Python 3.9 , menggunakan liby pyTelegramBotAPI , untuk mengatasi kompatibilitas ekstensi .py dan .ipynb yuzaem ipynb .





Jadi, kami menginstal dependensi:





pip install pyTelegramBotAPI
pip install ipynb
      
      



Pergi ke Kaggle dan pilih model yang Anda suka. Saya akan mulai dengan kasus Titanic klasik - Pembelajaran Mesin dari Bencana , pinjam solusi ini (Titanic Random Forest: 82.78%), seret ke dalam proyek bot.





Instal dependensi yang muncul:





pip install <>
      
      



Kami melihat botnya. Langkah 2

Buat file baru dan impor libs kami ke dalamnya:





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



Kami membuat fungsi dengan proposal untuk memeriksa orang lain, memanggilnya dari answer



dengan message



argumen:





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



Kami mulai melakukan polling:





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



Hasil

Segala sesuatu! Cukup sederhana, bukan?

Jika tidak, Anda dapat menonton versi videonya:





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





Ini adalah kecepatan lari untuk tangan yang gatal, tidak dioptimalkan dan bisa banyak ditingkatkan, tapi saya belum tahu bagaimana caranya. Jika Anda memahami cara melakukan ini tanpa kehilangan kesederhanaan dan keserbagunaan - tulislah!





GitHub , Inst , VK








All Articles