|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3",
|
|
|
"translation_date": "2025-09-04T20:53:06+00:00",
|
|
|
"source_file": "6-NLP/2-Tasks/README.md",
|
|
|
"language_code": "ar"
|
|
|
}
|
|
|
-->
|
|
|
# مهام وتقنيات شائعة في معالجة اللغة الطبيعية
|
|
|
|
|
|
في معظم مهام *معالجة اللغة الطبيعية*، يجب تقسيم النص المراد معالجته، وفحصه، وتخزين النتائج أو مقارنتها مع القواعد ومجموعات البيانات. تتيح هذه المهام للمبرمج استنتاج _المعنى_ أو _النية_ أو فقط _تكرار_ المصطلحات والكلمات في النص.
|
|
|
|
|
|
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
دعونا نستكشف التقنيات الشائعة المستخدمة في معالجة النصوص. عند دمجها مع التعلم الآلي، تساعدك هذه التقنيات على تحليل كميات كبيرة من النصوص بكفاءة. ولكن قبل تطبيق التعلم الآلي على هذه المهام، دعونا نفهم المشكلات التي يواجهها متخصصو معالجة اللغة الطبيعية.
|
|
|
|
|
|
## المهام الشائعة في معالجة اللغة الطبيعية
|
|
|
|
|
|
هناك طرق مختلفة لتحليل النص الذي تعمل عليه. هناك مهام يمكنك تنفيذها، ومن خلال هذه المهام يمكنك فهم النص واستخلاص استنتاجات. عادةً ما يتم تنفيذ هذه المهام بترتيب معين.
|
|
|
|
|
|
### تقسيم النصوص (Tokenization)
|
|
|
|
|
|
ربما تكون أول خطوة تقوم بها معظم خوارزميات معالجة اللغة الطبيعية هي تقسيم النص إلى وحدات صغيرة، أو كلمات. على الرغم من أن هذا يبدو بسيطًا، إلا أن التعامل مع علامات الترقيم وفواصل الكلمات والجمل في لغات مختلفة قد يجعل الأمر معقدًا. قد تحتاج إلى استخدام طرق مختلفة لتحديد الفواصل.
|
|
|
|
|
|

