وضع علامات على نقاط البيع باستخدام NLTK والتقطيع في البرمجة اللغوية العصبية [أمثلة]

⚡ ملخص ذكي

تُحدد خاصية POS Tagging نوع الكلمة لكل كلمة في الجملة، بينما تُجمّع خاصية Chunking الكلمات المُحددة في عبارات ذات معنى مثل العبارات الاسمية، مما يُضيف بنية سطحية تُنشئها مكتبة NLTK باستخدام التعبيرات النمطية. Python.

  • 🏷️ وضع العلامات على نقاط البيع: تتلقى كل كلمة رمزًا نحويًا مثل NN أو VB أو JJ من سياقها.
  • 🌿 تقطيع: يتم تجميع الكلمات المصنفة في عبارات، وهي عملية تسمى أيضًا التحليل السطحي.
  • 🔤 العمل: قم بتقسيم النص إلى رموز أولاً، ثم قم بتطبيق pos_tag، ثم قم بتحليله باستخدام قواعد RegexpParser.
  • 📊 علامات العد: يكشف كل من العداد و FreqDist عن ترددات العلامات والكلمات لهندسة الميزات.
  • 🔗 التراكيب: تستخدم الثنائيات والثلاثيات الكلمات للحصول على ميزات نصية أقوى.
  • 🤖 استخدام الذكاء الاصطناعي: تتعامل أدوات التعلم الآلي والوسوم القائمة على نماذج ماركوف المخفية مع الكلمات الغامضة بشكل احتمالي.

تحديد نقاط البيع باستخدام NLTK وتقسيم البيانات في معالجة اللغة الطبيعية

وضع العلامات على نقاط البيع

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

لنتعلم من خلال مثال على أجزاء الكلام في مكتبة NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

الخطوات المتبعة في مثال وضع العلامات على نقاط البيع

  • ترميز النص (word_tokenize)
  • قم بتطبيق pos_tag على الخطوة السابقة، أي nltk.pos_tag(tokenize_text)

فيما يلي أمثلة على علامات نقاط البيع NLTK:

اختصار معنى
CC تنسيق التنسيق
CD الرقم الكاردينال
DT حدد
EX الوجودية هناك
FW كلمة أجنبية
IN حرف الجر / التبعية بالتزامن
JJ الصفة
جي جي آر صفة، مقارنة
JJS صفة، صيغة التفضيل
LS سوق القائمة
MD شكلي
NN اسم، مفرد
NNS اسم جمع
NNP اسم علم، مفرد
NNPS اسم علم، جمع
PDT محدد مسبق
منتجات مختلفة نهاية الملكية
العلاج بالبلازما الغنية بالصفائح (PRP) ضمير شخصي
برب $ ضمير الملكية
RB ظرف حال
RBR ظرف، مقارنة
RBS ظرف، صيغة التفضيل
RP جسيم
إلى علامة اللانهاية
UH إقحام
VB الفعل
العنف القائم على النوع الاجتماعي اسم فعل
VBD فعل في الماضي
فبن اسم المفعول للفعل
VBP فعل، زمن المضارع، ليس ضمير الغائب المفرد
VBZ فعل، صيغة المضارع مع ضمير الغائب المفرد
WDT محدد الاستفهام
WP ضمير الاستفهام
WRB ظرف الاستفهام

تحتوي قائمة علامات NLTK POS المذكورة أعلاه على جميع علامات NLTK POS. يُستخدم مُصنِّف علامات NLTK POS لربط المعلومات النحوية بكل كلمة في الجملة. اكتمل الآن تثبيت جميع حزم NLTK POS واستيرادها وتنزيلها.

ما هو التقطيع في البرمجة اللغوية العصبية؟

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

في التحليل السطحي، يوجد مستوى واحد كحد أقصى بين الجذور والأوراق، بينما يشمل التحليل العميق أكثر من مستوى واحد. ويُطلق على التحليل السطحي أيضًا اسم التحليل الخفيف أو التجميع.

قواعد القطع

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

chunk:{***?}

يوضح الجدول التالي معاني الرموز المختلفة:

اسم الرمز الوصف
. أي حرف باستثناء السطر الجديد
* تطابق 0 أو أكثر من التكرار
? المباراة 0 أو 1 التكرار

