معالجة اللغات الطبيعية هي أحد مجالات علوم الكمبيوتر واللغويات المعنية بالتفاعلات بين أجهزة الكمبيوتر واللغات البشرية (الطبيعية). في أبسط صوره، تدور البرمجة اللغوية العصبية حول تطوير خوارزميات يمكنها فهم اللغة البشرية وإنتاجها تلقائيًا. الهدف طويل المدى للبرمجة اللغوية العصبية هو إنشاء نماذج حسابية للغة البشرية يمكن استخدامها لأداء مجموعة واسعة من المهام. وتشمل هذه المهام الترجمة الآلية، والتلخيص، والإجابة على الأسئلة، واستخراج المعلومات، وغيرها الكثير. تعد أبحاث البرمجة اللغوية العصبية متعددة التخصصات إلى حد كبير، حيث تضم باحثين من مجالات مثل اللغويات والعلوم المعرفية والذكاء الاصطناعي وعلوم الكمبيوتر.
هناك العديد من الأساليب المختلفة المستخدمة في معالجة اللغة الطبيعية، بما في ذلك الأساليب القائمة على القواعد، والأساليب الإحصائية، والأساليب الحسابية العصبية. تعتمد الأساليب المبنية على القواعد عادةً على قواعد مصنوعة يدويًا كتبها خبراء البرمجة اللغوية العصبية. يمكن أن تكون هذه الأساليب فعالة جدًا لمهام محددة، ولكنها غالبًا ما تكون محدودة في نطاقها وتتطلب الكثير من الجهد للمحافظة عليها. تعتمد الأساليب الإحصائية على استخدام كميات كبيرة من البيانات لتدريب النماذج الحسابية. يمكن بعد ذلك استخدام هذه النماذج لتنفيذ مهام البرمجة اللغوية العصبية المختلفة تلقائيًا. الشبكات العصبية هي نوع من خوارزميات التعلم الآلي التي تناسب بشكل خاص مهام البرمجة اللغوية العصبية. تم استخدام الشبكات العصبية لإنشاء نماذج حديثة لمهام مثل الترجمة الآلية والتصنيف.
Co:here عبارة عن شبكة عصبية قوية يمكنها إنشاء النص وتضمينه وتصنيفه. في هذا البرنامج التعليمي سوف نستخدم Co:here لتصنيف الأوصاف. لاستخدام Co:here، تحتاج إلى إنشاء حساب على Co:here والحصول على مفتاح API.
سنبرمج بلغة بايثون، لذلك نحتاج إلى تثبيت مكتبة cohere
بواسطة pip
pip install cohere
أولاً، علينا تنفيذ cohere.Client
. في وسيطات العميل، يجب أن يكون مفتاح API الذي قمت بإنشائه من قبل، والإصدار 2021-11-08
. سأقوم بإنشاء الفصل CoHere
، وسيكون مفيدًا في الخطوات التالية.
class CoHere :
def __init__ ( self , api_key ):
self . co = cohere . Client ( f' { api_key } ' , '2021-11-08' )
self . examples = []
الجزء الرئيسي من كل شبكة عصبية هو مجموعة البيانات. في هذا البرنامج التعليمي، سأستخدم مجموعة بيانات تتضمن 1000 وصف لـ 10 فئات. إذا كنت تريد استخدام نفس الشيء، يمكنك تنزيله هنا.
تحتوي مجموعة البيانات التي تم تنزيلها على 10 مجلدات في كل مجلد 100 files.txt
مع الأوصاف. اسم الملفات هو علامة وصف، على سبيل المثال، sport_3.txt
.
في هذا المجال، تتمثل المهام في قراءة الأوصاف والتسميات من الملفات وإنشاء البيانات التي تحتوي على الوصف والتسمية كعينة واحدة من البيانات. يتطلب مصنف Cohere عينات، حيث يجب تصميم كل عينة على شكل قائمة [description, label]
.
في البداية، نحتاج إلى تحميل جميع البيانات للقيام بذلك. نقوم بإنشاء الدالة load_examples
. في هذه الوظيفة سوف نستخدم ثلاث مكتبات خارجية:
os.path
للذهاب إلى المجلد الذي يحتوي على البيانات. يتم تنفيذ الكود في مسار يوجد به ملف python's file.py
. هذه مكتبة داخلية، لذا لا نحتاج إلى تثبيتها.
numpy
هذه المكتبة مفيدة للعمل مع المصفوفات. في هذا البرنامج التعليمي، سوف نستخدمه لتوليد أرقام عشوائية. يجب عليك تثبيت هذه المكتبة عن طريق pip pip install numpy
.
يساعدنا glob
على قراءة جميع أسماء الملفات والمجلدات. هذه مكتبة خارجية، لذا يلزم التثبيت - pip install glob
.
يجب استخراج مجموعة البيانات التي تم تنزيلها في مجلد data
. بواسطة os.path.join
يمكننا الحصول على مسارات عالمية للمجلدات.
folders_path = os . path . join ( 'data' , '*' )
في نظام التشغيل Windows، العائد يساوي data*
.
ثم يمكننا استخدام طريقة glob
للحصول على كافة أسماء المجلدات.
folders_name = glob ( folders_path )
folders_name
عبارة عن قائمة تحتوي على مسارات نوافذ المجلدات. في هذا البرنامج التعليمي، هذه هي أسماء التسميات.
[ 'data \ business' , 'data \ entertainment' , 'data \ food' , 'data \ graphics' , 'data \ historical' , 'data \ medical' , 'data \ politics' , 'data \ space' , 'data \ sport' , 'data \ technologie' ]
حجم Co:here
لا يمكن أن تكون مجموعة بيانات التدريب أكبر من 50 مثالًا ويجب أن يحتوي كل فصل على 5 أمثلة على الأقل. مع for
يمكننا الحصول على أسماء كل ملف. تبدو الوظيفة بأكملها كما يلي:
import os . path
from glob import glob
import numpy as np
def load_examples ():
examples_path = []
folders_path = os . path . join ( 'data' , '*' )
folders_name = glob ( folders_path )
for folder in folders_name :
files_path = os . path . join ( folder , '*' )
files_name = glob ( files_path )
for i in range ( 50 // len ( folders_name )):
random_example = np . random . randint ( 0 , len ( files_name ))
examples_path . append ( files_name [ random_example ])
return examples_path
تأخذ الحلقة الأخيرة 5 مسارات عشوائيًا من كل تسمية وتلحقها بقائمة جديدة examples_path
.
الآن علينا إنشاء مجموعة التدريب. للقيام بذلك، سنقوم بتحميل الأمثلة باستخدام load_examples()
. في كل مسار يوجد اسم فئة، وسوف نستخدمه لإنشاء عينات. يجب قراءة الأوصاف من الملفات، ولا يمكن أن يكون الطول طويلاً، لذا في هذا البرنامج التعليمي، سيكون الطول مساويًا لـ 100. ولإدراج texts
، يتم إلحاق قائمة [descroption, class_name]
. وبالتالي، فإن العودة هي تلك القائمة.
def examples ():
texts = []
examples_path = load_examples ()
for path in examples_path :
class_name = path . split ( os . sep )[ 1 ]
with open ( path , 'r' , encoding = "utf8" ) as file :
text = file . read ()[: 100 ]
texts . append ([ text , class_name ])
return texts
نعود إلى فئة CoHere
. يتعين علينا إضافة طريقتين - لتحميل الأمثلة وتصنيف المدخلات.
الأول بسيط، يجب إنشاء قائمة الأمثلة co:here
باستخدام طريقة cohere
الإضافية - cohere.classify.Example
.
def list_of_examples ( self ):
for e in examples ():
self . examples . append ( Example ( text = e [ 0 ], label = e [ 1 ]))
الطريقة الثانية هي تصنيف الطريقة من cohere
. تحتوي الطريقة على وسيطات serval، مثل:
حجم model
من النموذج.
قائمة inputs
من البيانات لتصنيفها.
قائمة examples
لمجموعة التدريب مع الأمثلة
كل منهم يمكنك أن تجد هنا.
في هذا البرنامج التعليمي، سيتم تنفيذ طريقة cohere
كطريقة لفئة CoHere
الخاصة بنا. وسيطة هذه الطريقة هي قائمة من الأوصاف للتنبؤ بها.
def classify ( self , inputs ):
return self . co . classify (
model = 'medium' ,
inputs = inputs ,
examples = self . examples
). classifications
العودة هي input
prediction
بالمدخلات وقائمة confidence
. Confidence
هي قائمة احتمالية لكل فئة.
cohere . Classification {
input :
prediction :
confidence : []
}
CoHere
import cohere
from loadExamples import examples
from cohere . classify import Example
class CoHere :
def __init__ ( self , api_key ):
self . co = cohere . Client ( f' { api_key } ' , '2021-11-08' )
self . examples = []
def list_of_examples ( self ):
for e in examples ():
self . examples . append ( Example ( text = e [ 0 ], label = e [ 1 ]))
def classify ( self , inputs ):
return self . co . classify (
model = 'medium' ,
taskDescription = '' ,
outputIndicator = '' ,
inputs = inputs ,
examples = self . examples
). classifications
لإنشاء تطبيق، والذي سيكون فيه مربع إدخال النص وعرض الاحتمالية، سوف نستخدم Stramlit
. هذه مكتبة سهلة ومفيدة للغاية.
تثبيت
pip install streamlit
سنحتاج إلى إدخالين نصيين لمفتاح واجهة برمجة التطبيقات co:here
وللنص للتنبؤ به.
في مستندات Streamlit يمكننا العثور على طرق:
st.header()
لإنشاء رأسية لتطبيقنا
st.test_input()
لإرسال طلب نصي
st.button()
لإنشاء زر
st.write()
لعرض نتائج نموذج Cohere.
st.progress()
لعرض شريط التقدم
st.column()
لتقسيم التطبيق
st . header ( "Your personal text classifier - Co:here application" )
api_key = st . text_input ( "API Key:" , type = "password" ) #text box for API key
description = [ st . text_input ( "Description:" )] #text box for text to predict
cohere = CoHere ( api_key ) #initialization CoHere
cohere . list_of_examples () #loading training set
if st . button ( "Classify" ):
here = cohere . classify ( description )[ 0 ] #prediction
col1 , col2 = st . columns ( 2 )
for no , con in enumerate ( here . confidence ): #display likelihood for each label
if no % 2 == 0 : # in two columns
col1 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col1 . progress ( con . confidence )
else :
col2 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col2 . progress ( con . confidence )
لتشغيل أمر استخدام التطبيق Streamlit
streamlit run name_of_your_file . py
يبدو التطبيق الذي تم إنشاؤه مثل هذا
يمكن استخدام نماذج Co:here ليس فقط لإنشاء النص ولكن أيضًا للتصنيف. في هذا البرنامج التعليمي، تمكنا من تصنيف نص قصير، مع مجموعة بيانات صغيرة. كان هناك 50 مثالًا لـ 10 فصول. كان هذا كافيًا للحفاظ على احتمالية التنبؤ عند مستوى عالٍ. قد يكون من الصعب إنتاج مجموعة البيانات الكبيرة في بعض السيناريوهات، لذا يمكن أن يكون نموذج Co:here حلاً رائعًا لها.
ترقبوا الدروس المستقبلية!
شكرًا لك! - أدريان باناشوفيتش، متدرب في علوم البيانات في New Native