نماذج لغة قوية + Scikit-learn = Scikit-LLM. قم بإجراء مهام تحليل النص أثناء التنقل بمساعدة هذه المكتبة.

Scikit-LLM عبارة عن حزمة Python تساعد على دمج نماذج اللغات الكبيرة (LLMs) في إطار عمل scikit-Learn. يساعد في إنجاز مهام تحليل النص. إذا كنت معتادًا على scikit-learn، فسيكون من الأسهل عليك العمل مع Scikit-LLM.

من المهم ملاحظة أن Scikit-LLM لا يحل محل scikit-learn. scikit-learn هي مكتبة للتعلم الآلي ذات الأغراض العامة ولكن Scikit-LLM مصممة خصيصًا لمهام تحليل النص.

الشروع في العمل مع Scikit-LLM

للبدء مع سيكيت-LLM، فستحتاج إلى تثبيت المكتبة وتكوين مفتاح واجهة برمجة التطبيقات (API) الخاص بك. لتثبيت المكتبة، افتح IDE الخاص بك و خلق بيئة افتراضية جديدة. سيساعد هذا في منع أي تعارضات محتملة في إصدار المكتبة. ثم قم بتشغيل الأمر التالي في المحطة.

pip install scikit-llm 

سيقوم هذا الأمر بتثبيت Scikit-LLM وتبعياته المطلوبة.

لتكوين مفتاح API الخاص بك، تحتاج إلى الحصول على واحد من مزود LLM الخاص بك. للحصول على مفتاح OpenAI API، اتبع الخطوات التالية:

انتقل إلى صفحة OpenAI API. ثم انقر فوق ملف التعريف الخاص بك الموجود في الزاوية العلوية اليمنى من النافذة. يختار

instagram viewer
عرض مفاتيح API. هذا سوف يأخذك إلى مفاتيح واجهة برمجة التطبيقات صفحة.

على ال مفاتيح واجهة برمجة التطبيقات الصفحة، انقر على إنشاء مفتاح سري جديد زر.

قم بتسمية مفتاح API الخاص بك وانقر فوق إنشاء مفتاح سري زر لتوليد المفتاح. بعد الإنشاء، ستحتاج إلى نسخ المفتاح وتخزينه في مكان آمن لأن OpenAI لن يعرض المفتاح مرة أخرى. إذا فقدت ذلك، سوف تحتاج إلى إنشاء واحدة جديدة.

كود المصدر الكامل متاح في مستودع جيثب.

الآن بعد أن أصبح لديك مفتاح API، افتح IDE الخاص بك وقم بالاستيراد SKLLMConfig فئة من مكتبة Scikit-LLM. تتيح لك هذه الفئة ضبط خيارات التكوين المتعلقة باستخدام نماذج اللغات الكبيرة.

from skllm.config import SKLLMConfig

يتوقع منك هذا الفصل تعيين مفتاح OpenAI API وتفاصيل المؤسسة.

# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")

معرف المنظمة والاسم ليسا نفس الشيء. معرف المؤسسة هو معرف فريد لمؤسستك. للحصول على معرف مؤسستك، انتقل إلى منظمة OpenAI صفحة الإعدادات ونسخها. لقد قمت الآن بإنشاء اتصال بين Scikit-LLM ونموذج اللغة الكبير.

يتطلب Scikit-LLM أن يكون لديك خطة الدفع أولاً بأول. وذلك لأن حساب OpenAI التجريبي المجاني له حد أقصى للمعدل يبلغ ثلاثة طلبات في الدقيقة، وهو ما لا يكفي لـ Scikit-LLM.

ستؤدي محاولة استخدام الحساب التجريبي المجاني إلى حدوث خطأ مشابه للخطأ الموضح أدناه أثناء إجراء تحليل النص.

لمعرفة المزيد عن حدود المعدل. انتقل إلى صفحة حدود معدل OpenAI.

لا يقتصر مزود LLM على OpenAI فقط. يمكنك أيضًا استخدام موفري LLM الآخرين.

استيراد المكتبات المطلوبة وتحميل مجموعة البيانات

قم باستيراد حيوانات الباندا التي ستستخدمها لتحميل مجموعة البيانات. أيضًا، من Scikit-LLM وscikit-learn، قم باستيراد الفئات المطلوبة.

import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer

