Forutsetninger
Hva er Word Embeddings?
Installere flaske- og størrelsespakkene
Spørre Word2Vec-modellen
Opprette en REST API
Foreta API-anrop
Tradisjonelle tilnærminger til utvikling er vanskelige å opprettholde når man bruker komplekse maskinlæringsmodeller i produksjon. Utvikling på en bærbar datamaskin eller lokal maskin kan være treg for å trene opp maskinlæringsmodellen for dyplæringsingeniører. Som et resultat bruker vi vanligvis skymaskiner med kraftigere maskinvare for å både trene og kjøre maskinlæringsmodellene våre. Dette er god praksis siden vi abstraherer komplekse beregninger og i stedet foretar AJAX-forespørsler etter behov. I denne opplæringen vil vi gjøre en forhåndsopplært dyplæringsmodell kalt Word2Vec tilgjengelig for andre tjenester ved å bygge en REST API fra grunnen av.
Forutsetninger
- En Ubuntu 16.04-serverforekomst med minst 4 GB RAM. For test- og utviklingsformål kan du velge en instans med 4 GB RAM
- Forståelse av hvordan du bruker Linux-operativsystemet til å opprette/navigere/redigere mapper og filer
- En
sudobruker
Hva er Word Embeddings?
Ordinnbygging er en nylig utvikling innen naturlig språkbehandling og dyp læring som har revolusjonert begge feltene på grunn av rask fremgang. Ordinnbygging er i hovedsak vektorer som hver tilsvarer et enkelt ord slik at vektorene betyr ordene. Dette kan demonstreres av visse fenomener som vektoren for king - queen = boy - girl. Ordvektorer brukes til å bygge alt fra anbefalingsmotorer til chat-bots som faktisk forstår det engelske språket.
Ordinnbygging er ikke tilfeldig; de genereres ved å trene et nevralt nettverk. En nylig kraftig implementering av ordinnbygging kommer fra Google ved navn Word2Vec som trenes opp ved å forutsi ord som vises ved siden av andre ord på et språk. For eksempel, for ordet "cat", vil det nevrale nettverket forutsi ordene "kitten"og "feline". Denne intuisjonen av ord som vises i nærheten av hverandre, lar oss plassere dem i vektorrom.
I praksis har vi imidlertid en tendens til å bruke de forhåndstrente modellene til andre store selskaper som Google for raskt å lage prototyper og forenkle distribusjonsprosesser. I denne opplæringen vil vi laste ned og bruke Googles Word2Vec forhåndstrenede ordinnbygginger. Vi kan gjøre dette ved å kjøre følgende kommando i arbeidskatalogen vår.
wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude
Installere kolbe- og størrelsespakkene
Ordet innebyggingsmodellen vi lastet ned er i et .magnitudeformat. Dette formatet lar oss spørre modellen effektivt ved hjelp av SQL, og er derfor det optimale innebyggingsformatet for produksjonsservere. Siden vi må kunne lese .magnitudeformatet, installerer vi pymagnitudepakken. Vi vil også installere flaskfor senere å betjene dyplæringsspådommene laget av modellen.
pip3 install pymagnitude flask
Vi vil også legge den til vår avhengighetssporer med følgende kommando. Dette oppretter en fil som heter requirements.txtog lagrer Python-bibliotekene våre slik at vi kan installere dem på nytt på et senere tidspunkt.
pip3 freeze > requirements.txt
Spørre Word2Vec-modellen
Til å begynne med vil vi lage en fil for å håndtere åpning og spørring etter ordet innebygginger.
touch model.py
Deretter legger vi til følgende linjer for model.pyå importere Magnitude.
from pymagnitude import Magnitude
vectors = Magnitude('GoogleNews-vectors-negative300.magnitude')
Vi kan leke med pymagnitudepakken og dyplæringsmodellen ved å bruke querymetoden og gi et argument for et ord.
cat_vector = vectors.query('cat')
print(cat_vector)
For kjernen av API-en vår vil vi definere en funksjon for å returnere forskjellen i betydning mellom to ord. Dette er ryggraden for de fleste dyplæringsløsninger for ting som anbefalingsmotorer (dvs. å vise innhold med lignende ord).
Vi kan leke seg med denne funksjonen ved å bruke similarityog most_similar funksjoner.
print(vectors.similarity("cat", "dog"))
print(vectors.most_similar("cat", topn=100))
Vi implementerer likhetskalkulatoren som følger. Denne metoden vil bli kalt opp av Flask API i neste seksjon. Merk at denne funksjonen returnerer en reell verdi mellom 0 og 1.
def similarity(word1, word2):
return vectors.similarity(word1, word2)
Opprette en REST API
Vi oppretter serveren vår i en fil som heter service.pyfølgende innhold. Vi importerer flaskog requesthåndterer serverfunksjonene våre, og vi importerer similaritymotoren fra modulen vi skrev tidligere.
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)
Serveren vår er ganske naken, men kan enkelt utvides ved å lage flere ruter ved å bruke @app.routedekoratoren.
Foreta API-anrop
Vi kan kjøre Flask-serveren vår ved å kjøre følgende kommandoer for å aktivere vårt virtuelle miljø, installere pakkene våre og kjøre den tilhørende Python-filen.
source venv/bin/activate
pip3 install -r requirements.txt
python3 service.py
Serveren vår vil være tilgjengelig kl localhost:8000. Vi kan spørre databasen vår på localhost:8000/similarity?word1=cat&word2=dogog se svaret enten i nettleseren vår eller gjennom en annen AJAX-klient.