تم إعداد ترجمة المقال خصيصًا لطلاب الدورة التدريبية "مطور ويب في بيثون" .
إن إنشاء مشروع تعلُّم آلي رائع هو شيء ، شيء آخر عندما تحتاج إلى أشخاص آخرين ليكونوا قادرين على رؤيته أيضًا. بالطبع ، يمكنك وضع المشروع بالكامل على جيثب ، ولكن كيف سيفهم أجدادك ما الذي فعلته؟ لا ، نحتاج إلى نشر نموذج التعلم العميق الخاص بنا كتطبيق ويب سيكون متاحًا لأي شخص في العالم.
في هذه المقالة ، سوف نتعلم كيفية كتابة تطبيق ويب يستخدم الشبكة العصبية المتكررة المدربة في Keras ويسمح للمستخدمين بإنشاء تعليقات توضيحية جديدة لبراءات الاختراع. يعتمد هذا المشروع على عمل مقال
"الشبكات العصبية المتكررة حسب المثال" ، ومع ذلك ، فإنه ليس من الضروري معرفة كيفية بناء RNN الآن. في الوقت الحالي ، سوف نعتبره مجرد مربع أسود: لقد حددنا التسلسل الأولي ، وسيظهر تعليق براءة جديد تمامًا ، والذي يمكن مشاهدته في المستعرض!
عادة ، يقوم محللو البيانات بتطوير النماذج ، وعرضها على الواجهة الأمامية للعالم. في هذا المشروع ، سيتعين علينا أن نلعب الأدوار ونغوص في تطوير الشبكة (على الرغم من أن بيثون بالكامل تقريبًا).
سيتطلب هذا المشروع الجمع بين عدة أدوات:
في النهاية ، نحصل على تطبيق ويب يتيح للمستخدمين إنشاء تعليقات توضيحية جديدة تمامًا باستخدام براءة اختراع باستخدام شبكة عصبية متكررة مدربة.

