Előfeltételek
Mik azok a Word-beágyazások?
A lombik és a mennyiségi csomagok beszerelése
A Word2Vec modell lekérdezése
REST API létrehozása
API-hívások kezdeményezése
A fejlesztés hagyományos megközelítéseit nehéz fenntartani, ha összetett gépi tanulási modelleket használnak a termelésben. A laptopon vagy helyi gépen történő fejlesztés lassú lehet a gépi tanulási modell betanítása a mélytanulási mérnökök számára. Ennek eredményeként általában erősebb hardverrel rendelkező felhőgépeket használunk gépi tanulási modelljeink betanításához és futtatásához. Ez bevált gyakorlat, mivel az összetett számításokat elvonatkoztatjuk, és ehelyett szükség szerint AJAX kéréseket készítünk. Ebben az oktatóanyagban egy előre betanított Word2Vec nevű mély tanulási modellt teszünk elérhetővé más szolgáltatások számára egy REST API létrehozásával az alapoktól.
Előfeltételek
- Egy Ubuntu 16.04 szerverpéldány legalább 4 GB RAM-mal. Tesztelési és fejlesztési célokra 4 GB RAM-mal rendelkező példányt választhat
- A Linux operációs rendszer használatának megértése mappák és fájlok létrehozására/navigációjára/szerkesztésére
- Egy
sudofelhasználó
Mik azok a Word-beágyazások?
A szóbeágyazás a természetes nyelvi feldolgozás és a mélytanulás legújabb fejlesztése, amely a gyors fejlődésnek köszönhetően mindkét területet forradalmasította. A szóbeágyazások lényegében olyan vektorok, amelyek mindegyike egyetlen szónak felel meg, így a vektorok a szavakat jelentik. Ez bizonyos jelenségekkel igazolható, például a vektorral king - queen = boy - girl. A szóvektorokat az ajánlómotoroktól a chat-botokig, amelyek valóban megértik az angol nyelvet, mindent összeállítanak.
A Word beágyazása nem véletlenszerű; neurális hálózat betanításával jönnek létre. A Word2Vec nevű új, hatékony szóbeágyazási implementáció a Google-tól származik, amelyet a nyelv más szavai mellett megjelenő szavak előrejelzésével képez. Például a szó "cat"esetében a neurális hálózat megjósolja a "kitten"és a szavakat "feline". A szavak egymás közelében megjelenő intuíciója lehetővé teszi, hogy vektortérben helyezzük el őket.
A gyakorlatban azonban hajlamosak vagyunk más nagyvállalatok, például a Google előre kiképzett modelljeit használni a prototípus gyors elkészítéséhez és a telepítési folyamatok egyszerűsítéséhez. Ebben az oktatóanyagban letöltjük és használjuk a Google Word2Vec előre betanított szóbeágyazásait. Ezt a következő parancs futtatásával tehetjük meg a munkakönyvtárunkban.
wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude
A lombik és a mennyiségi csomagok beszerelése
Az általunk letöltött szó beágyazási modellje .magnitudeformátumban van. Ez a formátum lehetővé teszi a modell hatékony lekérdezését SQL használatával, ezért ez az optimális beágyazási formátum éles szerverek számára. Mivel tudnunk kell olvasni a .magnitudeformátumot, telepítjük a pymagnitudecsomagot. Azt is telepítjük, flaskhogy később kiszolgáljuk a modell által készített mély tanulási előrejelzéseket.
pip3 install pymagnitude flask
A következő paranccsal a függőségi nyomkövetőhöz is hozzáadjuk. Ez létrehoz egy nevű fájlt, requirements.txtés elmenti Python-könyvtárainkat, hogy később újratelepíthessük őket.
pip3 freeze > requirements.txt
A Word2Vec modell lekérdezése
Kezdésként létrehozunk egy fájlt, amely kezeli a szóbeágyazások megnyitását és lekérdezését.
touch model.py
Ezután a következő sorokat adjuk hozzá a model.pyMagnitude importálásához.
from pymagnitude import Magnitude
vectors = Magnitude('GoogleNews-vectors-negative300.magnitude')
A módszer segítségével eljátszhatjuk a pymagnitudecsomagot és a mély tanulási modellt query, érveket adva egy szó mellett.
cat_vector = vectors.query('cat')
print(cat_vector)
API-nk magjaként meghatározunk egy függvényt, amely visszaadja a két szó jelentésbeli különbségét. Ez a gerince a legtöbb mély tanulási megoldásnak, például ajánlómotorokhoz (azaz hasonló szavakkal való tartalom megjelenítéséhez).
Ezzel a funkcióval játszhatunk a similarityés most_similar függvények használatával.
print(vectors.similarity("cat", "dog"))
print(vectors.most_similar("cat", topn=100))
A hasonlóság-kalkulátort a következőképpen valósítjuk meg. Ezt a metódust a Flask API hívja meg a következő részben. Vegye figyelembe, hogy ez a függvény 0 és 1 közötti valós értéket ad vissza.
def similarity(word1, word2):
return vectors.similarity(word1, word2)
REST API létrehozása
A szerverünket service.pya következő tartalommal rendelkező fájlban hozzuk létre . Szerver képességeinket importáljuk flaskés requestkezeljük, illetve a similaritymotort a korábban írt modulból importáljuk .
from flask import Flask, request
from model import similarity
app = Flask(__name__)
@app.route("/", methods=['GET'])
def welcome():
return "Welcome to our Machine Learning REST API!"
@app.route("/similarity", methods=['GET'])
def similarity_route():
word1 = request.args.get("word1")
word2 = request.args.get("word2")
return str(similarity(word1, word2))
if __name__ == "__main__":
app.run(port=8000, debug=True)
Szerverünk meglehetősen csupasz, de könnyen bővíthető, ha több útvonalat készítünk a @app.routedekorátor segítségével.
API-hívások kezdeményezése
Flask szerverünket a következő parancsok futtatásával tudjuk futtatni a virtuális környezet aktiválásához, a csomagok telepítéséhez és a hozzá tartozó Python fájl futtatásához.
source venv/bin/activate
pip3 install -r requirements.txt
python3 service.py
Szerverünk a címen lesz elérhető localhost:8000. Lekérdezhetjük adatbázisunkat a címen, localhost:8000/similarity?word1=cat&word2=dogés megtekinthetjük a választ a böngészőnkben vagy egy másik AJAX kliensen keresztül.