والآن دعونا نكتب الكود لفهم القاعدة بشكل أفضل.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

الإخراج:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

الاستنتاج من الجزء أعلاه من وضع علامات على الكلام Python مثال على ذلك هو أن "make" فعل غير مدرج في القاعدة، لذلك لا يتم تصنيفه على أنه mychunk.

حالة استخدام التقطيع

تُستخدم عملية التجزئة لاكتشاف الكيانات. الكيان هو ذلك الجزء من الجملة الذي من خلاله تحصل الآلة على قيمة أي نية.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

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

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

الإخراج:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

الرسم البياني لتقطيع العبارة الاسمية

الرسم البياني لتقطيع العبارة الاسمية

من الرسم البياني، نستنتج أن كلمتي "learn" و"guru99" كلمتان مختلفتان، لكنهما تُصنفان كعبارة اسمية، بينما كلمة "from" لا تنتمي إلى عبارة اسمية. يُستخدم التجميع لتصنيف الكلمات المختلفة في نفس المجموعة. وتعتمد النتيجة على القواعد النحوية المُختارة. علاوة على ذلك، يُستخدم التجميع في NLTK لوسم الأنماط واستكشاف مجموعات النصوص.

عدّ بطاقات نقاط البيع

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

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

الإخراج:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

شرح الكود:

  1. استخدم حزمة Counter من وحدة collections. Counter هي فئة فرعية من القاموس تخزن العناصر كمفاتيح وعدد مرات ظهورها كقيم.
  2. قم باستيراد مكتبة nltk لتقسيم النص إلى كلمات.
  3. اكتب النص الذي تريد حساب علامة pos_tag الخاصة به.
  4. قم بتحويل جميع الكلمات إلى أحرف صغيرة قبل عملية التجزئة.
  5. قم بتمرير الكلمات عبر word_tokenize واحسب pos_tag لكل رمز.
  6. ثم يقوم العداد بحساب إجمالي عدد مرات ظهور كل علامة في النص.

التوزيع بتكرار

يشير التوزيع التكراري إلى عدد مرات حدوث نتيجة معينة لتجربة ما. ويُستخدم لإيجاد تكرار كل كلمة في وثيقة. FreqDist الفئة المحددة بواسطة احتمالية nltk الوحدة. يتم زيادة العدد بمقدار واحد في كل مرة تحدث فيها عينة.

بالنسبة لأي كلمة، يمكننا التحقق من عدد مرات ورودها في المستند. على سبيل المثال:

  • طريقة العد: تُعيد الدالة freq_dist.count('and') عدد مرات ظهور كلمة 'and'. وتُسمى هذه الدالة دالة العد.
  • طريقة التردد: freq_dist.freq('and') تُرجع تردد عينة معينة.

سنكتب برنامجًا صغيرًا يحسب التوزيع الترددي لكل كلمة في النص.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

شرح الكود:

  1. قم باستيراد وحدة nltk.
  2. اكتب النص الذي تريد العثور على توزيع الكلمات فيه.
  3. يتم تقسيم كل كلمة في النص إلى أجزاء صغيرة، والتي يتم تقديمها كمدخل لوحدة FreqDist الخاصة بـ nltk.
  4. قم بتطبيق كل كلمة على nltk.FreqDist في شكل قائمة.
  5. ارسم الكلمات في الرسم البياني باستخدام الدالة plot().

ملاحظة: يجب تثبيت مكتبة matplotlib لعرض الرسم البياني. تقوم هذه المكتبة بحساب عدد مرات ظهور كل كلمة في النص، مما يساعد في تحليل المشاعر النصية. المصطلح الأساسي هو "التجزئة": بعد التجزئة، يتم فحص كل كلمة لتحديد عدد مرات ظهورها.

التجميعات: Bigrams و Trigrams

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

لنأخذ على سبيل المثال كلمات مثل الأشعة فوق البنفسجية والأشعة تحت الحمراء. لا تُستخدم كلمتا "فوق البنفسجية" و"أشعة" بشكل منفصل، وبالتالي يمكن اعتبارهما متلازمتين. مثال آخر هو التصوير المقطعي المحوسب (CT Scan)، حيث لا نقول "CT" و"Scan" بشكل منفصل. يمكن تصنيف المتلازمات إلى نوعين:

  • الثنائيات: مزيج من كلمتين
  • التريغرامات: مجموعة من ثلاث كلمات