|
|
|
> تقسيم جملة من **كبرياء وتحامل**. رسم توضيحي بواسطة [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
### التضمين (Embeddings)
|
|
|
|
|
|
[تضمين الكلمات](https://wikipedia.org/wiki/Word_embedding) هو طريقة لتحويل بيانات النصوص إلى أرقام. يتم التضمين بطريقة تجعل الكلمات ذات المعاني المتشابهة أو الكلمات المستخدمة معًا تتجمع في مجموعات.
|
|
|
|
|
|

|
|
|
> "لدي أعلى احترام لأعصابك، فهي أصدقائي القدامى." - تضمين الكلمات لجملة من **كبرياء وتحامل**. رسم توضيحي بواسطة [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
✅ جرّب [هذه الأداة المثيرة](https://projector.tensorflow.org/) لتجربة تضمين الكلمات. عند النقر على كلمة واحدة، تظهر مجموعات من الكلمات المشابهة: 'toy' تتجمع مع 'disney'، 'lego'، 'playstation'، و'console'.
|
|
|
|
|
|
### التحليل النحوي وتحديد أجزاء الكلام
|
|
|
|
|
|
يمكن تصنيف كل كلمة تم تقسيمها كجزء من الكلام - اسم، فعل، أو صفة. الجملة `الثعلب الأحمر السريع قفز فوق الكلب البني الكسول` قد يتم تصنيفها نحويًا كالتالي: الثعلب = اسم، قفز = فعل.
|
|
|
|
|
|

|
|
|
|
|
|
> تحليل جملة من **كبرياء وتحامل**. رسم توضيحي بواسطة [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
التحليل النحوي هو التعرف على الكلمات المرتبطة ببعضها البعض في الجملة - على سبيل المثال `الثعلب الأحمر السريع قفز` هو تسلسل صفة-اسم-فعل منفصل عن تسلسل `الكلب البني الكسول`.
|
|
|
|
|
|
### تكرار الكلمات والعبارات
|
|
|
|
|
|
إجراء مفيد عند تحليل نص كبير هو بناء قاموس لكل كلمة أو عبارة ذات أهمية وعدد مرات ظهورها. العبارة `الثعلب الأحمر السريع قفز فوق الكلب البني الكسول` تحتوي على تكرار للكلمة "the" بمقدار 2.
|
|
|
|
|
|
دعونا نلقي نظرة على نص كمثال حيث نحسب تكرار الكلمات. قصيدة "The Winners" لرديارد كبلينغ تحتوي على المقطع التالي:
|
|
|
|
|
|
```output
|
|
|
What the moral? Who rides may read.
|
|
|
When the night is thick and the tracks are blind
|
|
|
A friend at a pinch is a friend, indeed,
|
|
|
But a fool to wait for the laggard behind.
|
|
|
Down to Gehenna or up to the Throne,
|
|
|
He travels the fastest who travels alone.
|
|
|
```
|
|
|
|
|
|
نظرًا لأن تكرار العبارات يمكن أن يكون حساسًا أو غير حساس لحالة الأحرف حسب الحاجة، فإن العبارة `a friend` تظهر بتكرار 2 و`the` تظهر بتكرار 6، و`travels` تظهر بتكرار 2.
|
|
|
|
|
|
### N-grams
|
|
|
|
|
|
يمكن تقسيم النص إلى تسلسلات من الكلمات بطول معين، كلمة واحدة (unigram)، كلمتين (bigram)، ثلاث كلمات (trigram) أو أي عدد من الكلمات (n-grams).
|
|
|
|
|
|
على سبيل المثال، الجملة `الثعلب الأحمر السريع قفز فوق الكلب البني الكسول` مع قيمة n-gram تساوي 2 تنتج n-grams التالية:
|
|
|
|
|
|
1. الثعلب الأحمر
|
|
|
2. الأحمر السريع
|
|
|
3. السريع قفز
|
|
|
4. قفز فوق
|
|
|
5. فوق الكلب
|
|
|
6. الكلب البني
|
|
|
7. البني الكسول
|
|
|
|
|
|
قد يكون من الأسهل تصورها كصندوق متحرك فوق الجملة. هنا مثال لـ n-grams من 3 كلمات، حيث يتم تمييز n-gram في كل جملة:
|
|
|
|
|
|
1. <u>**الثعلب الأحمر السريع**</u> قفز فوق الكلب البني الكسول
|
|
|
2. الثعلب **<u>الأحمر السريع قفز</u>** فوق الكلب البني الكسول
|
|
|
3. الثعلب الأحمر **<u>السريع قفز فوق</u>** الكلب البني الكسول
|
|
|
4. الثعلب الأحمر السريع **<u>قفز فوق الكلب</u>** البني الكسول
|
|
|
5. الثعلب الأحمر السريع قفز **<u>فوق الكلب البني</u>** الكسول
|
|
|
6. الثعلب الأحمر السريع قفز فوق **<u>الكلب البني الكسول</u>**
|
|
|
|
|
|

|
|
|
|
|
|
> قيمة n-gram تساوي 3: رسم توضيحي بواسطة [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
### استخراج العبارات الاسمية
|
|
|
|
|
|
في معظم الجمل، هناك اسم يكون هو الموضوع أو المفعول به في الجملة. في اللغة الإنجليزية، يمكن التعرف عليه غالبًا بوجود 'a' أو 'an' أو 'the' قبله. التعرف على الموضوع أو المفعول به في الجملة عن طريق 'استخراج العبارة الاسمية' هو مهمة شائعة في معالجة اللغة الطبيعية عند محاولة فهم معنى الجملة.
|
|
|
|
|
|
✅ في الجملة "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun."، هل يمكنك تحديد العبارات الاسمية؟
|
|
|
|
|
|
في الجملة `الثعلب الأحمر السريع قفز فوق الكلب البني الكسول` هناك عبارتان اسميتان: **الثعلب الأحمر السريع** و**الكلب البني الكسول**.
|
|
|
|
|
|
### تحليل المشاعر
|
|
|
|
|
|
يمكن تحليل جملة أو نص لتحديد المشاعر، أو مدى *إيجابيتها* أو *سلبيتها*. يتم قياس المشاعر من حيث *القطبية* و*الموضوعية/الذاتية*. يتم قياس القطبية من -1.0 إلى 1.0 (سلبي إلى إيجابي) والموضوعية من 0.0 إلى 1.0 (أكثر موضوعية إلى أكثر ذاتية).
|
|
|
|
|
|
✅ لاحقًا ستتعلم أن هناك طرقًا مختلفة لتحديد المشاعر باستخدام التعلم الآلي، ولكن إحدى الطرق هي وجود قائمة بالكلمات والعبارات المصنفة كإيجابية أو سلبية بواسطة خبير بشري وتطبيق هذا النموذج على النص لحساب درجة القطبية. هل ترى كيف يمكن أن تعمل هذه الطريقة في بعض الحالات وأقل في حالات أخرى؟
|
|
|
|
|
|
### التصريف
|
|
|
|
|
|
التصريف يتيح لك أخذ كلمة والحصول على صيغة المفرد أو الجمع لها.
|
|
|
|
|
|
### التأسيس (Lemmatization)
|
|
|
|
|
|
*التأسيس* هو الجذر أو الكلمة الرئيسية لمجموعة من الكلمات، على سبيل المثال *flew*، *flies*، *flying* لها جذر الفعل *fly*.
|
|
|
|
|
|
هناك أيضًا قواعد بيانات مفيدة متاحة للباحثين في معالجة اللغة الطبيعية، وأبرزها:
|
|
|
|
|
|
### WordNet
|
|
|
|
|
|
[WordNet](https://wordnet.princeton.edu/) هي قاعدة بيانات للكلمات، المرادفات، الأضداد والعديد من التفاصيل الأخرى لكل كلمة في العديد من اللغات المختلفة. إنها مفيدة للغاية عند محاولة بناء الترجمات، المدققات الإملائية، أو أدوات اللغة من أي نوع.
|
|
|
|
|
|
## مكتبات معالجة اللغة الطبيعية
|
|
|
|
|
|
لحسن الحظ، لست بحاجة إلى بناء كل هذه التقنيات بنفسك، حيث توجد مكتبات بايثون ممتازة تجعلها أكثر سهولة للمطورين الذين ليسوا متخصصين في معالجة اللغة الطبيعية أو التعلم الآلي. تتضمن الدروس القادمة المزيد من الأمثلة على هذه المكتبات، ولكن هنا ستتعلم بعض الأمثلة المفيدة لمساعدتك في المهمة التالية.
|
|
|
|
|
|
### تمرين - استخدام مكتبة `TextBlob`
|
|
|
|
|
|
دعونا نستخدم مكتبة تسمى TextBlob لأنها تحتوي على واجهات برمجية مفيدة للتعامل مع هذا النوع من المهام. TextBlob "تعتمد على العملاقين [NLTK](https://nltk.org) و[pattern](https://github.com/clips/pattern)، وتعمل بشكل جيد مع كليهما." تحتوي على قدر كبير من التعلم الآلي المدمج في واجهاتها البرمجية.
|
|
|
|
|
|
> ملاحظة: يتوفر [دليل البدء السريع](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) لـ TextBlob وهو موصى به لمطوري بايثون ذوي الخبرة.
|
|
|
|
|
|
عند محاولة التعرف على *العبارات الاسمية*، تقدم TextBlob عدة خيارات من المستخلصات للعثور على العبارات الاسمية.
|
|
|
|
|
|
1. ألقِ نظرة على `ConllExtractor`.
|
|
|
|
|
|
```python
|
|
|
from textblob import TextBlob
|
|
|
from textblob.np_extractors import ConllExtractor
|
|
|
# import and create a Conll extractor to use later
|
|
|
extractor = ConllExtractor()
|
|
|
|
|
|
# later when you need a noun phrase extractor:
|
|
|
user_input = input("> ")
|
|
|
user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified
|
|
|
np = user_input_blob.noun_phrases
|
|
|
```
|
|
|
|
|
|
> ما الذي يحدث هنا؟ [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) هو "مستخلص للعبارات الاسمية يستخدم تحليل القطع المدرب باستخدام مجموعة بيانات ConLL-2000." يشير ConLL-2000 إلى مؤتمر 2000 حول التعلم الحاسوبي للغة الطبيعية. كل عام، يستضيف المؤتمر ورشة عمل لمعالجة مشكلة صعبة في معالجة اللغة الطبيعية، وفي عام 2000 كانت المشكلة هي تقسيم العبارات الاسمية. تم تدريب نموذج على صحيفة وول ستريت جورنال، باستخدام "الأقسام 15-18 كبيانات تدريب (211727 رمزًا) والقسم 20 كبيانات اختبار (47377 رمزًا)". يمكنك الاطلاع على الإجراءات المستخدمة [هنا](https://www.clips.uantwerpen.be/conll2000/chunking/) والنتائج [هنا](https://ifarm.nl/erikt/research/np-chunking.html).
|
|
|
|
|
|
### التحدي - تحسين الروبوت الخاص بك باستخدام معالجة اللغة الطبيعية
|
|
|
|
|
|
في الدرس السابق، قمت ببناء روبوت بسيط للأسئلة والأجوبة. الآن، ستجعل "مارفن" أكثر تعاطفًا من خلال تحليل مدخلاتك لتحديد المشاعر وطباعة استجابة تتناسب مع المشاعر. ستحتاج أيضًا إلى التعرف على `noun_phrase` وطرح أسئلة حولها.
|
|
|
|
|
|
خطواتك عند بناء روبوت محادثة أفضل:
|
|
|
|
|
|
1. طباعة التعليمات التي تنصح المستخدم بكيفية التفاعل مع الروبوت
|
|
|
2. بدء حلقة
|
|
|
1. قبول مدخلات المستخدم
|
|
|
2. إذا طلب المستخدم الخروج، قم بإنهاء البرنامج
|
|
|
3. معالجة مدخلات المستخدم وتحديد استجابة المشاعر المناسبة
|
|
|
4. إذا تم اكتشاف عبارة اسمية في المشاعر، قم بجمعها واطلب المزيد من المدخلات حول هذا الموضوع
|
|
|
5. طباعة الاستجابة
|
|
|
3. العودة إلى الخطوة 2
|
|
|
|
|
|
إليك مقتطف الكود لتحديد المشاعر باستخدام TextBlob. لاحظ أن هناك أربعة *تدرجات* فقط لاستجابة المشاعر (يمكنك إضافة المزيد إذا أردت):
|
|
|
|
|
|
```python
|
|
|
if user_input_blob.polarity <= -0.5:
|
|
|
response = "Oh dear, that sounds bad. "
|
|
|
elif user_input_blob.polarity <= 0:
|
|
|
response = "Hmm, that's not great. "
|
|
|
elif user_input_blob.polarity <= 0.5:
|
|
|
response = "Well, that sounds positive. "
|
|
|
elif user_input_blob.polarity <= 1:
|
|
|
response = "Wow, that sounds great. "
|
|
|
```
|
|
|
|
|
|
إليك بعض المخرجات النموذجية لتوجيهك (مدخلات المستخدم تبدأ بـ >):
|
|
|
|
|
|
```output
|
|
|
Hello, I am Marvin, the friendly robot.
|
|
|
You can end this conversation at any time by typing 'bye'
|
|
|
After typing each answer, press 'enter'
|
|
|
How are you today?
|
|
|
> I am ok
|
|
|
Well, that sounds positive. Can you tell me more?
|
|
|
> I went for a walk and saw a lovely cat
|
|
|
Well, that sounds positive. Can you tell me more about lovely cats?
|
|
|
> cats are the best. But I also have a cool dog
|
|
|
Wow, that sounds great. Can you tell me more about cool dogs?
|
|
|
> I have an old hounddog but he is sick
|
|
|
Hmm, that's not great. Can you tell me more about old hounddogs?
|
|
|
> bye
|
|
|
It was nice talking to you, goodbye!
|
|
|
```
|
|
|
|
|
|
إحدى الحلول الممكنة للمهمة موجودة [هنا](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py)
|
|
|
|
|
|
✅ تحقق من المعرفة
|
|
|
|
|
|
1. هل تعتقد أن الاستجابات المتعاطفة قد "تخدع" شخصًا ليعتقد أن الروبوت يفهمه بالفعل؟
|
|
|
2. هل يجعل التعرف على العبارة الاسمية الروبوت أكثر "إقناعًا"؟
|
|
|
3. لماذا يعتبر استخراج "العبارة الاسمية" من الجملة أمرًا مفيدًا؟
|
|
|
|
|
|
---
|
|
|
|
|
|
قم بتنفيذ الروبوت في التحقق من المعرفة السابق واختبره مع صديق. هل يمكنه خداعهم؟ هل يمكنك جعل الروبوت الخاص بك أكثر "إقناعًا"؟
|
|
|
|
|
|
## 🚀التحدي
|
|
|
|
|
|
خذ مهمة من التحقق من المعرفة السابق وحاول تنفيذها. اختبر الروبوت مع صديق. هل يمكنه خداعهم؟ هل يمكنك جعل الروبوت الخاص بك أكثر "إقناعًا"؟
|
|
|
|
|
|
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## المراجعة والدراسة الذاتية
|
|
|
|
|
|
في الدروس القليلة القادمة، ستتعلم المزيد عن تحليل المشاعر. ابحث عن هذه التقنية المثيرة في مقالات مثل تلك الموجودة على [KDNuggets](https://www.kdnuggets.com/tag/nlp)
|
|
|
|
|
|
## الواجب
|
|
|
|
|
|
[اجعل الروبوت يتحدث](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**إخلاء المسؤولية**:
|
|
|
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. |