الجذعية وLemmatization في Python NLTK مع أمثلة

⚡ ملخص ذكي

تُعدّ تقنيات التجريد والتجذير من تقنيات توحيد النصوص في Python NLTK التي تقلل اختلافات الكلمات إلى أساس مشترك، حيث يقوم تجذير اللواحق بسرعة دون سياق، ويعيد التجريد كلمة قاموس حقيقية باستخدام المعنى.

  • 🌱 ينبع: يقوم برنامج PorterStemmer بحذف اللواحق للوصول إلى جذر قد لا يكون كلمة حقيقية.
  • 📚 اللماتة: يقوم برنامج WordNetLemmatizer بإرجاع الشكل الأساسي للقاموس، والذي يسمى الجذر.
  • 🇧🇷 فرق: التجريد أسرع، أما التقطيع فهو أبطأ ولكنه أكثر دقة ومراعاة للسياق.
  • 🔤 تطبيع: كلاهما يقلل كثافة الكلمات بحيث تتعامل الآلات مع المتغيرات كميزة واحدة.
  • 🏷️ بطاقات نقاط البيع: إن تمرير علامة جزء الكلام يجعل أداة تحليل الكلمات أكثر دقة.
  • 🤖 فوائد الذكاء الاصطناعي: ينتج عن النص الموحد الأكثر وضوحًا ميزات ونماذج تعلم آلي أقوى.

الجذعية وLemmatization في Python نلتك

ما هو الجذعية وLemmatization في Python NLTK؟

الاشتقاق و اللماتة in Python تُعدّ NLTK تقنيات لتطبيع النصوص في معالجة اللغة الطبيعية. وتُستخدم هذه التقنيات على نطاق واسع في المعالجة المسبقة للنصوص. ويكمن الفرق بين التجريد والتحليل الصرفي في أن التجريد أسرع لأنه يقطع الكلمات دون معرفة السياق، بينما التحليل الصرفي أبطأ لأنه يعرف سياق الكلمات قبل المعالجة.

ما هو الجذعية؟

النابعة هي طريقة لتوحيد الكلمات في معالجة اللغات الطبيعيةهي تقنية يتم فيها تحويل مجموعة من الكلمات في جملة إلى تسلسل لتسهيل عملية البحث. في هذه الطريقة، يتم توحيد الكلمات التي لها نفس المعنى ولكن مع بعض الاختلافات وفقًا للسياق أو الجملة. بعبارة أخرى، هناك كلمة جذرية واحدة، ولكن هناك العديد من الاختلافات لنفس الكلمة. على سبيل المثال، الكلمة الجذرية هي "eat" واختلافاتها هي "eats" و"eating" و"aented" وما إلى ذلك. وبالمثل، بمساعدة تقنية التجزئة (Stemming) Pythonيمكننا إيجاد الكلمة الجذرية لأي صيغة مختلفة.

فمثلا:

He was riding.
He was taking the ride.

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

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

برنامج لفهم الجذعية

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

الإخراج:

wait
wait
wait
wait

Code التفسير:

  • يوجد في مكتبة NLTK وحدة جذعية يتم استيرادها. إذا استوردت الوحدة كاملةً، يصبح البرنامج ثقيلاً لاحتوائها على آلاف الأسطر البرمجية. لذلك، من الوحدة الجذعية بأكملها، استوردنا فقط "PorterStemmer".
  • قمنا بإعداد قائمة وهمية لبيانات التباين لنفس الكلمة.
  • يتم إنشاء كائن ينتمي إلى الفئة nltk.stem.porter.PorterStemmer.
  • مررنا القائمة إلى برنامج PorterStemmer كلمةً كلمةً باستخدام حلقة "for". وفي النهاية، حصلنا على جذر الكلمة لكل كلمة مذكورة في القائمة.

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

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

الإخراج:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code التفسير:

  • يتم استيراد حزمة PorterStemmer من وحدة stem.
  • يتم استيراد حزم لتقسيم الجمل والكلمات إلى رموز.
  • تتم كتابة الجملة التي سيتم ترميزها في الخطوة التالية.
  • يتم إنشاء كائن لـ PorterStemmer هنا.
  • يتم تشغيل حلقة ويتم استخراج جذور كل كلمة باستخدام الكائن الذي تم إنشاؤه في سطر التعليمات البرمجية رقم 5.

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