بعد ذلك، قم بتحميل مجموعة البيانات التي تريد إجراء تحليل النص عليها. يستخدم هذا الرمز مجموعة بيانات أفلام IMDB. ومع ذلك، يمكنك تعديله لاستخدام مجموعة البيانات الخاصة بك.

# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)

إن استخدام أول 100 صف فقط من مجموعة البيانات ليس إلزاميًا. يمكنك استخدام مجموعة البيانات بأكملها.

بعد ذلك، قم باستخراج الميزات وأعمدة التسمية. ثم قم بتقسيم مجموعة البيانات الخاصة بك إلى مجموعات تدريب واختبار.

# Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classification

y = data['Genre']
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

ال النوع يحتوي العمود على التسميات التي تريد التنبؤ بها.

تصنيف النصوص بدون طلقة مع Scikit-LLM

يعد تصنيف النص بدون لقطة ميزة تقدمها نماذج اللغات الكبيرة. فهو يصنف النص إلى فئات محددة مسبقًا دون الحاجة إلى تدريب واضح على البيانات المصنفة. تعد هذه الإمكانية مفيدة للغاية عند التعامل مع المهام التي تحتاج فيها إلى تصنيف النص إلى فئات لم تتوقعها أثناء التدريب على النموذج.

لإجراء تصنيف نصي بدون طلقة باستخدام Scikit-LLM، استخدم ملف ZeroShotGPTClassifier فصل.

# Perform Zero-Shot Text Classification
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)

# Print Zero-Shot Text Classification Report
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))

الإخراج هو كما يلي:

يوفر تقرير التصنيف مقاييس لكل تصنيف يحاول النموذج التنبؤ به.

تصنيف نص متعدد الملصقات بدون طلقة مع Scikit-LLM

في بعض السيناريوهات، قد ينتمي نص واحد إلى فئات متعددة في وقت واحد. نماذج التصنيف التقليدية تكافح مع هذا. من ناحية أخرى، فإن Scikit-LLM يجعل هذا التصنيف ممكنًا. يعد تصنيف النص ذو التسميات الصفرية المتعددة أمرًا بالغ الأهمية في تعيين تسميات وصفية متعددة لعينة نصية واحدة.

يستخدم MultiLabelZeroShotGPTClassifier للتنبؤ بالتسميات المناسبة لكل عينة نصية.

# Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)

# Convert the labels to binary array format using MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)

# Print Multi-Label Zero-Shot Text Classification Report
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))

في الكود أعلاه، يمكنك تحديد التسميات المرشحة التي قد ينتمي إليها النص الخاص بك.

الإخراج كما هو موضح أدناه:

يساعدك هذا التقرير على فهم مدى جودة أداء نموذجك لكل تصنيف في التصنيف متعدد التصنيفات.

تحويل النص إلى اتجاه باستخدام Scikit-LLM

في توجيه النص، يتم تحويل البيانات النصية إلى تنسيق رقمي يمكن لنماذج التعلم الآلي فهمه. تقدم Scikit-LLM برنامج GPTectorizer لهذا الغرض. يسمح لك بتحويل النص إلى متجهات ذات أبعاد ثابتة باستخدام نماذج GPT.

يمكنك تحقيق ذلك باستخدام تردد المصطلح - تردد المستند العكسي.

# Perform Text Vectorization using TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# Print the TF-IDF vectorized features for the first few samples
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set

هنا هو الإخراج:

يمثل الإخراج ميزات TF-IDF الموجهة للعينات الخمس الأولى في مجموعة البيانات.

تلخيص النص باستخدام Scikit-LLM

يساعد تلخيص النص في تكثيف جزء من النص مع الحفاظ على معلوماته الأكثر أهمية. يقدم Scikit-LLM برنامج GPTSummarizer الذي يستخدمه نماذج جي بي تي لإنشاء ملخصات موجزة للنص.

# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

الإخراج هو كما يلي:

ما ورد أعلاه هو ملخص لبيانات الاختبار.

بناء التطبيقات على رأس LLMs

يفتح Scikit-LLM عالمًا من الإمكانيات لتحليل النصوص باستخدام نماذج لغوية كبيرة. يعد فهم التكنولوجيا الكامنة وراء نماذج اللغات الكبيرة أمرًا بالغ الأهمية. سيساعدك ذلك على فهم نقاط القوة والضعف لديهم والتي يمكن أن تساعدك في بناء تطبيقات فعالة على رأس هذه التكنولوجيا المتطورة.