Προαπαιτούμενα
Τι είναι οι ενσωματώσεις λέξεων;
Εγκατάσταση των πακέτων Flask and Magnitude
Ερώτηση για το μοντέλο Word2Vec
Δημιουργία REST API
Πραγματοποίηση κλήσεων API
Οι παραδοσιακές προσεγγίσεις ανάπτυξης είναι δύσκολο να διατηρηθούν όταν χρησιμοποιούνται πολύπλοκα μοντέλα μηχανικής μάθησης στην παραγωγή. Η ανάπτυξη σε φορητό υπολογιστή ή τοπικό μηχάνημα μπορεί να είναι αργή για την εκπαίδευση του μοντέλου μηχανικής εκμάθησης για μηχανικούς βαθιάς μάθησης. Ως αποτέλεσμα, χρησιμοποιούμε συνήθως μηχανές cloud με πιο ισχυρό υλικό για την εκπαίδευση και την εκτέλεση των μοντέλων μηχανικής εκμάθησης. Αυτή είναι καλή πρακτική, καθώς αφαιρούμε πολύπλοκους υπολογισμούς και αντ' αυτού κάνουμε αιτήσεις AJAX όπως απαιτείται. Σε αυτό το σεμινάριο, θα κάνουμε ένα προεκπαιδευμένο μοντέλο βαθιάς εκμάθησης που ονομάζεται Word2Vec διαθέσιμο σε άλλες υπηρεσίες δημιουργώντας ένα REST API από την αρχή.
Προαπαιτούμενα
- Μια παρουσία διακομιστή Ubuntu 16.04 με τουλάχιστον 4 GB RAM. Για σκοπούς δοκιμής και ανάπτυξης, μπορείτε να επιλέξετε μια παρουσία με 4 GB RAM
- Κατανόηση του τρόπου χρήσης του λειτουργικού συστήματος Linux για τη δημιουργία/πλοήγηση/επεξεργασία φακέλων και αρχείων
- Ένας
sudoχρήστης
Τι είναι οι ενσωματώσεις λέξεων;
Οι ενσωματώσεις λέξεων είναι μια πρόσφατη εξέλιξη στην επεξεργασία φυσικής γλώσσας και τη βαθιά εκμάθηση που έχει φέρει επανάσταση και στους δύο τομείς λόγω της ταχείας προόδου. Οι ενσωματώσεις λέξεων είναι ουσιαστικά διανύσματα που το καθένα αντιστοιχεί σε μία μόνο λέξη έτσι ώστε τα διανύσματα να σημαίνουν τις λέξεις. Αυτό μπορεί να αποδειχθεί από ορισμένα φαινόμενα όπως το διάνυσμα για king - queen = boy - girl. Τα διανύσματα λέξεων χρησιμοποιούνται για τη δημιουργία τα πάντα, από μηχανές συστάσεων έως ρομπότ συνομιλίας που καταλαβαίνουν πραγματικά την αγγλική γλώσσα.
Οι ενσωματώσεις λέξεων δεν είναι τυχαίες. παράγονται με την εκπαίδευση ενός νευρωνικού δικτύου. Μια πρόσφατη ισχυρή εφαρμογή ενσωμάτωσης λέξεων προέρχεται από την Google με το όνομα Word2Vec, η οποία εκπαιδεύεται με την πρόβλεψη λέξεων που εμφανίζονται δίπλα σε άλλες λέξεις σε μια γλώσσα. Για παράδειγμα, για τη λέξη "cat", το νευρωνικό δίκτυο θα προβλέψει τις λέξεις "kitten"και "feline". Αυτή η διαίσθηση των λέξεων που εμφανίζονται η μία κοντά στην άλλη μας επιτρέπει να τις τοποθετήσουμε σε διανυσματικό χώρο.
Ωστόσο, στην πράξη, τείνουμε να χρησιμοποιούμε τα προεκπαιδευμένα μοντέλα άλλων μεγάλων εταιρειών, όπως η Google, προκειμένου να πρωτοτυποποιήσουμε γρήγορα και να απλοποιήσουμε τις διαδικασίες ανάπτυξης. Σε αυτό το σεμινάριο θα κατεβάσουμε και θα χρησιμοποιήσουμε προεκπαιδευμένες ενσωματώσεις λέξεων Word2Vec της Google. Μπορούμε να το κάνουμε αυτό εκτελώντας την ακόλουθη εντολή στον κατάλογο εργασίας μας.
wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude
Εγκατάσταση των πακέτων Flask and Magnitude
Το μοντέλο ενσωμάτωσης λέξης που κατεβάσαμε είναι σε .magnitudeμορφή. Αυτή η μορφή μας επιτρέπει να υποβάλουμε ερωτήματα στο μοντέλο αποτελεσματικά χρησιμοποιώντας SQL και επομένως είναι η βέλτιστη μορφή ενσωμάτωσης για διακομιστές παραγωγής. Επειδή πρέπει να μπορούμε να διαβάζουμε τη .magnitudeμορφή, θα εγκαταστήσουμε το pymagnitudeπακέτο. Θα εγκαταστήσουμε επίσης flaskγια να εξυπηρετήσουμε αργότερα τις προβλέψεις βαθιάς μάθησης που έγιναν από το μοντέλο.
pip3 install pymagnitude flask
Θα το προσθέσουμε επίσης στο πρόγραμμα παρακολούθησης εξάρτησης με την ακόλουθη εντολή. Αυτό δημιουργεί ένα αρχείο με το όνομα requirements.txtκαι αποθηκεύει τις βιβλιοθήκες μας Python ώστε να μπορούμε να τις εγκαταστήσουμε ξανά αργότερα.
pip3 freeze > requirements.txt
Ερώτηση για το μοντέλο Word2Vec
Αρχικά, θα δημιουργήσουμε ένα αρχείο για να χειριστούμε το άνοιγμα και το ερώτημα για τις ενσωματώσεις λέξεων.
touch model.py
Στη συνέχεια, θα προσθέσουμε τις ακόλουθες γραμμές για model.pyνα εισαγάγουμε το Magnitude.
from pymagnitude import Magnitude
vectors = Magnitude('GoogleNews-vectors-negative300.magnitude')
Μπορούμε να παίξουμε με το pymagnitudeπακέτο και το μοντέλο βαθιάς μάθησης χρησιμοποιώντας τη queryμέθοδο, παρέχοντας ένα επιχείρημα για μια λέξη.
cat_vector = vectors.query('cat')
print(cat_vector)
Για τον πυρήνα του API μας, θα ορίσουμε μια συνάρτηση για την επιστροφή της διαφοράς στο νόημα μεταξύ δύο λέξεων. Αυτή είναι η ραχοκοκαλιά για τις περισσότερες λύσεις βαθιάς εκμάθησης για πράγματα όπως οι μηχανές συστάσεων (δηλαδή εμφάνιση περιεχομένου με παρόμοιες λέξεις).
Μπορούμε να παίξουμε με αυτή τη συνάρτηση χρησιμοποιώντας τις συναρτήσεις similarityκαι most_similar .
print(vectors.similarity("cat", "dog"))
print(vectors.most_similar("cat", topn=100))
Υλοποιούμε τον υπολογιστή ομοιότητας ως εξής. Αυτή η μέθοδος θα κληθεί από το Flask API στην επόμενη ενότητα. Σημειώστε ότι αυτή η συνάρτηση επιστρέφει μια πραγματική τιμή μεταξύ 0 και 1.
def similarity(word1, word2):
return vectors.similarity(word1, word2)
Δημιουργία REST API
Θα δημιουργήσουμε τον διακομιστή μας σε ένα αρχείο service.pyμε όνομα με τα ακόλουθα περιεχόμενα. Εισάγουμε flaskκαι requestγια να χειριστούμε τις δυνατότητες του διακομιστή μας και εισάγουμε τον similarityκινητήρα από το module που γράψαμε νωρίτερα.
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)
Ο διακομιστής μας είναι μάλλον γυμνός, αλλά μπορεί εύκολα να επεκταθεί δημιουργώντας περισσότερες διαδρομές χρησιμοποιώντας το @app.routeδιακοσμητή.
Πραγματοποίηση κλήσεων API
Μπορούμε να εκτελέσουμε τον διακομιστή μας Flask εκτελώντας τις ακόλουθες εντολές για να ενεργοποιήσουμε το εικονικό μας περιβάλλον, να εγκαταστήσουμε τα πακέτα μας και να εκτελέσουμε το σχετικό αρχείο Python.
source venv/bin/activate
pip3 install -r requirements.txt
python3 service.py
Ο διακομιστής μας θα είναι διαθέσιμος στο localhost:8000. Μπορούμε να ρωτήσουμε τη βάση δεδομένων μας localhost:8000/similarity?word1=cat&word2=dogκαι να προβάλουμε την απάντηση είτε στο πρόγραμμα περιήγησής μας είτε μέσω άλλου πελάτη AJAX.