كل رمز المشروع متاح على
جيثب .
النهج
كان الهدف هو نشر تطبيق الويب في أسرع وقت ممكن. لهذا ، اخترت Flask ، والذي يسمح لك بكتابة التطبيقات في Python. لا أحب العبث بالأنماط (أعتقد أنك رأيت بالفعل) ، لذلك أنا أنسخ وألصق جميع CSS تقريبًا من مصادر خارجية. هذه
المقالة من فريق Keras كانت مفيدة لتعلم الأساسيات ،
وهذه المقالة هي أيضًا دليل مفيد.
بشكل عام ، يلبي هذا المشروع مبادئ التصميم الخاصة بي: قم بإنشاء نموذج أولي يعمل بسرعة (نسخ ولصق أكبر قدر ممكن من التعليمات البرمجية) ، ثم كرر نفس الشيء لتحسين المنتج.
تطبيق الويب الأساسي على قارورة
أسرع طريقة لإنشاء تطبيق ويب Python هي استخدام Flask (http://flask.pocoo.org/). لإنشاء تطبيق خاص بنا ، يمكننا استخدام ما يلي:
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "<h1>Not Much Going On Here</h1>" app.run(host='0.0.0.0', port=50000)
إذا قمت بتشغيل هذا الرمز ، فسترى التطبيق الخاص بك على المضيف المحلي: 50000. بالطبع ، نحن بحاجة إلى شيء أكثر ، لذلك سوف نستخدم وظيفة أكثر تعقيدًا تفعل الشيء نفسه بشكل عام: تقوم بمعالجة الطلبات من متصفحك وتقدم بعض المحتوى في شكل HTML.
نموذج دخول المستخدم
عندما يذهب المستخدمون إلى الصفحة الرئيسية للتطبيق ، سنعرض لهم نموذجًا به ثلاثة خيارات:
- أدخل التسلسل المصدر لشبكة RNN أو قم بإنشائه عشوائيًا.
- اختيار "تنوع" تنبؤات RNN.
- اختيار عدد الكلمات الناتج من RNN.
لإنشاء نموذج في Python ، نستخدم
wtforms . سترى رمز إنشائه أدناه:
from wtforms import (Form, TextField, validators, SubmitField, DecimalField, IntegerField) class ReusableForm(Form): """User entry form for entering specifics for generation"""
باستخدامه ، أنشأنا النموذج الموضح أدناه (مع أنماط من
main.css
):

يلزم التحقق من الكود للتأكد من قيام المستخدم بإدخال المعلومات الصحيحة. على سبيل المثال ، نتحقق من ملء جميع الحقول ، وأن قيمة معلمة التنوع تتراوح بين 0.5 و 5. يجب أن تتحقق هذه الشروط للبدء.
خطأ في التحقق من صحة البيانات المدخلةنقوم بمعالجة هذا النموذج باستخدام قوالب على
Flask
.
قوالب
القالب هو ملف به "إطار" تم إعداده بالفعل ويحتاج ببساطة إلى تعبئته بطريقة معينة. بالنسبة لتطبيق ويب Flask ، يمكننا استخدام مكتبة قوالب
Jinja لترجمة رمز Python إلى مستند HTML. على سبيل المثال ، في وظيفتنا الرئيسية ، سنرسل محتويات النموذج إلى قالب يسمى
index.html
.
from flask import render_template
عندما ينتقل المستخدم إلى الصفحة الرئيسية ، سيوفر تطبيقنا
index.html
مدخلات من النموذج. القالب عبارة عن بنية HTML كاملة نشير فيها إلى متغيرات Python باستخدام بناء الجملة
{{variable}}
.
<!DOCTYPE html> <html> <head> <title>RNN Patent Writing</title> <link rel="stylesheet" href="/static/css/main.css"> <link rel="shortcut icon" href="/static/images/lstm.ico"> </head> <body> <div class="container"> <h1> <center>Writing Novel Patent Abstracts with Recurrent Neural Networks</center> </h1> {% block content %} {% for message in form.seed.errors %} <div class="flash">{{ message }}</div> {% endfor %} {% for message in form.diversity.errors %} <div class="flash">{{ message }}</div> {% endfor %} {% for message in form.words.errors %} <div class="flash">{{ message }}</div> {% endfor %} <form method=post> {{ form.seed.label }} {{ form.seed }} {{ form.diversity.label }} {{ form.diversity }} {{ form.words.label }} {{ form.words }} {{ form.submit }} </form> {% endblock %} </div> </body> </html>
عند حدوث خطأ في النموذج (الإدخال الذي لا يمكن التحقق منه) ، ستومض رسالة خطأ. بالإضافة إلى ذلك ، سيتم عرض النموذج كما في الملف أعلاه.
عندما يقوم المستخدم بإدخال المعلومات والنقر فوق
submit
(طلب
POST
) ، إذا كانت المعلومات صحيحة ، فإننا نعيد توجيه بيانات الإدخال إلى الوظيفة المقابلة لعمل تنبؤات باستخدام RNN المدربين. هذا يعني أنك تحتاج إلى تعديل
home()
.
from flask import request
الآن ، عندما يضغط المستخدم على "
submit
" وتصحح المعلومات التي تم إدخالها ، اعتمادًا على الإدخال ، يتم إرسال الإدخال إما
generate_random_start
أو
generate_from_seed
. تستخدم هذه الميزات نموذج Keras المدرّب لإنشاء براءة اختراع جديدة باستخدام
num_words
لمعلمات المستخدم
diversity
. يتم إرسال إخراج هذه الوظيفة ، بدوره ، بشكل عشوائي إلى قوالب
seeded.html
أو
seeded.html
لعرضها كصفحة ويب.
إنشاء التنبؤات باستخدام نموذج Keras المدرّب مسبقًا
تحتوي المعلمة المعلمة على نموذج Keras المدربين مسبقًا ، والذي يتم تحميله على النحو التالي:
from keras.models import load_model import tensorflow as tf def load_keras_model(): """Load in the pre-trained model""" global model model = load_model('../models/train-embeddings-rnn.h5')
(في الأساس ، هناك حل بديل يشبه
tf.get_default_graph()
)
لن أعرض وظيفتي استخدام بالكامل (الرمز الذي ستجده
هنا ) ، لأن كل ما تحتاج إلى فهمه هو أنهما يخزنان نموذج Keras المدرَّب بالفعل إلى جانب المعلمات ويقومان بالتنبؤات - تعليقات البراءة.
كلتا هاتين الدالتين تقوم بإرجاع سلسلة في Python باستخدام تنسيق HTML. يتم إرسال هذا الخط إلى قالب آخر ، والذي سيظهر كصفحة ويب. على سبيل المثال ، تقوم
random.html
بإرجاع HTML المنسق الذي يتم إرساله إلى
random.html
:
<!DOCTYPE html> <html> <header> <title>Random Starting Abstract </title> <link rel="stylesheet" href="/static/css/main.css"> <link rel="shortcut icon" href="/static/images/lstm.ico"> <ul> <li><a href="/">Home</a></li> </ul> </header> <body> <div class="container"> {% block content %} {{input|safe}} {% endblock %} </div> </body>
هنا نستخدم محرك قوالب
Jinja
مرة أخرى لعرض ملف HTML منسق. نظرًا لأن سلسلة Python تتم ترجمتها بالفعل إلى HTML ، فكل ما نحتاج إلى عرضه هو استخدام
{{input|safe}}
(حيث يمثل
input
متغير Python). ثم في
main.css
يمكننا إضافة أنماط إلى هذه الصفحة ، بالإضافة إلى صفحات HTML الأخرى.
نتيجة العمل
تحدد الدالة gener_random_start تعليقًا براءة اختراع توضيحيًا عشوائيًا كسلسلة إدخال وتقوم بالتنبؤات بناءً عليه. ثم يعرض تسلسل الإدخال وإخراج RNN الناتج والإخراج الفعلي:
يعتمد الإخراج على تسلسل إدخال عشوائي.تقبل الدالة gener_from_seed التسلسل الأولي الذي أدخله المستخدم ويبني التوقعات بناءً عليه. الإخراج على النحو التالي:
الناتج يعتمد على تسلسل إدخال المستخدم.على الرغم من أن النتائج لا تشكل دائمًا تسلسلًا منطقيًا ، إلا أنها تظهر أن الشبكة العصبية على دراية بأساسيات اللغة الإنجليزية. تم تدريبها على التنبؤ بكل كلمة تالية بناءً على الخمسين السابقة ومن ثم اختيار تعليق توضيحي مقنع. وفقًا لمعلمة
diversity
، قد يكون الإخراج عشوائيًا أو دوريًا تمامًا.
إطلاق التطبيق
لبدء التطبيق بنفسك ، كل ما عليك فعله هو تنزيل المستودع ، انتقل إلى الدليل الذي يوجد فيه النشر وأدخل
run_keras_server.py
. سيكون التطبيق متاحًا في
localhost:10000
.
بناءً على كيفية تكوين شبكة Wi-Fi المنزلية ، يجب أن تكون قادرًا على الوصول إلى التطبيق من أي جهاز كمبيوتر على الشبكة باستخدام عنوان IP الخاص بك.
الخطوات التالية
يعد تطبيق الويب الذي يتم تشغيله على الكمبيوتر الشخصي مفيدًا لمشاركته مع الأصدقاء والعائلة. ومع ذلك ، أنا بالتأكيد لا أوصي بفتحها للجميع على شبكتك المنزلية. سنتعلم لاحقًا كيفية نشر التطبيق على
AWS EC2 وأخيراً عرضه على العالم.
لتحسين التطبيق ، يمكنك تغيير الأنماط (
في main.css ) ، واختياريا ، إضافة معلمات إضافية ، مثل القدرة على اختيار
شبكة مدربة مسبقا. إن الشيء العظيم في المشاريع الشخصية هو أنه يمكنك تطويرها طالما أردت. إذا كنت تريد اللعب مع التطبيق ،
فقم بتنزيل
المستودع وابدأ .

استنتاج
في هذه المقالة ، تعلمنا كيفية نشر نموذج التعلم العميق المدروس مسبقًا في Keras كتطبيق ويب. هذا يتطلب تكامل عدد من التقنيات المختلفة ، بما في ذلك الشبكات العصبية المتكررة ، تطبيقات الويب ، القوالب ، HTML ، CSS ، وبالطبع
Python .
على الرغم من أن هذا تطبيق أساسي ، إلا أنه يوضح أنه يمكنك إنشاء تطبيقات ويب باستخدام التعلم العميق بجهد قليل نسبيًا. قليل من الناس يستطيعون أن يقولوا إنهم تمكنوا من نشر نموذج التعلم العميق في شكل تطبيق ويب ، ولكن إذا اتبعت الإرشادات الواردة في هذه المقالة ، فيمكنك أن تصبح أحدهم!