Please reload

التدوينات الحديثة

كيف تفهم الآلات لغتنا: مقدمة في معالجة اللغات الطبيعية

 

تطبيقات معالجة اللغات الطبيعية لا حصر لها. هكذا تصنف الآلة ما إذا كانت رسالة البريد الالكتروني سبام (الرسائل الالكترونية غير المرغوب بها) أم لا، وما إذا كانت المراجعة إيجابية أو سلبية، وكيف يتعرف محرك البحث على أي نوع من الأشخاص انت اعتماداً على محتوى تساؤلاتك لتخصيص الاستجابة وفقًا لذلك.

 

كتبته إيما غريمالدي Emma Grimaldi: وهي عالمة بيانات ومهندسة ميكانيكية

 

 تصوير Tatyana Dobreva على Unsplash

 

 

تعتبر معالجة اللغات الطبيعية بالنسبة لي احدى أكثر المجالات الآسرة لعلوم البيانات. حقيقةً أن الآلة يمكن أن تفهم محتوى النص بدقةٍ معينة رائعة، وأحيانًا مخيفة.

 

تطبيقات معالجة اللغات الطبيعية لا حصر لها. هكذا تصنف الآلة ما إذا كانت رسالة البريد الالكتروني سبام (الرسائل الالكترونية غير المرغوب بها) أم لا، وما إذا كانت المراجعة إيجابية أو سلبية، وكيف يتعرف محرك البحث على أي نوع من الأشخاص انت اعتماداً على محتوى تساؤلاتك لتخصيص الاستجابة وفقًا لذلك.

 

لكن كيف يعمل هذا في الواقع؟ تقدم هذه المقالة المفاهيم في أساس معالجة اللغات الطبيعية، وتركز على حزمةnltk لاستخدامها في Python.

 

ملاحظة: لتشغيل الأمثلة أدناه، ستحتاج إلى تثبيت مكتبة nltk. إذا لم تكن لديك، فقط قم بتشغيل نقطة تثبيت nltk في قوقعتك وnltk. download () في دفتر الملاحظة قبل البدء.

 

ومهما كان النص أو الجملة المعطى لآلةٍ ما، فإنها تحتاج أن تكون مبسطة أولاً، ويمكن القيام بذلك من خلال التحويل ب tokenization - أمن المعلومات وlemmatization– العملية الخوارزمية لتحديد أخذ الكلمة وتعتمد على المعنى المقصود. هذه الكلمات المعقدة تعني شيئًا سهلاً للغاية: tokenization تعني تقسيم أجزاء النص إلى رموز، كلمات فردية أو جماعية على حسب الحالة. Lemmatization تعني تحويل بعض الكلمات إلى جذر الكلمة، بمعنى آخر الكلمات الجمعية تصبح مفردة، وتصبح الأفعال المترافقة عبارة عن أفعال أساسية وهكذا. وبين هذه التلاعبات، نقوم أيضًا بتنظيف النص من كل الكلمات التي لا تحمل معلومات فعلية، أو ما يسمى بكلمات التوقف.

 

 

دعنا نلقي نظرة على الجملة أدناه لفهم كل ما نعنيه مع المثال.

 


أمثلة على tokenization و lemmatization for ngrams = 1. مصدر الصورة

 

 

عند وضع علامة على نص، من المهم اختيار ngram وفقًا لذلك. وهو الرقم الذي يحدد عدد الكلمات التي نريدها في كل رمز مميز، وفي معظم الحالات (مثل المثال أعلاه)، يساوي هذا الرقم رقم 1. ولكن إذا كنت تقوم بتشغيل تحليل للمشاعر على موقع ويب لمراجعة الأعمال فربما تكون نصوصك قد تحتوي على عبارات مثل "ليس سعيدًا" أو "لم يعجبها"، ولا تريد أن تلغي هذه الكلمات بعضها البعض من أجل التعبير عن المشاعر السلبية وراء المراجعة. في مثل هذه الحالات، قد ترغب في التفكير في زيادة ngram ونرى كيف يؤثر ذلك على التحليل الخاص بك.

 

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

 

