شعار زيفيرنت

زيادة بيانات النص في معالجة اللغة الطبيعية باستخدام Texattack

التاريخ:

تم نشر هذه المقالة كجزء من مدونة علوم البيانات.

المُقدّمة

تقنية زيادة البيانات (DA) هي عملية تمكننا من زيادة إصدارات بيانات التدريب بشكل مصطنع من مجموعات البيانات الحقيقية دون جمع البيانات فعليًا. يجب تغيير البيانات للاحتفاظ بفئات الفئة من أجل أداء أفضل في مهمة التصنيف.

تُستخدم إستراتيجية زيادة البيانات في رؤية الكمبيوتر ومعالجة اللغة الطبيعية (NLP) إلى د

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

تكبير النص باستخدام BERT - Texattack

مصدر: أميت تشودري "مسح مرئي لزيادة البيانات في البرمجة اللغوية العصبية"

بينما تُستخدم تقنيات زيادة البيانات في رؤية الكمبيوتر ومعالجة اللغات الطبيعية ، يركز هذا البرنامج التعليمي على استخدام زيادة البيانات في البرمجة اللغوية العصبية. في هذا البرنامج التعليمي ، سوف نوضح أداء نموذج البرمجة اللغوية العصبية المحسّن باستخدام هذه التقنية.

يتم تطبيق تقنيات زيادة البيانات على ثلاثة مستويات:

  1. مستوى الشخصية

  2. مستوى الكلمة

  3. مستوى العبارة

  4. مستوى المستند

تقنيات زيادة البيانات لتصنيف النص

تقنيات زيادة البيانات لتصنيف النص - texattack

المصدر: المؤلف

زيادة البيانات السهلة (EDA)

في هذه التقنية ، يتم اختيار كلمة بشكل عشوائي من الجملة واستبدالها بأحد مرادفات هذه الكلمات أو يتم اختيار كلمتين وتبديلهما في الجملة. تشمل تقنيات EDA

          استبدال قائم على تضمين الكلمات: يمكن استخدام دمج الكلمات المحددة مسبقًا مثل GloVe و Word2Vec و fastText للعثور على أقرب متجه للكلمات من مسافة التضمين كبديل في الجملة الأصلية.

يمكن استخدام التضمين السياقي ثنائي الاتجاه مثل ELMo و BERT لمزيد من الموثوقية لأن تمثيل المتجه أغنى بكثير. نظرًا لأن النماذج المستندة إلى Bi-LSTM & Transformer تقوم بترميز تسلسلات نصية أطول وتكون مدركة للسياق للكلمات المحيطة بها.

       الاستبدال المعجمي: Wordnet هي قاعدة بيانات معجمية للغة الإنجليزية تحتوي على معاني الكلمات ، والأسماء الفرعية ، والعلاقات الدلالية الأخرى ، وما إلى ذلك. يمكن استخدام Wordnet للعثور على مرادفات للرمز / الكلمة المطلوبة من الجملة الأصلية التي يجب استبدالها. يمكن استخدام حزم NLTK ، Spacy is NLP python للعثور على المرادفات من الجملة الأصلية واستبدالها.

رجوع الترجمة 

تُترجم الجملة إلى لغة واحدة ثم تُترجم الجملة الجديدة مرة أخرى إلى اللغة الأصلية. لذلك ، يتم إنشاء جمل مختلفة.

ترجمة عكسية مع الإنجليزية والفرنسية - texattack

نماذج مولدة

يتم تدريب شبكة الخصومة التوليدية (GAN) على إنشاء نص ببضع كلمات ويمكن استخدام نماذج اللغة التوليدية مثل نموذج BERT و RoBERTa و BART و T5 لإنشاء النص بطريقة حفظ فئة أكثر فئة. يقوم النموذج التوليدي بتشفير فئة الفئة جنبًا إلى جنب مع التسلسلات النصية المرتبطة بها لإنشاء عينات أحدث مع بعض التعديلات. عادة ما يكون هذا النهج أكثر موثوقية وتكون العينة التي تم إنشاؤها أكثر تمثيلاً لفئة الفئة المرتبطة.

مكتبات البيانات زيادة

يتوفر عدد قليل من المكتبات أدناه لزيادة البيانات

1) الهجوم النصي

2) نلبوج

3) جوجل ترانس

4) البومات البرمجة اللغوية العصبية

5) تكبير النص

سنعرض أدناه زيادة البيانات باستخدام مكتبة Texattack.

مقدمة إلى مكتبة TextAttack وعينة زيادة البيانات 

مقدمة إلى مكتبة TextAttack وعينة زيادة البيانات

المصدر: المؤلف

TextAttack هو إطار عمل Python. يتم استخدامه للهجمات العدائية ، والتدريب على الخصومة ، وزيادة البيانات في البرمجة اللغوية العصبية. في هذه المقالة ، سنركز فقط على زيادة البيانات النصية.

توفر فئة textattack.Augmenter في textattack ست طرق مختلفة لزيادة البيانات.

1) برنامج WordNetAugmenter

2) تضمين التعزيز

3) CharSwapAugmenter

4) أداة EasyDataAugmenter

5) CheckListAugmenter

6) زيادة واضحة

لنلقِ نظرة على أمثلة زيادة البيانات باستخدام هذه الطرق الست.

تركيب Textattack

! نقطة تثبيت textattack

برنامج WordNetAugmenter

يعمل Wordnet على زيادة النص عن طريق استبدال الكلمات بالمرادفات التي يوفرها WordNet.

من textattack.augmentation import WordNetAugmenter text = "ابدأ كل يوم بأفكار إيجابية واجعل يومك" wordnet_aug = WordNetAugmenter () wordnet_aug.augment (نص)

الإخراج: ["ابدأ كل يوم بأفكار إيجابية وحفز يومك"]

التضمين 

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

من textattack.augmentation import EmbeddingAugmenter embed_aug = EmbeddingAugmenter () embed_aug.augment (text)

الإخراج: ["ابدأ كل يوم بفكرة إيجابية واجعل يومك"]

برنامج EasyDataAugmenter 

تزيد EDA النص بمزيج من إدخالات الكلمات ، والاستبدالات ، والحذف.

من استيراد textattack.augmentation EasyDataAugmenter eda_aug = EasyDataAugmenter () eda_aug.augment (نص)

