Mélyreható tanulási modell telepítése a Facebook Messenger segítségével a Rasa-val

A régi mondás szerint, ha csak kalapáccsal rendelkezik, akkor minden úgy néz ki, mint egy köröm. Ennek a mondásnak a következménye az, hogy egy kalapács esetenként a körmön keresztüli vezetést is elvégzi. Ebben a cikkben leírom, hogy az eszközkészletben lévő kalapács (Facebook Messenger és Rasa) váratlan munkát végzett: telepített egy Keras mély tanulási modellt.

Az alábbiakban elmagyarázom, hogy a modell telepítésének szokásosabb megközelítései (AWS Sagemaker, Flask) nem működtek számomra. Ezután áttekintést adok arról, hogyan adaptáltam a Facebook Messenger-et a Rasa-val, hogy elkészítsem a kezdeti modell-telepítést.

A modell (itt részletesen leírva) igen / nem előrejelzést ad arról, hogy késik-e az utcai átutazás. A képzést egy nyílt adatkészlettel végezték, amely tartalmazza az utcai kocsik késéseit az elmúlt 6 évben. A telepített képzett modellnek előrejelzést kell készítenie 7 bemenet alapján:

  • Útvonal
  • Irány
  • Óra
  • Nap
  • A hónap napja
  • Hónap
  • Év

Telepítési lehetőségek, amelyeket megvizsgáltam

Mielőtt megbotlott volna a számomra működő telepítési megoldáson, néhány más alternatívát vizsgáltam meg: AWS Sagemaker és a Flask with Paperspace Gradient.

AWS Sagemaker. Megpróbáltam telepíteni a modell korai verzióját az AWS Sagemaker használatával, de problémákba ütköztem, mivel az AWS API elvárja, hogy a modell egyetlen bemeneti adatfolyammal rendelkezzen, és a modellnek több bemenete legyen (megfelel a fent felsorolt ​​szolgáltatásoknak). Kidolgoztam egy átfogó AWS alapú stratégiát, de egyszerűen nem tudtam megkerülni az egyetlen bemeneti adatfolyam korlátozását. Azt is megállapítottam, hogy a fenti AWS szolgáltatások havi költségei nem voltak fenntarthatók, ezért tovább kellett lépnem.

Javasolt végponttól végponttól a nyers adatoktól az AWS-n keresztül a telepített modellig

Lombik a Paperspace gradienssel. Paperspace Gradient környezetet használtam a modell kiképzéséhez. A színátmenet lenyűgözött - mindent megadott, amire szükségem volt egy mélyreható tanulási modell képzéséhez, egyetlen olyan átlátszatlan számlázással vagy felhőfúvással sem, amelytől más felhőszolgáltatók (AWS, Google Cloud Platform) szenvednek. Nagy reményeket támasztottam a Paperspace Gradient telepítésével, de a „hello world” példa két részletes cikk magyarázatát tette szükségessé (Deeploying Deep Learning Models 1. rész és 2. rész). Remélem, hogy valamikor visszatérek ehhez a megközelítéshez, de ez egyszerűen túl sok nehéz feladat volt a modell kezdeti üzembe helyezésekor.

Ezen alternatívák egyike sem adott sima utat a Keras-modell telepítéséhez, ezért meg kellett találnom egy másik telepítési módszert.

A Facebook Messenger és a Rasa miért jó választás a modellek telepítéséhez

Több hónapon keresztül zavartam a modellek telepítésének problémáját, amelynek során egy másik projekten dolgoztam, amelynek során egy chatbotot készítettem a Rasa-ban, a Facebook Messenger használatával. Aztán egy nap rájöttem, hogy az új projekten megtanultam mindent, ami a Keras modell telepítési problémájának megoldásához szükséges:

  • Egyszerűség - a chatbot projektnek köszönhetően a Rasa-val működő Facebook Messenger ismerős része volt az eszköztáromnak, és jól éreztem magam a teljes veremben. Ez a Rasa-val folytatott Facebook Messenger egyszerű választást tett számomra. A Facebook Messenger emellett kezdetben egyszerű, könnyű kezelőfelületet adott a pontozandó adatok beviteléhez. Az adatokat olyan természetes nyelvi nyilatkozatba vehetik be, mint „Késik-e Kelet királyné?”. A Facebook Messenger felülete sokkal jobban illeszkedett az ilyen alkalmi bevitelhez, mint a teljes webhely, amelyet eredetileg a modell elképzelésére készítettem.
  • Vezérlés - a Rasa veremmel ellátott Facebook Messenger Python környezetet tartalmaz az egyéni műveletekhez. Az AWS Sagemakerrel történő telepítéstől eltérően ebben a Python környezetben teljes ellenőrzésem alatt állt, hogy a csővezetéket és a modellt pontosan úgy hívjam be, ahogy akartam, anélkül, hogy aggódnom kellett volna a modell bemeneteinek száma miatt.
  • Költség - a teljes telepítési verem ingyenesen használható.
  • Hozzáférés - A Facebook a fejlesztők számára megkönnyíti a hozzáférést a kiválasztott felhasználókhoz, és az ngrok segítségével fel tudom hozni a Rasa működését a helyi rendszeren a Facebook Messenger segítségével.
A felhasználók számára a modellhez való hozzáférés biztosítása a fejlesztői Facebook alkalmazáson keresztül

