نشر نماذج معالجة اللغة الطبيعية (NLP) كواجهة API: دليل شامل مع Algorithmia
هل تعلم أن 90% من نماذج التعلم الآلي لا تصل أبدًا إلى مرحلة الإنتاج؟ هذا يعني أن موضوع نشر نماذج التعلم الآلي نادرًا ما يُناقش عندما يتعلم الناس هذا المجال. ونتيجة لذلك، يعرف العديد من ممارسي الذكاء الاصطناعي كيفية إنشاء نماذج تعلم آلي مفيدة، لكنهم يجدون صعوبة في نشرها في بيئة الإنتاج. وغني عن القول، إن نشر نماذج التعلم الآلي يُعد إحدى أهم المهارات التي يجب أن تمتلكها إذا كنت ستعمل مع هذه النماذج.

نشر النموذج هو عملية دمج نموذجك في بيئة إنتاج موجودة. سيتلقى النموذج مدخلات ويتنبأ بمخرجات لاتخاذ القرارات لحالة استخدام محددة. على سبيل المثال، يمكن نشر نموذج في موقع للتجارة الإلكترونية ويمكنه التنبؤ بما إذا كانت مراجعة حول منتج معين إيجابية أم سلبية. فقط عندما يتم دمج النموذج بالكامل مع أنظمة الأعمال، يمكننا استخلاص قيمة حقيقية من تنبؤاته. – كريستوفر سامي الله
هناك طرق مختلفة يمكنك من خلالها نشر نموذج التعلم الآلي الخاص بك في بيئة الإنتاج. ولكن في مقال اليوم، ستتعلم كيفية نشر نموذج معالجة اللغة الطبيعية (NLP) الخاص بك في بيئة الإنتاج كواجهة برمجة تطبيقات (API) باستخدام منصة Algorithmia. في هذا المقال، ستتعلم:
- كيفية إنشاء نموذج
NLPيكتشف الرسائل النصية القصيرة العشوائية (spam SMS). - كيفية استخدام
Algorithmia، وهي منصة لعمليات التعلم الآلي (MLOps). - كيفية نشر نموذجك على منصة
Algorithmia. - كيفية استخدام نموذج
NLPالمنشور في أي تطبيقPython.
خطوتنا الأولى هي إنشاء نموذج تعلم آلي يمكنه اكتشاف الرسائل النصية القصيرة العشوائية. فلنبدأ!
بناء نموذج التعلم الآلي لاكتشاف الرسائل العشوائية
أولاً، نحتاج إلى بناء نموذجنا. فيما يلي الخطوات التي يجب عليك اتباعها للقيام بذلك.
استيراد حزم بايثون الأساسية
نقوم أولاً باستيراد جميع حزم Python المهمة التي سنستخدمها لتحميل البيانات، ومعالجتها مسبقًا، وإنشاء نموذج لتصنيف النصوص.
# import important modules
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from string import punctuation
# sklearn modules
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import SVC
from sklearn.metrics (
accuracy_score,
classification_report,
plot_confusion_matrix,
f1_score,
roc_auc_score,
)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import cross_val_score, RandomizedSearchCV
# text preprocessing modules
from nltk.tokenize import word_tokenize
from cleantext import clean
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import re #regular expression
from wordcloud import WordCloud, STOPWORDS
# Download dependency
for dependency in (
"brown",
"names",
"wordnet",
"averaged_perceptron_tagger",
"universal_tagset",
"stopwords"
):
nltk.download(dependency)
#nltk.download('stopwords')
import warnings
warnings.filterwarnings("ignore")
# seeding
np.random.seed(123)
تحميل مجموعة بيانات الرسائل العشوائية (Spam Dataset)
بعد ذلك، نقوم بتحميل مجموعة بيانات الرسائل العشوائية من دليل البيانات، كما يلي:
# load data
data = pd.read_csv("../data/spam.tsv", sep="\t")
دعنا نلقي نظرة على الصفوف الخمسة الأولى من مجموعة البيانات.
# show top five rows
data.head()
تحتوي مجموعة البيانات على أربعة أعمدة، لكننا سنركز فقط على عمودي message و label. دعنا نتحقق من شكل مجموعة البيانات:
# check the shape
data.shape
المخرجات:
(5572, 4)
لدينا 5572 صفًا و 4 أعمدة.
معالجة القيم المفقودة
أحيانًا قد تحتوي البيانات على قيم مفقودة. يمكننا استخدام طريقة isnull() من حزمة pandas للتحقق مما إذا كانت مجموعة البيانات لدينا تحتوي على أي قيم مفقودة.
# check missing values
data.isnull().sum()
تُظهر المخرجات أن مجموعة البيانات لدينا لا تحتوي على أي قيم مفقودة.
تقييم توزيع الفئات
يمكننا استخدام طريقة value_counts() من حزمة pandas لتقييم توزيع الفئات في مجموعة البيانات لدينا.
# evalute class distribution
data["label"].value_counts()
في مجموعة البيانات هذه، لدينا رسائل شرعية (ham) أكثر من الرسائل العشوائية (spam).
تحليل البيانات الاستكشافي (EDA)
هذه خطوة مهمة جدًا في إنشاء مشروع التعلم الآلي الخاص بك، حيث تساعدك على فهم المزيد عن مجموعة البيانات الخاصة بك. في هذه الخطوة، سنقوم بإيجاد الكلمات المتكررة التي تُستخدم في كل من الرسائل الشرعية والعشوائية.
# collect words from the dataset
def collect_words(data, label):
collected_words = " "
# iterate through the csv file
for val in data.message[data["label"] == label]:
# typecaste each val to string
val = str(val)
# split the value
tokens = val.split()
# Converts each token into lowercase
for i in range(len(tokens)):
tokens[i] = tokens[i].lower()
for words in tokens:
collected_words = collected_words + words + " "
return collected_words
الدالة أعلاه، المسماة collect_words()، ستقوم بجمع جميع الكلمات من مجموعة البيانات وفقًا لتصنيفاتها (ham أو spam). بعد ذلك، يمكننا تصور الكلمات المتكررة باستخدام حزمة wordcloud في Python. سنبدأ بالرسائل المصنفة كـ ham (شرعية).
# visualize ham labeled sms
cloud_stopwords = set(STOPWORDS)
ham_words = collect_words(data, label="ham")
print("Total words {}".format(len(ham_words)))
wordcloud = WordCloud(
width=1000,
height=1000,
background_color="white",
stopwords=cloud_stopwords,
min_font_size=10,
).generate(ham_words)
# plot the WordCloud image
plt.figure(figsize=(15, 8), facecolor=None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()
المخرجات:
Total words: 349132

كما ترون في الرسائل الشرعية، فإن الكلمات الأكثر تكرارًا هي will، gt، now، ok، call، want، got، وهكذا.
الآن يمكننا تصور الكلمات الأكثر تكرارًا في الرسائل المصنفة كـ spam.
# visualize spam labeled sms
cloud_stopwords = set(STOPWORDS)
spam_words = collect_words(data, label="spam")
print("Total words {}".format(len(spam_words)))
wordcloud = WordCloud(
width=1000,
height=1000,
background_color="white",
stopwords=cloud_stopwords,
min_font_size=10,
).generate(spam_words)
# plot the WordCloud image
plt.figure(figsize=(10, 8), facecolor=None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()
المخرجات:
Total words: 104304

في الشكل أعلاه، يظهر أن الكلمات الأكثر تكرارًا هي call، claim، free، txt، mobile، reply، offer، وهكذا.
معالجة البيانات (Data Preprocessing)
بعد استكشاف وتحليل مجموعة البيانات، الخطوة التالية هي معالجة مجموعة البيانات لتكون في التنسيق الصحيح قبل إنشاء نموذج التعلم الآلي الخاص بنا. نقوم أولاً باستبدال فئتي ham و spam بقيم عددية. سيتم تصنيف فئة ham على أنها 0 وفئة spam على أنها 1.
# replace ham to 0 and spam to 1
new_data = data.replace({"ham": 0, "spam": 1})
new_data.head()
تحتوي الرسائل في مجموعة البيانات هذه على الكثير من الكلمات والأحرف غير الضرورية التي لا نحتاجها عند إنشاء نماذج التعلم الآلي. سنقوم بتنظيف الرسائل عن طريق إزالة الكلمات المتوقفة (stopwords)، والأرقام، وعلامات الترقيم. ثم سنقوم بتحويل الكلمات إلى أحرف صغيرة، وأخيرًا تحويل كل كلمة إلى شكلها الأساسي باستخدام عملية التجذير (lemmatization) في حزمة NLTK. ستتولى دالة text_cleaning() جميع الخطوات الضرورية لتنظيف مجموعة البيانات لدينا.
stop_words = stopwords.words('english')
def text_cleaning(text, remove_stop_words=True, lemmatize_words=True):
# Clean the text, with the option to remove stop_words and to lemmatize word
# Clean the text
text = re.sub(r"[^A-Za-z0-9]", " ", text)
text = re.sub(r"\'s", " ", text)
text = re.sub(r"n't", " not ", text)
text = re.sub(r"I'm", "I am", text)
text = re.sub(r"ur", " your ", text)
text = re.sub(r" nd ", " and ",text)
text = re.sub(r"\'d", " would ", text)
text = re.sub(r"\'ll", " will ", text)
text = re.sub(r" tkts ", " tickets ",text)
text = re.sub(r" c ", " can ",text)
text = re.sub(r" e g ", " eg ", text)
text = re.sub(r'http\S+', ' link ', text)
text = re.sub(r'\b\d+(?:\.\d+)?\s+', '', text) # remove numbers
text = re.sub(r" u ", " you ",text)
text = text.lower() # set in lowercase
# Remove punctuation from text
text = ''.join([c for c in text if c not in punctuation])
# Optionally, remove stop words
if remove_stop_words:
text = text.split()
text = [w for w in text if not w in stop_words]
text = " ".join(text)
# Optionally, shorten words to their stems
if lemmatize_words:
text = text.split()
lemmatizer = WordNetLemmatizer()
lemmatized_words = [lemmatizer.lemmatize(word) for word in text]
text = " ".join(lemmatized_words)
# Return a list of words
return (text)
الآن يمكننا تنظيف مجموعة البيانات لدينا باستخدام دالة text_cleaning().
#clean the dataset
new_data["clean_message"] = new_data["message"].apply(text_cleaning)
ثم نقوم بتقسيم مجموعة البيانات لدينا إلى بيانات تدريب واختبار. حجم بيانات الاختبار هو 15% من إجمالي مجموعة البيانات.
# split data into train and test
X_train, X_test, y_train, y_test = train_test_split(
new_data["clean_message"],
new_data["label"],
test_size=0.15,
random_state=0,
shuffle=True,
stratify=data["label"],
)
ستساعدنا طريقة CountVectorizer من مكتبة scikit-learn على تحويل مجموعة البيانات النظيفة لدينا إلى قيم عددية. تقوم هذه الطريقة بتحويل مجموعة من المستندات النصية إلى مصفوفة من عدد التوكنات.
# Transform text data
vectorizer = CountVectorizer(lowercase=False)
vectorizer.fit(X_train)
#transform train data
X_train_trans = vectorizer.transform(X_train)
#transform test data
X_text_trans = vectorizer.transform(X_test)
إنشاء النموذج الفعلي
سنقوم بتدريب خوارزمية Multinomial Naive Bayes لتصنيف ما إذا كانت الرسالة شرعية أم عشوائية. هذه إحدى الخوارزميات الأكثر شيوعًا المستخدمة لتصنيف النصوص.
# Create a classifier
spam_classifier = MultinomialNB()
ثم نقوم بتدريب المصنف الخاص بنا باستخدام التحقق المتقاطع (cross-validation) لتجنب الإفراط في الملاءمة (overfitting).
# Train the model with cross validation
scores = cross_val_score(spam_classifier,X_train_trans,y_train,cv=10,verbose=3,n_jobs=-1)
دعنا نرى متوسط الدرجة.
# find the mean of the all scores
scores.mean()
المخرجات:
0.9767713936539371
متوسط الدرجات حوالي 97.68%. يعمل نموذجنا بشكل جيد، ولكن يمكننا تحسين أدائه عن طريق تحسين قيم المعاملات الفائقة (hyperparameter values) باستخدام طريقة البحث العشوائي (Randomized Search) من scikit-learn.
# fine turning model parameters
distribution = {"alpha": [1, 0.1, 0.01, 0.001, 0.0001, 0, 0.2, 0.3]}
grid = RandomizedSearchCV(
spam_classifier,
param_distributions=distribution,
n_jobs=-1,
cv=10,
n_iter=20,
random_state=42,
return_train_score=True,
verbose=2,
)
سنقوم بتحسين المعامل الفائق alpha من نموذجنا للحصول على أفضل قيمة ستزيد من أداء نموذجنا.
# training with randomized search
grid.fit(X_train_trans, y_train)
لعرض نتائج تحسين المعاملات الفائقة:
# summarize the results of the random parameter search
print(grid.best_score_)
print(grid.best_estimator_)
print(grid.best_params_)
المخرجات:
0.9767713936539371
MultinomialNB(alpha=1)
{'alpha': 1}
أفضل درجة هي نفسها السابقة. الآن دعنا نختبر نموذجنا ببيانات الاختبار.
# predict on the test data
y_pred = spam_classifier.predict(X_text_trans)
سيتم تقييم أداء النموذج باستخدام مقياس التقييم accuracy_score.
# check accuracy score
accuracy_score(y_test, y_pred)
المخرجات:
0.9760765550239234
دقة نموذجنا حوالي 97.6%، وهو أداء جيد. مقياس تقييم آخر مفيد للاستخدام هو f1_score عندما يكون لديك عدم توازن في الفئات في مجموعة البيانات الخاصة بك.
# check f1_ score
f1_score(y_test, y_pred)
المخرجات:
0.908256880733945
الدرجة هي 0.91 وهي قريبة من 1. هذا يعني أن نموذجنا يتمتع بأداء جيد ويمكننا الآن نشره في بيئة الإنتاج. سيتم حفظ النموذج في دليل models.
#save model
import joblib
joblib.dump(spam_classifier, '../models/spam-detection-model.pkl')
المخرجات:
['../models/spam-detection-model.pkl']
سيتم حفظ Count Vectorizer الخاص بنا أيضًا في دليل preprocessing.
#save Vectorizer
joblib.dump(vectorizer,'../preprocessing/count_vectorizer.pkl')
المخرجات:
['../preprocessing/count_vectorizer.pkl']
بعد إنشاء نموذج اكتشاف الرسائل العشوائية الخاص بنا، حان الوقت لنشره على منصة Algorithmia.
ما هي منصة Algorithmia؟
Algorithmia هي أداة MLOps توفر طريقة بسيطة وأسرع لنشر نموذج التعلم الآلي الخاص بك في بيئة الإنتاج. تتخصص Algorithmia في تقديم “الخوارزميات كخدمة” (algorithms as a service). تسمح للمستخدمين بإنشاء مقتطفات برمجية (code snippets) تشغل نموذج التعلم الآلي وتستضيفها على Algorithmia. بعد ذلك، يمكنك استدعاء الكود الخاص بك كواجهة برمجة تطبيقات (API). الآن يمكن استخدام نموذجك لتطبيقات مختلفة من اختيارك، مثل تطبيقات الويب، تطبيقات الجوال، أو التجارة الإلكترونية، وذلك من خلال استدعاء بسيط لواجهة API من Algorithmia.

تدعم Algorithmia نماذج التعلم الآلي المطورة بلغات برمجة مختلفة مثل R، Python، Java، و Scala. كما تدعم أطر عمل التعلم الآلي والتعلم العميق الشائعة مثل Pytorch، Tensorflow، scikit-learn، XGBoost، و Keras. تستخدم Algorithmia كلاً من وحدات المعالجة المركزية (CPUs) ووحدات معالجة الرسوميات (GPUs) على طبقة الذكاء الاصطناعي الخالية من الخوادم (serverless Artificial Intelligence layer) لتحسين التكلفة وزيادة أدائها لتلبية احتياجاتك. حاليًا، تضم هذه المنصة أكثر من 60,000 مطور مع 4,500 خوارزمية.
إليك ست خطوات تحتاج إلى اتباعها لنشر نموذج التعلم الآلي الخاص بك على Algorithmia.
خطوات نشر نموذجك على Algorithmia
الخطوة 1: إنشاء حساب على Algorithmia
الخطوة الأولى هي إنشاء حساب في Algorithmia بزيارة هذه الصفحة: https://algorithmia.com/signup.
الخطوة 2: إنشاء خوارزمية جديدة (New Algorithm)
بعد إنشاء حسابك وتأكيده وبريدك الإلكتروني، الخطوة التالية هي إنشاء خوارزمية جديدة بالنقر على زر القائمة المنسدلة المسمى “Create New“. ثم ما عليك سوى تحديد “Algorithm” في الزاوية العلوية اليمنى من الصفحة.
ثم أدخل اسم الخوارزمية، على سبيل المثال SMS SPAM DETECTION. في قسم source code، يمكنك تحديد مكان وجود الكود المصدري لخوارزميتك. افتراضيًا، سيكون الكود المصدري على منصة Algorithmia. يمكنك اختيار الاحتفاظ به على GitHub، ولكن لهذا المقال سنستخدم الخيار الافتراضي. يحدد القسم التالي البيئة. تمنحك Algorithmia خيارات مختلفة لتحديد بيئات مختلفة مثل Python، R، JavaScript، Java، و Scala. الخيار الافتراضي هو Python 3.X، وهنا سنستمر مع هذا الخيار. أخيرًا، انقر على زر “Create new Algorithm“.
الخطوة 3: تحميل النموذج المدرب مسبقًا و CountVectorizer إلى Algorithmia
يمكنك تحميل النموذج الذي اخترته إلى قسم البيانات بالنقر على “Data Sources” في اللوحة اليسرى من منصة Algorithmia. ثم انقر على دليل “My hosted data” حيث يمكنك إنشاء مجلد جديد للاحتفاظ بجميع ملفات pkl التي تم تحميلها لهذه الخوارزمية المحددة. داخل دليل “My hosted data“، قمت بإنشاء مجلد جديد يسمى sms_spam_detection. ثم قمت بتحميل نموذجنا المدرب مسبقًا و CountVectorizer المدرب لتحويل الرسائل النصية (sms) إلى متجه من عدد المصطلحات/التوكنات.
الخطوة 4: إضافة الكود المصدري
بعد تحميل نموذجنا المدرب مسبقًا، انقر على علامة التبويب “Source Code“. سيفتح محرر بيئة تطوير متكاملة (IDE) حيث يمكنك إضافة الكود المصدري لتشغيل نموذج التعلم الآلي الذي أنشأناه. إليك كيفية إضافة الكود المصدري:
(أ) استيراد الحزم
نقوم أولاً باستيراد حزم Python المهمة بما في ذلك Algorithmia التي ستستدعي الخوارزمية التي أنشأناها.
import sys
import joblib
import pickle
import numpy as np
import Algorithmia
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from string import punctuation
import re
import nltk
#download dependency
nltk.download('stopwords')
nltk.download('wordnet')
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
ملاحظة: ستقوم منصة Algorithmia تلقائيًا باستيراد حزمة Algorithmia Python في الملف.
(ب) إنشاء العميل (Client)
بعد ذلك، نقوم بإنشاء عميل من حزمة Algorithmia الذي يوفر طريقة موحدة لاستدعاء أي خوارزمية.
# we are creating the variable in global scope to use throughout our algorithm.
client = Algorithmia.client()
(ج) إضافة دوال لتحميل ملفات النموذج المدرب مسبقًا و CountVectorizer
ستقوم دالة load_model() بتحميل نموذجنا المدرب مسبقًا من دليل مصدر البيانات، وستقوم دالة load_preprocessing() بتحميل ملف countvectorizer.
def load_preprocessing():
# Get file by name
# Open file and load model
file_path = 'data://Davis/sms_spam_detection/count-vectorizer.pkl'
object_path = client.file(file_path).getFile().name
# Open file and preprocessin object with
with open(object_path, 'rb') as f:
object = joblib.load(f)
return object
def load_model():
# Get file by name
# Open file and load model
file_path = 'data://Davis/sms_spam_detection/spam-detection-model.pkl'
model_path = client.file(file_path).getFile().name
# Open file and load model
with open(model_path, 'rb') as f:
model = joblib.load(f)
return model
# Load model outside of the apply function so it only gets loaded once
model = load_model()
vectorizer = load_preprocessing()
(د) إضافة دالة لتنظيف مدخلات النص
هنا سنستخدم نفس دالة text_cleaning() لتنظيف رسائل sms.
#set stopwords
stop_words = stopwords.words('english')
def text_cleaning(text, remove_stop_words=True, lemmatize_words=True):
# Clean the text, with the option to remove stop_words and to lemmatize word
# Clean the text
text = re.sub(r"[^A-Za-z0-9]", " ", text)
text = re.sub(r"\'s", " ", text)
text = re.sub(r"n't", " not ", text)
text = re.sub(r"I'm", "I am", text)
text = re.sub(r"ur", " your ", text)
text = re.sub(r" nd ", " and ", text)
text = re.sub(r"\'d", " would ", text)
text = re.sub(r"\'ll", " will ", text)
text = re.sub(r" tkts ", " tickets ", text)
text = re.sub(r" c ", " can ", text)
text = re.sub(r" e g ", " eg ", text)
text = re.sub(r'http\S+', ' link ', text)
text = re.sub(r'\b\d+(?:\.\d+)?\s+', '', text) # remove numbers
text = re.sub(r" u ", " you ", text)
text = text.lower() # set in lowercase
# Remove punctuation from text
text = ''.join([c for c in text if c not in punctuation])
# Optionally, remove stop words
if remove_stop_words:
text = text.split()
text = [w for w in text if not w in stop_words]
text = " ".join(text)
# Optionally, shorten words to their stems
if lemmatize_words:
text = text.split()
lemmatizer = WordNetLemmatizer()
lemmatized_words = [lemmatizer.lemmatize(word) for word in text]
text = " ".join(lemmatized_words)
# Return a list of words
return (text)
(هـ) إضافة دالة لمعالجة المدخلات مسبقًا
ستقوم طريقة process_input() بمعالجة رسالة sms المدخلة مسبقًا قبل إجراء التنبؤ.
def process_input(input):
# Preprocess and Create numpy array from the input
message = str(input)
clean_message = text_cleaning(message)
#vectorize the message
vect_message = vectorizer.transform([clean_message])
print(vect_message)
return vect_message
(و) إضافة دالة لتطبيق النموذج للتنبؤ
الدالة الأخيرة المسماة apply() ستكون مسؤولة عن إجراء التنبؤات من نص sms المعالج مسبقًا. ستعيد “normal message” إذا كانت الرسالة شرعية و “spam message” إذا كانت الرسالة عشوائية.
def apply(input):
# pefrom prediction from the input.
message = process_input(input)
prediction = model.predict(message)
if prediction[0] == 0:
return "normal message"
else:
return "spam message"
أخيرًا، نقوم بحفظ الكود المصدري المضاف في الملف.
الخطوة 5: إضافة الاعتمادات (Dependencies) إلى Algorithmia
انقر على علامة التبويب “dependencies” من واجهة المستخدم وأضف الحزم التالية التي يعتمد عليها نموذجنا:
numpyjoblibscikit-learn == 0.22.2.post1unidecodenltk == 3.5
ثم انقر على “save dependencies” في الزاوية اليمنى السفلية:
ملاحظة: ملف الاعتمادات في Algorithmia هو نفسه ملف requirements.txt الذي يسحب الاعتمادات المدرجة من PyPi. في صفحة المحرر، انقر على علامة التبويب “build” في الزاوية العلوية اليمنى لتثبيت جميع الاعتمادات المدرجة في ملف الاعتمادات. إذا تم تثبيت جميع الاعتمادات بنجاح، سترى أن إصدارًا معينًا من خوارزميتك أصبح الآن متصلاً بالإنترنت وجاهزًا للنشر.
الخطوة 6: نشر الخوارزمية
خطوتنا الأخيرة هي نشر الخوارزمية. هناك 3 خطوات لنشر خوارزمية: توثيق جميع التغييرات، إضافة مثال للمدخلات والمخرجات، وتكوين إعدادات الخوارزمية.
(أ) توثيق التغييرات (Document Changes)
سترى سجل التزاماتك وستتمكن من إضافة ملاحظة إصدار (release note).
(ب) إضافة مثال (Add an Example)
في هذا القسم، تقوم بإنشاء مثال لمدخلاتك ومخرجاتك حتى يتمكن المستخدمون من تجربة خوارزميتك.
(ج) تكوين إعدادات الخوارزمية (Configure Algorithm settings)
أخيرًا، تختار ما إذا كانت خوارزميتك ستكون عامة (مما يعني أن أي شخص يمكنه استدعاؤها) أو خاصة (مما يعني أن المالكين فقط يمكنهم استدعاؤها). تحتاج أيضًا إلى تعيين الإتاوة (royalty) ثم النقر على زر النشر (publish) في أسفل الصفحة.
لقد تم نشر نموذج NLP الخاص بنا بنجاح على منصة Algorithmia. دعنا نرى كيف يمكننا استخدام نموذجنا المنشور في تطبيق Python مثل Flask أو Django.
كيفية استخدام النموذج المنشور في تطبيق بايثون
كيفية تثبيت عميل Algorithmia Python
نقوم أولاً بتثبيت عميل Algorithmia Python باستخدام PIP. سيساعدنا هذا في استدعاء الكود الذي يشغل نموذج NLP.
pip install algorithmia
جمع مفتاح API
انقر على علامة التبويب “API Key” في لوحة الخوارزمية الخاصة بك لجمع مفتاح API الذي سيساعدك على استدعاء الكود الذي يشغل نموذج NLP.
إنشاء عميل Algorithmia
نقوم أولاً باستيراد حزمة Algorithmia Python ثم ننشئ كائن عميل الخوارزمية.
import Algorithmia
# Authenticate with your API key
apiKey = "YOUR_API_KEY"
# Create the Algorithmia client object
client = Algorithmia.client(apiKey)
استدعاء الخوارزمية
لاستدعاء الخوارزمية، نحتاج إلى إضافة اسم الخوارزمية مع إصدارها إلى كائن العميل الذي أنشأناه. الاسم هو “Davis/spam_detection/0.2.0“، والذي يتضمن اسم حسابك على Algorithmia متبوعًا باسم الخوارزمية التي أنشأناها. الجزء الأخير هو إصدار الخوارزمية (0.2.0).
# Create the algorithm object using the Summarizer algorithm
algo = client.algo('Davis/spam_detection/0.2.0')
# Pass in input required by algorithm
input_sms = "Win a £1000 cash prize or a prize worth £5000"
try:
# Get the result
print(algo.pipe(input_sms).result)
except Exception as error:
# Algorithm error if , for example, the input is not correctly formatted
print(error)
لهذا المثال، يتنبأ النموذج بأن الرسالة النصية هي “spam message“. رائع، إنه يعمل!
الخلاصة التقنية
يُبرز هذا المقال بوضوح الفجوة الكبيرة بين تطوير نماذج التعلم الآلي ونشرها الفعلي في بيئات الإنتاج. من خلال التركيز على منصة Algorithmia، يقدم الكاتب دليلًا عمليًا ومتسلسلًا يُمكّن المطورين من تجاوز التحديات التقليدية لنشر نماذج NLP. إن استخدام Algorithmia كحل MLOps يبسط عملية تحويل النموذج من بيئة التطوير إلى واجهة API جاهزة للاستهلاك، مما يقلل من التعقيد التشغيلي ويتيح للمؤسسات استخلاص القيمة الحقيقية من استثماراتها في الذكاء الاصطناعي بشكل أسرع وأكثر كفاءة. هذه المقاربة لا تضمن فقط قابلية التوسع والمرونة، بل تعزز أيضًا إمكانية دمج قدرات الذكاء الاصطناعي في تطبيقات الأعمال المختلفة بسلاسة.
تهانينا، لقد وصلت إلى نهاية هذا المقال! يمكنك تنزيل مجموعة البيانات والدفتر المستخدمين في هذا المقال من هنا: https://github.com/Davisy/SMS-Spam-Text-Classification
إذا تعلمت شيئًا جديدًا أو استمتعت بقراءة هذا المقال، يرجى مشاركته حتى يتمكن الآخرون من رؤيته. إلى ذلك الحين، نراكم في المنشور التالي! يمكن التواصل معي أيضًا على Twitter @Davis_McDavid.