توفر الثنائيات والثلاثيات ميزات أكثر دلالة وفائدة لـ مثال الميزةtracمرحلة التحليل. هذه مفيدة بشكل خاص في تحليل المشاعر القائم على النصوص.

مثال على الثنائيات Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

الإخراج:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

مثال على ثلاثيات الأشكال Code:

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

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

الإخراج:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

وضع العلامات على الجمل

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

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code التفسير:

  1. Code لاستيراد nltk (المكتبة الطبيعية) Language Toolمجموعة أدوات تحتوي على وحدات فرعية مثل تجزئة الجملة وتجزئة الكلمة).
  2. النص الذي سيتم طباعة علاماته.
  3. تجزئة الجملة إلى كلمات.
  4. تم تنفيذ حلقة تكرارية حيث يتم تقسيم الكلمات من الجملة وطباعة علامة كل كلمة كناتج.

يوجد في المدونة نوعان من علامات أجزاء الكلام:

1. برنامج تصنيف نقاط البيع القائم على القواعد: بالنسبة للكلمات ذات المعنى الغامض، يُطبَّق نهج قائم على القواعد يعتمد على المعلومات السياقية. ويتم ذلك من خلال تحليل معنى الكلمة السابقة أو اللاحقة. ولذلك، تُصنَّف الكلمات وفقًا للقواعد النحوية للغة معينة، مثل استخدام الأحرف الكبيرة وعلامات الترقيم. على سبيل المثال، أداة تصنيف الكلمات من بريل.

2. مُصنِّف نقاط البيع العشوائي: تُطبَّق في هذه الطريقة أساليب مثل التكرار أو الاحتمالية. فإذا كانت كلمة ما تُصنَّف في أغلب الأحيان بعلامة معينة في مجموعة التدريب، تُصنَّف بهذه العلامة في جملة الاختبار. وتعتمد علامة الكلمة ليس فقط على علامتها الحالية، بل أيضًا على العلامات السابقة، لذا فإن هذه الطريقة ليست دقيقة دائمًا.

وضع علامات نقاط البيع باستخدام نموذج ماركوف المخفي

يمكن أيضًا نمذجة مشاكل الوسم باستخدام نموذج ماركوف المخفي (HMM). يتعامل هذا النموذج مع رموز الإدخال كسلسلة قابلة للملاحظة، بينما تُعتبر الوسوم حالات مخفية، والهدف هو تحديد سلسلة الحالات المخفية. على سبيل المثال، x = x1, x2, ..., xn، حيث x هي سلسلة من الرموز، بينما y = y1, y2, y3, y4, ..., yn هي السلسلة المخفية.

كيف يعمل نموذج ماركوف المخفي (HMM)؟

يستخدم نموذج ماركوف المخفي (HMM) توزيعًا مشتركًا P(x, y)، حيث x هو تسلسل الرموز المدخلة وy هو تسلسل الوسوم. سيكون تسلسل الوسوم لـ x هو argmax على y1…yn من p(x1,x2,…xn,y1,y2,y3,…). لقد صنفنا الوسوم من النص، لكن إحصائيات هذه الوسوم بالغة الأهمية، لذا فإن الجزء التالي هو عدّ هذه الوسوم للدراسة الإحصائية.

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

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

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

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

تقوم الدالة nltk.pos_tag() بتعيين علامات أجزاء الكلام. أولاً، تقوم بتقسيم النص إلى رموز باستخدام word_tokenize، ثم تمرر قائمة الرموز إلى pos_tag، التي تُعيد كل كلمة مقترنة بعلامتها مثل NN أو VB أو JJ.

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

تستخدم أدوات الوسم العشوائية الاحتمالات المستمدة من بيانات التدريب. يقوم التعلم الآلي بتقدير مدى احتمالية كل وسم لكلمة معينة بالنظر إلى الوسوم المحيطة بها، ثم يختار التسلسل ذو الاحتمالية الإجمالية الأعلى.

بالإضافة إلى نلتكتشمل الخيارات الشائعة سبا لخطوط الإنتاج السريعة، Stanford CoreNLP، و Hugging Face Transformers للوسم القائم على المحولات.

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

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