في الشفرة الموضحة أدناه، استخدمت RegexpTokenizer، وهو Tokenizer التعبير العادي. بالنسبة لأولئك الذين ليسوا على دراية بالتعبير المعتاد، في نظرية اللغة الرسمية، هو عبارة عن سلسلة من الحروف التي تحدد نمطًا، واعتمادًا على الحجة التي تمررها في الدالة RegexpTokerizer، سيتم تقسيم النص وفقًا لهذه الوسيطة. في تعبير regex، يعني \ w + حرفياً تجميع كل أحرف الكلمة ذات طول أكبر من أو يساوي واحد، مع تجاهل المساحات الفارغة (هنا تم ترميز الكلمات المفردة) وكافة الأحرف التي لا تعتبر كلمة، مثل علامات الترقيم.

 

# importing the libraries needed in this section

import nltk

from nltk.tokenize import RegexpTokenizer

 

# defining the text

text = 'Rome was founded in 753BC by its first king, Romulus.'

 

# instantiating the tokenizer object. By passing r'\w+' to the RegexpTokenizer

# I am selecting groups of single words, discarding the punctuation

tokenizer = RegexpTokenizer(r'\w+')

 

# getting the tokens

tokens = tokenizer.tokenize(text)

 

 

 

ليس سيئا بالنسبة للبداية، لدينا الرموز التي قدمناها من كلمات واحدة وتخلصنا من الترقيم! الآن علينا القضاء على كلمات التوقف من الرموز المميزة: لحسن الحظ يتم تضمين قائمة كلمات التوقف في nltk، للعديد من اللغات المختلفة. ولكن بالطبع، بناءً على الحالة الفردية، قد تحتاج إلى تخصيص قائمة الكلمات هذه. على سبيل المثال، أُضافت كلمة the في هذه القائمة بشكل افتراضي ولكن إذا كنت تقوم بتحليل قاعدة بيانات افلام أو موسيقى، قد ترغب في الاحتفاظ بها لأنه، في هذه الحالة، تحدث فرقا كبير (حقيقة مسلية: The Help وHelp!  هما فيلمين مختلفين!).

 

 

# importing the library needed in this section

from nltk.corpus import stopwords

 

# assigning the english stop-words to the sw list

sw = stopwords.words('english')

 

# assigning the non stop-words contained in the tokens list

# to a new list named clean_tokens through a list comprehension

clean_tokens = [token for token in tokens if token not

 

 

لقد انتقلنا من 10 إلى 6 كلمات، والآن حان وقت تصنيفها الى مجموعات! لقد قمت حتى الآن باختبار شيئين لنفس الغرض: WordNetLemmatizer وPorterStemmer وهذا الأخير هو بالتأكيد أكثر وحشية من السابق، كما هو موضح في الأمثلة أدناه.

 

# importing the library needed in this section

from nltk.stem import WordNetLemmatizer

 

 # instantiating the lemmaztizer object

lemmatizer = WordNetLemmatizer()

 

# lemmatizing each word through a list comprehension

[lemmatizer.lemmatize(token) for token in clean_tokens]

 

 

لا شيء تغير! هذا لأن WordNetLemmatizer يعمل فقط على كلمات الجمع وبضعة أشياء أخرى، وفي هذه الحالة بالذات، لم يتم تصنيف اي كلمة في الواقع. من ناحية أخرى، يحوّل PorterStemmer كلمات الجمع والمشتقة، والأفعال المترافقة ويكتب كل المصطلحات بالحروف الصغيرة كما هو موضح أدناه:

 

 

# importing the library needed in this section

from nltk.stem.porter import PorterStemmer

 

# instantiating the stemmer object

pstemmer = PorterStemmer()

 

# stemming each word through a list comprehension

[pstemmer.stem(token) for token in clean_tokens]

 

 

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

 

 

هذه الوظائف التصنيفية مختلفة جدًا واعتمادًا على الحالة، أحدهما سيكون أكثر ملاءمة من الاخر.

 

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

 

 

السيرة الذاتية:

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

المصدر

 

 

Share on Facebook
Share on Twitter
Please reload

تابعنا
ابحث بالتاق
Please reload

الارشيف
  • Black Instagram Icon
  • Black Twitter Icon

Riyadh, Saudi Arabia

  • Black Instagram Icon
  • Black Twitter Icon

الرياض، المملكة العربية السعودية