ما هو Lemmatization؟

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

لماذا يعتبر Lemmatization أفضل من Stemming؟

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

Code للتمييز بين التجريد والتجذير

النابعة Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

الإخراج:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

اللميتة Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

الإخراج:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

مناقشة الإخراج

إذا نظرنا إلى عملية تجذير كلمتي "studies" و"studing"، فسنجد أن الناتج واحد (studi)، لكن مُحلِّل NLTK يُقدِّم جذرًا مختلفًا لكلتا الكلمتين: study لكلمتي "studies" و study لكلمتي "studing". لذا، عندما نحتاج إلى إنشاء مجموعة من الميزات لتدريب آلة، سيكون من الأفضل لو تم تفضيل استخدام التجذير.

حالة استخدام Lemmatizer

يُقلل المُحلل اللغوي من غموض النص. تُحوّل كلمات مثل "bicycle" أو "bicycles" إلى الكلمة الأساسية "bicycle". كما يُحوّل جميع الكلمات ذات المعنى نفسه ولكن بصيغ مختلفة إلى صيغتها الأساسية، مما يُقلل من كثافة الكلمات ويُحسّن من وضوحها.ping قم بإعداد خصائص دقيقة لتدريب الآلة. كلما كانت البيانات أنظف، كان نموذج التعلم الآلي أكثر دقة. كما أن أداة NLTK Lemmatizer توفر الذاكرة والتكلفة الحسابية.

مثال عملي يوضح استخدام تقنية WordNet للتحليل الصرفي ووسم أجزاء الكلام في Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

الإخراج:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code التفسير:

  • يتم استيراد قارئ النصوص wordnet، ويتم استيراد WordNetLemmatizer من wordnet.
  • يتم استيراد تجزئة الكلمات وعلامات أجزاء الكلام من nltk، والقاموس الافتراضي من المجموعات.
  • يتم إنشاء قاموس حيث يكون الحرف الأول من pos_tag هو المفتاح، ويتم ربطه بالقيمة من قاموس wordnet.
  • تتم كتابة النص وتقسيمه إلى رموز، ويتم إنشاء الكائن lemma_function لاستخدامه داخل الحلقة.
  • يتم تشغيل الحلقة، وتأخذ الدالة lemmatize وسيطين: الرمز المميز وخريطة.ping من pos_tag مع قيمة wordnet.

Python للتجزئة علاقة وثيقة بـ قاموس WordNetلذلك من الضروري دراسة هذا الموضوع لاحقًا.

الأسئلة الشائعة

أداة Porter لتجذير الكلمات هي فئة PorterStemmer في مكتبة NLTK. وهي تقوم بتطبيق خاصية إزالة اللواحق.ping قواعد من خوارزمية مارتن بورتر لعام 1980 لتقليل الكلمات الإنجليزية إلى جذورها، لذا فإن "waiting" و "waited" و "waits" تصبح جميعها "wait".

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

تُحوّل عملية توحيد النصوص الأشكال المختلفة للكلمة إلى تمثيل واحد مشترك. ويُعدّ كلٌّ من التجريد والتحليل الصرفي من تقنيات التوحيد التي تُقلّل من كثافة الكلمات، بحيث يتعامل النموذج مع متغيرات مثل "study" و"studies" كخاصية واحدة.

توفر مكتبة NLTK برنامج PorterStemmer (وغيره من برامج تجذير الكلمات مثل Snowball) لتجذير الكلمات، وبرنامج WordNetLemmatizer لتحليلها إلى جذورها. ويعتمد برنامج تحليل الكلمات إلى جذورها على قاموس WordNet لإرجاع الشكل الأساسي الصحيح لكل كلمة.

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

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

يمكن أن تكون الكلمة اسمًا أو فعلًا بجذور مختلفة. وبدون تحديد نوعها، يفترض WordNetLemmatizer أنها اسم. أما تحديد نوعها الصحيح، كفعل أو صفة، فيعطيها شكلها الأساسي الصحيح.

لا. عملية التجريد تحذف اللواحق فقط، لذا تصبح كلمة "studies" "studi" وكلمة "cries" تصبح "cri"، وهما كلمتان غير صحيحتين. أما عملية التجريد المعجمي، على النقيض، فتعيد دائمًا كلمة صحيحة من القاموس مثل "study".

تلخيص هذه التدوينة بـ: