แนวทางการพัฒนาแบบดั้งเดิมนั้นยากที่จะรักษาเมื่อใช้โมเดลการเรียนรู้ของเครื่องที่ซับซ้อนในการผลิต การพัฒนาบนแล็ปท็อปหรือเครื่องในท้องถิ่นอาจช้าในการฝึกอบรมรูปแบบการเรียนรู้ของเครื่องสำหรับวิศวกรการเรียนรู้ลึก เป็นผลให้เรามักจะใช้ประโยชน์จากเครื่องคลาวด์ที่มีฮาร์ดแวร์ที่มีประสิทธิภาพมากขึ้นในการฝึกอบรมและใช้รูปแบบการเรียนรู้ของเครื่องของเรา นี่เป็นแนวปฏิบัติที่ดีเนื่องจากเราสรุปการคำนวณที่ซับซ้อนและทำการร้องขอ AJAX ตามความจำเป็น ในบทช่วยสอนนี้เราจะทำให้รูปแบบการเรียนรู้ลึกที่ได้รับการฝึกฝนมาก่อนชื่อ Word2Vec พร้อมใช้งานสำหรับบริการอื่น ๆ โดยการสร้าง REST API ขึ้นมาใหม่
ข้อกำหนดเบื้องต้น
- อินสแตนซ์เซิร์ฟเวอร์ Ubuntu 16.04 ที่มี RAM อย่างน้อย 4GB สำหรับการทดสอบและการพัฒนาคุณสามารถเลือกอินสแตนซ์ที่มี 4GB RAM
- การทำความเข้าใจเกี่ยวกับวิธีใช้ระบบปฏิบัติการ Linux เพื่อสร้าง / นำทาง / แก้ไขโฟลเดอร์และไฟล์
sudo
ผู้ใช้
Word Embeddings คืออะไร?
Word embeddings เป็นการพัฒนาล่าสุดในการประมวลผลภาษาธรรมชาติและการเรียนรู้เชิงลึกที่ปฏิวัติทั้งสองสาขาเนื่องจากความก้าวหน้าอย่างรวดเร็ว คำว่า embeddings เป็นหลักเวกเตอร์ที่แต่ละคนตรงกับคำเดียวที่เวกเตอร์หมายถึงคำ king - queen = boy - girl
นี้สามารถแสดงให้เห็นถึงปรากฏการณ์บางอย่างเช่นเวกเตอร์สำหรับ เวกเตอร์คำใช้เพื่อสร้างทุกสิ่งจากเอนจิ้นการแนะนำไปจนถึงบอทแชทที่เข้าใจภาษาอังกฤษได้จริง
การใส่คำใน Word ไม่ใช่การสุ่ม พวกมันถูกสร้างขึ้นโดยการฝึกอบรมโครงข่ายประสาทเทียม การฝังคำที่มีประสิทธิภาพเมื่อเร็ว ๆ นี้มาจาก Google ชื่อ Word2Vec ซึ่งได้รับการฝึกฝนโดยการคาดการณ์คำที่ปรากฏถัดจากคำอื่น ๆ ในภาษา ยกตัวอย่างเช่นคำว่า"cat"
เครือข่ายประสาทจะคาดการณ์คำและ"kitten"
"feline"
สัญชาตญาณของคำที่ปรากฎอยู่ใกล้กันทำให้เราสามารถวางคำเหล่านั้นในปริภูมิเวกเตอร์
อย่างไรก็ตามในทางปฏิบัติเรามักจะใช้โมเดลที่ผ่านการฝึกอบรมมาก่อนของ บริษัท ขนาดใหญ่อื่น ๆ เช่น Google เพื่อสร้างต้นแบบอย่างรวดเร็วและทำให้กระบวนการปรับใช้ง่ายขึ้น ในบทช่วยสอนนี้เราจะดาวน์โหลดและใช้งาน Word2Vec ของคำศัพท์ก่อนแต่งงาน เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้ในไดเรกทอรีการทำงานของเรา
wget http://magnitude.plasticity.ai/word2vec/GoogleNews-vectors-negative300.magnitude
การติดตั้งแพคเกจขวดและขนาด
รูปแบบการฝังคำที่เราดาวน์โหลดนั้นอยู่ใน.magnitude
รูปแบบ รูปแบบนี้ช่วยให้เราสามารถสืบค้นรูปแบบได้อย่างมีประสิทธิภาพโดยใช้ SQL และเป็นรูปแบบการฝังที่เหมาะสมที่สุดสำหรับเซิร์ฟเวอร์ที่ใช้งานจริง เนื่องจากเราจำเป็นต้องอ่าน.magnitude
รูปแบบเราจะติดตั้งpymagnitude
แพคเกจ นอกจากนี้เราจะติดตั้งflask
เพื่อให้บริการการคาดการณ์การเรียนรู้เชิงลึกที่ทำโดยโมเดลในภายหลัง
pip3 install pymagnitude flask
เราจะเพิ่มลงในตัวติดตามการพึ่งพาของเราด้วยคำสั่งดังต่อไปนี้ สิ่งนี้จะสร้างชื่อไฟล์requirements.txt
และบันทึกไลบรารี Python ของเราเพื่อให้เราสามารถติดตั้งใหม่ได้ในภายหลัง
pip3 freeze > requirements.txt
การสอบถามรุ่น Word2Vec
ในการเริ่มต้นเราจะสร้างไฟล์เพื่อจัดการการเปิดและการสืบค้นคำว่า embeddings
touch model.py
ต่อไปเราจะเพิ่มบรรทัดต่อไปนี้model.py
เพื่อนำเข้าขนาด
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
โปรแกรมจากโมดูลที่เราเขียนไว้ก่อนหน้านี้
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 อื่น