You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/he/6-NLP/1-Introduction-to-NLP/README.md

179 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1c2ec40cf55c98a028a359c27ef7e45a",
"translation_date": "2025-09-05T20:35:49+00:00",
"source_file": "6-NLP/1-Introduction-to-NLP/README.md",
"language_code": "he"
}
-->
# מבוא לעיבוד שפה טבעית
השיעור הזה מכסה היסטוריה קצרה ומושגים חשובים של *עיבוד שפה טבעית*, תחום משנה של *בלשנות חישובית*.
## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/)
## מבוא
NLP, כפי שהוא מוכר בדרך כלל, הוא אחד התחומים הידועים ביותר שבהם נעשה שימוש בלמידת מכונה בתוכנות ייצור.
✅ האם אתם יכולים לחשוב על תוכנה שאתם משתמשים בה מדי יום ושכנראה יש בה שילוב של NLP? מה לגבי תוכנות עיבוד תמלילים או אפליקציות ניידות שאתם משתמשים בהן באופן קבוע?
אתם תלמדו על:
- **הרעיון של שפות**. איך שפות התפתחו ומה היו התחומים המרכזיים של המחקר.
- **הגדרות ומושגים**. תלמדו גם הגדרות ומושגים על איך מחשבים מעבדים טקסט, כולל ניתוח תחבירי, דקדוק וזיהוי שמות עצם ופעלים. ישנם משימות קידוד בשיעור הזה, ומוצגים מספר מושגים חשובים שתלמדו לקודד בשיעורים הבאים.
## בלשנות חישובית
בלשנות חישובית היא תחום מחקר ופיתוח שנמשך עשרות שנים, העוסק בשאלה כיצד מחשבים יכולים לעבוד עם שפות, ואפילו להבין, לתרגם ולתקשר באמצעותן. עיבוד שפה טבעית (NLP) הוא תחום קשור שמתמקד באיך מחשבים יכולים לעבד שפות 'טבעיות', כלומר שפות אנושיות.
### דוגמה - תכתיב בטלפון
אם אי פעם הכתבתם לטלפון במקום להקליד או שאלתם עוזר וירטואלי שאלה, הדיבור שלכם הומר לצורת טקסט ואז עובד או *נותח* מהשפה שבה דיברתם. מילות המפתח שזוהו עובדו לפורמט שהטלפון או העוזר הווירטואלי יכלו להבין ולפעול לפיו.
![הבנה](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png)
> הבנה בלשנית אמיתית היא קשה! תמונה מאת [Jen Looper](https://twitter.com/jenlooper)
### איך הטכנולוגיה הזו מתאפשרת?
הדבר מתאפשר כי מישהו כתב תוכנית מחשב לעשות זאת. לפני כמה עשורים, כמה סופרי מדע בדיוני חזו שאנשים ידברו בעיקר עם המחשבים שלהם, והמחשבים תמיד יבינו בדיוק למה הם מתכוונים. למרבה הצער, התברר שזהו אתגר קשה יותר ממה שרבים דמיינו, ולמרות שהבעיה מובנת הרבה יותר כיום, ישנם אתגרים משמעותיים בהשגת עיבוד שפה טבעית 'מושלם' בכל הנוגע להבנת המשמעות של משפט. זו בעיה קשה במיוחד כשמדובר בהבנת הומור או זיהוי רגשות כמו סרקזם במשפט.
בשלב הזה, ייתכן שאתם נזכרים בשיעורי בית הספר שבהם המורה לימד את חלקי הדקדוק במשפט. במדינות מסוימות, תלמידים לומדים דקדוק ובלשנות כתחום לימוד ייעודי, אך ברבות מהמדינות, נושאים אלו נכללים כחלק מלימוד שפה: בין אם זו השפה הראשונה שלכם בבית הספר היסודי (לימוד קריאה וכתיבה) ואולי שפה שנייה בבית הספר העל-יסודי או התיכון. אל תדאגו אם אינכם מומחים בהבחנה בין שמות עצם לפעלים או בין תארים לתארי פועל!
אם אתם מתקשים להבדיל בין *הווה פשוט* ל-*הווה מתמשך*, אתם לא לבד. זהו אתגר עבור אנשים רבים, אפילו דוברי שפת אם. החדשות הטובות הן שמחשבים טובים מאוד ביישום כללים פורמליים, ותלמדו לכתוב קוד שיכול *לנתח* משפט כמו בן אדם. האתגר הגדול יותר שתבדקו בהמשך הוא הבנת *המשמעות* ו-*הרגש* של משפט.
## דרישות מוקדמות
לשיעור הזה, הדרישה העיקרית היא היכולת לקרוא ולהבין את השפה של השיעור. אין בעיות מתמטיות או משוואות לפתור. בעוד שהמחבר המקורי כתב את השיעור באנגלית, הוא מתורגם גם לשפות אחרות, כך שאתם עשויים לקרוא תרגום. ישנם דוגמאות שבהן נעשה שימוש במספר שפות שונות (כדי להשוות את כללי הדקדוק של שפות שונות). אלו *לא* מתורגמות, אך הטקסט המסביר כן, כך שהמשמעות צריכה להיות ברורה.
למשימות הקידוד, תשתמשו ב-Python והדוגמאות משתמשות ב-Python 3.8.
בקטע הזה, תצטרכו ותשתמשו ב:
- **הבנה של Python 3**. הבנת שפת תכנות ב-Python 3, השיעור הזה משתמש בקלט, לולאות, קריאת קבצים, מערכים.
- **Visual Studio Code + הרחבה**. נשתמש ב-Visual Studio Code ובהרחבת Python שלו. תוכלו גם להשתמש ב-IDE של Python לבחירתכם.
- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) היא ספריית עיבוד טקסט פשוטה עבור Python. עקבו אחר ההוראות באתר TextBlob כדי להתקין אותה במערכת שלכם (התקינו גם את ה-corpora, כפי שמוצג למטה):
```bash
pip install -U textblob
python -m textblob.download_corpora
```
> 💡 טיפ: ניתן להריץ Python ישירות בסביבות VS Code. בדקו את [התיעוד](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) למידע נוסף.
## לדבר עם מכונות
ההיסטוריה של הניסיון לגרום למחשבים להבין שפה אנושית נמשכת עשרות שנים, ואחד המדענים הראשונים שעסקו בעיבוד שפה טבעית היה *אלן טיורינג*.
### מבחן טיורינג
כשטיורינג חקר *בינה מלאכותית* בשנות ה-50, הוא שקל אם ניתן לערוך מבחן שיחה בין אדם למחשב (באמצעות תקשורת כתובה) שבו האדם בשיחה אינו בטוח אם הוא משוחח עם אדם אחר או עם מחשב.
אם, לאחר פרק זמן מסוים של שיחה, האדם לא יכול לקבוע אם התשובות הגיעו ממחשב או לא, האם ניתן לומר שהמחשב *חושב*?
### ההשראה - 'משחק החיקוי'
הרעיון לכך הגיע ממשחק מסיבות שנקרא *משחק החיקוי*, שבו חוקר נמצא לבד בחדר ומוטלת עליו המשימה לקבוע מי מבין שני אנשים (בחדר אחר) הם גבר ואישה בהתאמה. החוקר יכול לשלוח פתקים, ועליו לנסות לחשוב על שאלות שבהן התשובות הכתובות יחשפו את המגדר של האדם המסתורי. כמובן, השחקנים בחדר השני מנסים להטעות את החוקר על ידי מתן תשובות באופן שמטעה או מבלבל את החוקר, תוך כדי מתן רושם של תשובה כנה.
### פיתוח אליזה
בשנות ה-60, מדען מ-MIT בשם *ג'וזף וייזנבאום* פיתח [*אליזה*](https://wikipedia.org/wiki/ELIZA), 'מטפלת' ממוחשבת ששואלת את האדם שאלות ונותנת רושם של הבנת תשובותיו. עם זאת, בעוד שאליזה יכלה לנתח משפט ולזהות מבנים דקדוקיים מסוימים ומילות מפתח כדי לתת תשובה סבירה, לא ניתן היה לומר שהיא *מבינה* את המשפט. אם אליזה הוצגה עם משפט בפורמט "**אני** <u>עצוב</u>", היא עשויה לשנות ולסדר מחדש מילים במשפט כדי ליצור את התשובה "כמה זמן **אתה** <u>עצוב</u>".
זה נתן את הרושם שאליזה הבינה את ההצהרה ושאלה שאלה המשך, בעוד שבמציאות, היא שינתה את הזמן והוסיפה כמה מילים. אם אליזה לא יכלה לזהות מילת מפתח שיש לה תשובה עבורה, היא הייתה נותנת תשובה אקראית שיכולה להיות רלוונטית להרבה הצהרות שונות. ניתן היה להטעות את אליזה בקלות, למשל אם משתמש כתב "**אתה** <u>אופניים</u>", היא עשויה להגיב עם "כמה זמן **אני** <u>אופניים</u>?", במקום תשובה סבירה יותר.
[![שיחה עם אליזה](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "שיחה עם אליזה")
> 🎥 לחצו על התמונה למעלה לצפייה בסרטון על תוכנית אליזה המקורית
> הערה: ניתן לקרוא את התיאור המקורי של [אליזה](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) שפורסם ב-1966 אם יש לכם חשבון ACM. לחלופין, קראו על אליזה ב-[ויקיפדיה](https://wikipedia.org/wiki/ELIZA).
## תרגיל - קידוד בוט שיחה בסיסי
בוט שיחה, כמו אליזה, הוא תוכנית שמקבלת קלט ממשתמש ונותנת רושם של הבנה ותגובה אינטליגנטית. בניגוד לאליזה, הבוט שלנו לא יכלול מספר כללים שיתנו לו את הרושם של שיחה אינטליגנטית. במקום זאת, הבוט שלנו יוכל רק לשמור על השיחה באמצעות תגובות אקראיות שעשויות להתאים כמעט לכל שיחה טריוויאלית.
### התוכנית
השלבים שלכם בבניית בוט שיחה:
1. הדפיסו הוראות שמייעצות למשתמש איך לתקשר עם הבוט
2. התחילו לולאה
1. קבלו קלט ממשתמש
2. אם המשתמש ביקש לצאת, צאו
3. עבדו את הקלט של המשתמש וקבעו תגובה (במקרה הזה, התגובה היא בחירה אקראית מתוך רשימת תגובות כלליות אפשריות)
4. הדפיסו את התגובה
3. חזרו לשלב 2
### בניית הבוט
בואו ניצור את הבוט עכשיו. נתחיל בהגדרת כמה משפטים.
1. צרו את הבוט הזה בעצמכם ב-Python עם התגובות האקראיות הבאות:
```python
random_responses = ["That is quite interesting, please tell me more.",
"I see. Do go on.",
"Why do you say that?",
"Funny weather we've been having, isn't it?",
"Let's change the subject.",
"Did you catch the game last night?"]
```
הנה דוגמת פלט שתנחה אתכם (קלט המשתמש מופיע בשורות שמתחילות ב-`>`):
```output
Hello, I am Marvin, the simple robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am good thanks
That is quite interesting, please tell me more.
> today I went for a walk
Did you catch the game last night?
> I did, but my team lost
Funny weather we've been having, isn't it?
> yes but I hope next week is better
Let's change the subject.
> ok, lets talk about music
Why do you say that?
> because I like music!
Why do you say that?
> bye
It was nice talking to you, goodbye!
```
פתרון אפשרי למשימה נמצא [כאן](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
✅ עצרו וחשבו
1. האם אתם חושבים שהתגובות האקראיות יוכלו 'להטעות' מישהו לחשוב שהבוט באמת הבין אותם?
2. אילו תכונות הבוט יצטרך כדי להיות יעיל יותר?
3. אם בוט באמת יכול 'להבין' את המשמעות של משפט, האם הוא יצטרך 'לזכור' את המשמעות של משפטים קודמים בשיחה גם כן?
---
## 🚀אתגר
בחרו אחד מהאלמנטים של "עצרו וחשבו" למעלה ונסו ליישם אותו בקוד או כתבו פתרון על נייר באמצעות פסאודו-קוד.
בשיעור הבא, תלמדו על מספר גישות נוספות לניתוח שפה טבעית ולמידת מכונה.
## [שאלון אחרי השיעור](https://ff-quizzes.netlify.app/en/ml/)
## סקירה ולימוד עצמי
עיינו במקורות למטה כהזדמנויות לקריאה נוספת.
### מקורות
1. שובר, לנארט, "בלשנות חישובית", *The Stanford Encyclopedia of Philosophy* (מהדורת אביב 2020), אדוארד נ. זלטה (עורך), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
2. אוניברסיטת פרינסטון "אודות WordNet." [WordNet](https://wordnet.princeton.edu/). אוניברסיטת פרינסטון. 2010.
## משימה
[חפשו בוט](assignment.md)
---
**כתב ויתור**:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.