Pendekatan tradisional terhadap pembangunan sukar dijaga apabila menggunakan model pembelajaran mesin kompleks dalam pengeluaran. Pembangunan pada komputer riba atau mesin tempatan boleh menjadi lambat untuk melatih model pembelajaran mesin untuk jurutera pembelajaran yang mendalam. Hasilnya, kami biasanya menggunakan mesin cloud dengan perkakasan yang lebih kuat untuk melatih dan menjalankan model pembelajaran mesin kami. Ini adalah amalan yang baik kerana kita mengira pengiraan yang kompleks dan sebaliknya membuat permintaan AJAX seperti yang diperlukan. Dalam tutorial ini, kami akan membuat model pembelajaran mendalam yang terdahulu yang dinamakan Word2Vec tersedia untuk perkhidmatan lain dengan membina API REST dari bawah ke atas.
Prasyarat
- Contoh pelayan Ubuntu 16.04 dengan sekurang-kurangnya 4GB RAM. Untuk tujuan pengujian dan pengembangan, anda dapat memilih instance dengan RAM 4GB
- Memahami cara menggunakan sistem operasi Linux untuk membuat / menavigasi / mengedit folder dan fail
- Seorang
sudo
pengguna
Apakah Penyataan Kata?
Penyisipan kata adalah perkembangan baru-baru ini dalam pemrosesan bahasa semula jadi dan pembelajaran mendalam yang telah merevolusikan kedua bidang kerana kemajuan yang pesat. Penyisipan kata pada dasarnya adalah vektor yang masing-masing sesuai dengan satu kata sehingga vektor bermaksud perkataan. Ini dapat ditunjukkan oleh fenomena tertentu seperti vektor untuk king - queen = boy - girl
. Vektor kata digunakan untuk membina segalanya dari mesin cadangan hingga bot sembang yang benar-benar memahami bahasa Inggeris.
Perkahwinan perkataan tidak rawak; ia dijana dengan melatih rangkaian saraf. Pelaksanaan embedding perkataan berkuasa baru-baru ini datang dari Google bernama Word2Vec yang dilatih dengan meramalkan kata-kata yang muncul di sebelah kata-kata lain dalam bahasa. Sebagai contoh, untuk perkataan "cat"
, rangkaian saraf akan meramalkan perkataan "kitten"
dan "feline"
. Intuisi kata-kata yang muncul berhampiran satu sama lain membolehkan kita meletakkannya di ruang vektor.
Walau bagaimanapun, dalam praktiknya, kita cenderung menggunakan model pra-terlatih syarikat-syarikat besar lain seperti Google untuk mempercepatkan prototaip dan mempermudah proses penyebaran. Dalam tutorial ini, kami akan memuat turun dan menggunakan perkahwinan perkataan Word2Vec Google yang terlatih. Kita boleh melakukan ini dengan menjalankan arahan berikut dalam direktori kerja kami.
wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude
Memasang Flask dan Pakej Magnitud
Model embedding perkataan yang dimuat turun kami dalam .magnitude
format. Format ini membolehkan kami untuk mengkaji model dengan cekap menggunakan SQL, dan oleh itu format penyemakan optimum untuk pelayan pengeluaran. Oleh kerana kita perlu membaca .magnitude
format, kita akan memasang pymagnitude
pakej tersebut. Kami juga akan memasang flask
untuk kemudian menyampaikan ramalan pembelajaran mendalam yang dibuat oleh model.
pip3 install pymagnitude flask
Kami juga akan menambahnya kepada pelacak pergantungan kami dengan arahan berikut. Ini mewujudkan fail bernama requirements.txt
dan menyelamatkan perpustakaan Python kami supaya kami boleh memasangnya semula pada masa akan datang.
pip3 freeze > requirements.txt
Meminta Model Word2Vec
Untuk memulakan, kami akan membuat fail untuk mengendalikan pembukaan dan pertanyaan perkahwinan perkataan.
touch model.py
Seterusnya, kami akan menambah garisan berikut model.py
untuk mengimport magnitud.
from pymagnitude import Magnitude
vectors = Magnitude('GoogleNews-vectors-negative300.magnitude')
Kita boleh bermain-main dengan pymagnitude
pakej dan model pembelajaran mendalam dengan menggunakan query
kaedah ini, memberikan hujah untuk satu perkataan.
cat_vector = vectors.query('cat')
print(cat_vector)
Untuk inti API kami, kami akan menentukan fungsi untuk mengembalikan perbezaan makna antara dua perkataan. Ini adalah tulang belakang bagi kebanyakan penyelesaian pembelajaran mendalam untuk perkara seperti mesin cadangan (iaitu menunjukkan kandungan dengan perkataan yang serupa).
Kita boleh bermain-main dengan fungsi ini dengan menggunakan similarity
dan most_similar
fungsi.
print(vectors.similarity("cat", "dog"))
print(vectors.most_similar("cat", topn=100))
Kami melaksanakan kalkulator keserupaan seperti berikut. Kaedah ini akan dipanggil oleh Flask API di bahagian seterusnya. Perhatikan bahawa fungsi ini mengembalikan nilai sebenar antara 0 dan 1.
def similarity(word1, word2):
return vectors.similarity(word1, word2)
Mewujudkan API REST
Kami akan membuat pelayan kami dalam fail bernama service.py
dengan kandungan berikut. Kami mengimport flask
dan request
mengendalikan keupayaan pelayan kami dan kami mengimport similarity
enjin dari modul yang kami tulis sebelum ini.
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)
Pelayan kami agak tulang yang telanjang, tetapi dengan mudah boleh dilanjutkan dengan membuat lebih banyak laluan menggunakan @app.route
penghias.
Membuat Panggilan API
Kami boleh menjalankan pelayan Flask kami dengan menjalankan arahan berikut untuk mengaktifkan persekitaran maya kami, memasang pakej kami, dan menjalankan fail Python yang berkaitan.
source venv/bin/activate
pip3 install -r requirements.txt
python3 service.py
Pelayan kami akan tersedia di localhost:8000
. Kami boleh menanyakan pangkalan data kami localhost:8000/similarity?word1=cat&word2=dog
dan melihat respons sama ada dalam pelayar kami atau melalui klien AJAX yang lain.