Az AWS Sagemakerrel a javasolt telepítéshez készített vázlat felülvizsgálatakor megterveztem azt a megközelítést, amelyet a modell telepítéséhez a Facebook Messenger segítségével a Rasa segítségével alkalmaznék:

Végponttól a végéig a nyers adatoktól a telepített modellig megvalósítva a Rasa Facebook Messenger segítségével

A következő lépéseket tettem, hogy átalakuljak a kiképzett modellről egy telepített modellre:

  • Adjon meg egyéni osztályokat a sklearn csővezetékhez az adatkészlet előkészítéséhez: kategorikus értékeket kódol, üres értékeket kezel, és az adatkészletet előkészítse a Keras modellbe történő bevitelhez. Annak érdekében, hogy ezeket az osztályokat a pontozási kódban felhasználhassam, meg kellett határoznom ezeket az osztályokat egy külön fájlban (custom_classes.py), és importálni kellett az osztályokat a képzési és pontozási kódot tartalmazó fájlokba.
  • Készítsen egy egyszerű Rasa-modellt a felhasználók által a Facebook Messengerben a modell meghívására szolgáló általános kijelentésekhez, például: „késik-e a keleti királyné?” Ehhez a lépéshez alapvető Rasa környezetet kellett beállítani, majd frissíteni kellett az nlu.md, stories.md, domain.yml oldalt, amely tartalmazza a kiképzett modellel való interakcióhoz szükséges mondatokat, szándékokat, műveleteket és réseket. A credentials.yml fájlt szintén frissíteni kellett a Rasa és a Facebook Messenger használatával kapcsolatos korábbi cikkemben leírtak szerint, hogy belefoglalják a Facebook Messenger által megkövetelt hitelesítő adatokat. Itt egy kivonat a nlu.md fájlból, amely a Rasa modell kiképzéséhez használt közmondások némelyikét mutatja be:
## szándék: előrejelzés_késés = teljes - az [501] útvonal (útvonal) [kelet felé] (irány: e) késni fog? - késik-e a [St Clair] (Útvonal: 512) [kelet felé] (irány: e)? - késik-e a [St Clair] (Útvonal: 512) [nyugati irányban] (irány: w)? - késik-e a [Downtowner] (Útvonal: 502) [kelet felé] (irány: e)? - késik-e a [Downtowner] (Útvonal: 502) [Nyugatra] (Irány: w)? - halasztja a [Spadina] (Útvonal: 510) [déli] (Irány: s)? - késni fog a [Spadina] (Útvonal: 510) [észak felé] (Irány: n)? - késni fog az [511] (útvonalon) [déli irányban] (irány: s)? - késni fog az [502] (útvonalon) [kelet felé] (irány: e)? - késni fog az [502] (útvonalon) [nyugatra] (irány: w)?
  • Frissítse az Action.py fájlt (a Python fájl, amely a Rasa modellre vonatkozó egyedi műveleteket végrehajtó osztályokat tartalmazza) a Keras csővezeték osztályfájl importálásához, a csővezetékek és a Keras modell betöltéséhez, és egy egyedi cselekvési osztály meghatározásához, amely a csővezetéket és a modellt a Rasa által átadott értékek. Az egyedi műveleti osztály olyan kódot tartalmaz, amely a 7 bemenet közül 5-et (óra, nap, hét napja, hónap és év) az aktuális dátumra és időre állítja, ha ezek nem szerepelnek kifejezetten a felhasználó bemenetében. Ez lehetővé teszi a modell számára a bemenetek pontozását, például: „Késik-e a nyugati Carlton?” ahol a felhasználó nem adott meg időbeli információt.

Íme néhány példa arra, hogy a felhasználó kérdéseket tegyen és előrejelzéseket szerezzen a Facebook Messenger alkalmazásban:

Példák a telepített modell előrejelzéseire

Vegyük figyelembe a fenti lekérdezések párját azonos számcímkével. Vegyük például a 4. párt. Ebben a párban az „észak 510 út” ugyanazt jelenti, mint az északi Spadina út. Annak ellenére, hogy a megfogalmazás mindegyik páronként változik, Rasa meghatározza, hogy a lekérdezések azonos szemantikai szándékkal rendelkeznek, tehát Rasa egyenértékű értékeket küld a Python egyedi műveleti osztályához minden pártra, és ugyanaz az előrejelzési eredmény kerül visszatérésre.

Következtetés

A Rasa-val folytatott Facebook Messenger kényelmes módja annak, hogy telepítsem Keras mély tanulási modelljét. Ez lehetővé tette számomra a Rasa chatbot létrehozására kifejlesztett készségeim újbóli felhasználását, és olyan egyszerű felületet nyújtott, amely jól alkalmazható az alkalmazás számára. Arra számítom, hogy a projekt valamelyik pontján visszatérek a szokásosabb telepítési megközelítéshez, de a Rasa-val működő Facebook Messenger egyszerű, érthető módon adta nekem az első telepítést, nulla költséggel.

Kulcslinkek

  • A cikkben ismertetett telepítés-specifikus kód itt érhető el.
  • A modell kiképzéséhez használt alapkód itt érhető el.
  • A képzett modellekre példák találhatók itt.
  • A Facebook Messenger és a Rasa beállításának áttekintése itt érhető el.