الإخراج: ["ابدأ كل يوم بأفكار إيجابية اجعل يومك ،
"ابدأ كل يوم بأفكار إيجابية وشكل يومك" ،
"ابدأ كل يوم بأفكار إيجابية واجعل يومك نهارًا" ،
"ابدأ يومك بأفكار إيجابية وكل يومك"
"]

مكثف CharSwapAugmenter 

يعمل على زيادة النص عن طريق استبدال الأحرف المتجاورة وحذفها وإدراجها وتبديلها

من استيراد textattack.augmentation CharSwapAugmenter charswap_aug = CharSwapAugmenter () charswap_aug.augment (نص)

الإخراج: ["ابدأ كل يوم بأفكار إيجابية وأعد يومك"]

CheckListAugmenter 

يقوي النص عن طريق الانكماش / التمديد واستبدال الأسماء والمواقع والأرقام.

من textattack.augmentation import CheckListAugmenter checklist_aug = CheckListAugmenter () checklist_aug.augment (نص)

الإخراج: ["ابدأ كل يوم بأفكار إيجابية واجعل يومك"]

كلارا مكثف

يعمل على زيادة النص عن طريق استبدال نموذج لغة مقنع تم تدريبه مسبقًا وإدراجه ودمجه.

من textattack.augmentation import CLAREAugmenter clare_aug = CLAREAugmenter () print (clare_aug.augment (text))

الإخراج: ["ابدأ كل يوم بأفكار إيجابية واجعل أفضل يوم لك"]

أدناه سنقارن أداء النموذج مع زيادة البيانات وبدونها

#import المطلوبة مكتبات استيراد الباندا مثل pd استيراد عشوائي استيراد وإعادة استيراد سلسلة استيراد nltk من nltk.stem.wordnet استيراد WordNetLemmatizer nltk.download ('punkt') nltk.download ('wordnet') من sklearn.feature_extraction.text استيراد CountVectorizer من nltk استيراد كلمات إيقاف.
# اقرأ مجموعة البيانات data_fileTr = "nlp-البدء / train.csv" train_data = pd.read_csv (data_fileTr) train_data.shape

الإخراج: (7613، 5)

تظهر وظيفة clean_text أدناه المعالجة المسبقة للبيانات النصية المقدمة.

def clean_text (text): # lower text text = text.lower () #removing stop words text = '' .join ([e_words for e_words in text.split ('') إذا لم تكن e_words في stopwords.words ('english') )]) #removing square brackets text = re.sub ('[. *؟]'، ''، text) text = re.sub ('+'، '، text) #removing hyperlink text = re.sub ( 'https؟: // S + | www.S +'، '،'، text) #removing puncuation text = re.sub ('[٪ s]'٪ re.escape (string.punctuation)، ''، text) text = re.sub ('n'، ''، text) # حذف الكلمات التي تحتوي على أرقام نص = re.sub ('w * dw *'، ''، text) #tokenizer text = nltk.word_tokenize (text) #lemmatizer wn = nltk.WordNetLemmatizer () text = [wn.lemmatize (word) للكلمة في النص] text = "" .join (text) إرجاع النص train_data ["text"] = train_data ["text"]. تطبيق (clean_text)

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

count_vectorizer = CountVectorizer () train_vectors_counts = count_vectorizer.fit_transform (train_data ["text"]) train_vectors_counts.shape

الإخراج: (7613، 16520)

# تركيب نموذج بسيط متعدد الحدود Naive Bayes mnb = MultinomialNB () cv = RepeatedStratifiedKFold (n_splits = 5، n_repeats = 3، random_state = 1) طباعة ("متوسط ​​الدقة: {: .2}". train_data ["target"]، cv = cv) .mean ()))

الإخراج: (7613، 16520)

تأخذ الوظيفة أدناه النص والتسمية ومكبر هجوم النص كمدخلات وتعيد قائمة بالبيانات المعززة مع التسميات المقابلة لها.

def textattack_data_augment (البيانات ، الهدف ، texattack_augmenter): aug_data = [] aug_label = [] للنص ، التسمية في الرمز البريدي (البيانات ، الهدف): if random.randint (0,2،1)! = XNUMX: aug_data.append (text) aug_label متابعة

هنا ، من أجل زيادة البيانات ، نقوم بتكوين EmbeddedAumenter الذي سينتقل إلى الوظيفة المذكورة أعلاه.

embed_aug = EmbeddingAugmenter (pct_words_to_swap = 0.1 ، transformations_per_example = 1) aug_data ، aug_lable = textattack_data_augment (train_data ["text"] ، train_data ["target"] ، embed_aug)

نحن هنا نقوم بتنظيف النص باستخدام وظيفة تنظيف النص و countvectorizer

clean_aug_data = [text_cleaning (txt) لـ txt في aug_data] count_vect = CountVectorizer () aug_data_counts = count_vect.fit_transform (clean_aug_data) aug_data_counts.shape

الإخراج: (10254، 17912)

print ("متوسط ​​الدقة: {: .2}". تنسيق (cross_val_score (mnb، aug_data_counts، aug_lable، cv = cv) .mean ()))

الإخراج: متوسط ​​الدقة: 0.83

مقارنة الدقة مع وبدون فوائد DA و DA

تحسنت دقة الإخراج من 0.79 إلى 0.83 باستخدام تقنية زيادة البيانات.

مزايا زيادة البيانات على النحو التالي:

وفي الختام

في هذه المقالة ، حاولت تقديم نظرة عامة على كيفية عمل تقنيات زيادة البيانات المختلفة وأوضحت كيفية استخدام زيادة البيانات لزيادة حجم بيانات التدريب وأداء نماذج تعلم الآلة. لقد قمنا بتغطية 6 وصفات texattack مع أمثلة.

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة