Jump to content
החלפת מצב תפריט
שינוי מצב תפריט ההעדפות
החלפת מצב תפריט אישי
לא בחשבון
כתובת ה־IP שלך תהיה גלויה לציבור אם תעשה עריכות כלשהן.

מודל שפה

מתוך ויקיפדיה, האנציקלופדיה החופשית

מודל שפה הוא מודל הסתברותי של שפה טבעית. [1] הדוגמאות המוכרות ביותר של שימוש במודלי שפה הן "השלמה אוטומטית", המציעה את המילה או המילים הכי סבירות להשלמת טקסט שהוקלד עד כה, וכן כלי בינה מלאכותית טקסטואליים בגרסתם המתקדמת כמודלי שפה גדולים דוגמת ChatGPT או Gemini.

מודלי שפה משמשים עבור מגוון בעיות בבלשנות חישובית; זיהוי דיבור והפיכתו לטקסט, כדי להבטיח שרצפי מילים בסבירות נמוכה לא יופיעו, ועד לשימוש רחב יותר בתרגום מכונה, יצירת טקסט ממוכן דמוי אדם, זיהוי חלקי דיבור, זיהוי תווים אופטי, זיהוי ממוחשב של כתב יד, ויישומים נוספים.

סוגי מודלים עריכה

Unigram עריכה

ניתן להתייחס למודל Unigram כשילוב של כמה אוטומטים סופיים של מצב אחד.[2] המודל מניח שההסתברויות של אסימונים ברצף אינן תלויות, למשל:

<math>P_\text{uni}(t_1t_2t_3)=P(t_1)P(t_2)P(t_3).</math>

במודל זה, ההסתברות של כל מילה תלויה רק בהסתברות של אותה מילה במסמך, כך שיש לנו רק אוטומטים סופיים של מצב אחד כיחידות. לאוטומט עצמו יש התפלגות הסתברות על כל אוצר המילים של המודל, המסתכמת ל-1. להלן איור של דגם Unigram של מסמך.

תנאים הסתברות במסמך
a 0.1
world 0.2
likes 0.05
we 0.05
share 0.3
... ...
<math>\sum_{\text{term in doc}} P(\text{term}) = 1</math>

ההסתברות שנוצרת עבור שאילתה ספציפית מחושבת כ

<math>P(\text{query}) = \prod_{\text{term in query}} P(\text{term})</math>

למסמכים שונים יש מודלי Unigram, עם הסתברויות פגיעה שונות של מילים. התפלגויות ההסתברות ממסמכים שונים משמשות ליצירת הסתברויות פגיעה עבור כל שאילתה. ניתן לדרג מסמכים עבור שאילתה לפי ההסתברויות. דוגמה למודלי Unigram של שני מסמכים:

תנאים הסתברות ב-Doc1 הסתברות ב-Doc2
a 0.1 0.3
world 0.2 0.1
likes 0.05 0.03
we 0.05 0.02
share 0.3 0.2
... ... ...

בהקשרים של אחזור מידע, מודלי Unigram מופשטים לעיתים קרובות כדי למנוע מקרים שבהם P (מונח)=0. גישה נפוצה היא ליצור מודל סבירות מקסימלית עבור כל האוסף ואינטרפולציה ליניארית של מודל האוסף עם מודל סבירות מקסימלית עבור כל מסמך כדי לפשט את המודל.[3]

n-gram עריכה

במודל n-gram, ההסתברות <math>P(w_1,\ldots,w_m)</math> של התבוננות במשפט <math>w_1,\ldots,w_m</math> משוער כ

<math>P(w_1,\ldots,w_m) = \prod^m_{i=1} P(w_i\mid w_1,\ldots,w_{i-1})\approx \prod^m_{i=2} P(w_i\mid w_{i-(n-1)},\ldots,w_{i-1})</math>

ההנחה היא שההסתברות להתקלות במילה ה- i w i בהיסטוריית ההקשר של ה- i הקודם - ניתן להעריך 1 מילים לפי ההסתברות להתבונן בה בהיסטוריית ההקשר המקוצרת של ה- n הקודמת - 1 מילים ( נכס מרקוב מסדר n ). כדי להבהיר, עבור n=3 ו- i=2 יש לנו <math>P(w_i\mid w_{i-(n-1)},\ldots,w_{i-1})=P(w_2\mid w_1)</math>

ניתן לחשב את ההסתברות המותנית מתוך ספירת תדירות של מודל n-gram:

<math>P(w_i\mid w_{i-(n-1)},\ldots,w_{i-1}) = \frac{\mathrm{count}(w_{i-(n-1)},\ldots,w_{i-1},w_i)}{\mathrm{count}(w_{i-(n-1)},\ldots,w_{i-1})}</math>

מודלי bigram ו־trigram מציינים מודלי n-gram עם n=2 ו- n=3, בהתאמה.[4]

בדרך כלל, הסתברויות מודל n-gram אינן נגזרות ישירות מספירת תדרים, מכיוון שבמודלים שנגזרו כך צפות בעיות כאשר הם מתמודדים עם n-gram כלשהם שלא נראו במפורש קודם לכן.

במקום זאת, נחוצה צורה כלשהי של "החלקה", הקצאת חלק ממסת ההסתברות הכוללת למילים בלתי נראות או ל-n-gram. נעשה שימוש בשיטות שונות, החל מהחלקה פשוטה של "הוספה אחת" (הקצאת ספירה של 1 ל-n- גרם בלתי נראה, כקודם לא אינפורמטיבי) ועד למודלים מתוחכמים יותר, כגון הנחות של Good-Turing או back-off models.

דו-כיווני עריכה

ייצוגים דו-כיווניים מתנים הן לפני והן לאחר ההקשר (למשל, מילים) בכל השכבות.

דוגמה עריכה

במודל שפה bigram (n=2), ההסתברות של המשפט שראיתי את הבית האדום משוערת כמו

<math>P(\text{I, saw, the, red, house}) \approx P(\text{I}\mid\langle s\rangle) P(\text{saw}\mid \text{I}) P(\text{the}\mid\text{saw}) P(\text{red}\mid\text{the}) P(\text{house}\mid\text{red}) P(\langle /s\rangle\mid \text{house})</math>

ואילו במודל שפה trigram (נ=3), הקירוב הוא

<math>P(\text{I, saw, the, red, house}) \approx P(\text{I}\mid \langle s\rangle,\langle s\rangle) P(\text{saw}\mid\langle s\rangle,I) P(\text{the}\mid\text{I, saw}) P(\text{red}\mid\text{saw, the}) P(\text{house}\mid\text{the, red}) P(\langle /s\rangle\mid\text{red, house})</math>

שימו לב שההקשר של ה-n הראשונה–1 n -גרם מלא בסמנים של תחילת המשפט, המסומנים בדרך כלל על ידי <s>.

אקספוננציאלי עריכה

מודלים של שפת אנטרופיה מקסימלית מקודדים את הקשר בין מילה להיסטוריה של n-gram באמצעות פונקציות תכונה. המשוואה היא

<math> P(w_m \mid w_1,\ldots,w_{m-1}) = \frac{1}{Z(w_1,\ldots,w_{m-1})} \exp (a^T f(w_1,\ldots,w_m))</math>

כאשר <math>Z(w_1,\ldots,w_{m-1})</math> היא פונקציית המחיצה, <math>a</math> הוא וקטור הפרמטר, ו <math>f(w_1,\ldots,w_m)</math> היא פונקציית הפיצ'ר. במקרה הפשוט ביותר, פונקציית התכונה היא רק אינדיקטור לנוכחות של n-gram מסוים.

המודל הלוג-ביליניארי הוא דוגמה נוספת למודל שפה אקספוננציאלי.

רשת נוירונים עריכה

מודלי שפות מבוססי רשתות נוירונים משתמשים בייצוגים או הטמעות מתמשכות של מילים כדי לבצע את התחזיות שלהם.[5] מודלים אלה עושים שימוש ברשתות עצביות מלאכותיות.

ככל שמודלי שפה מאומנים על טקסטים גדולים יותר ויותר, אוצר המילים של המודל גדל. וכך גם מספר הרצפים האפשריים של מילים גדל באופן אקספוננציאלי. דבר זה גורם לבעיה של "דלילות נתונים" בגלל הרצפים הרבים האפשריים. לפיכך, יש צורך בסטטיסטיקה כדי להעריך נכון את הסתברות הופעת המילה. רשתות נוירונים נמנעות מבעיה זו על ידי ייצוג מילים בצורה מבוזרת, כצירופים לא ליניאריים של משקלים ב"רשת נוירונים".[6]

בדרך כלל, מודלים של שפת רשת נוירונים בנויים ומאומנים כמסווגים הסתברותיים הלומדים לחזות התפלגות הסתברות

<math>P(w_t \mid \mathrm{context}) \, \forall t \in V</math>

כלומר, הרשת מאומנת לחזות את התפלגות ההסתברות על פני אוצר המילים, בהתחשב להקשר לשוני כלשהו. זה נעשה באמצעות אלגוריתמים סטנדרטיים לאימון רשת נוירונים כגון "ירידה בשיפוע סטוכסטי" עם "התפשטות לאחור". ההקשר עשוי להיות חלון בגודל קבוע של מילים קודמות, כך שהרשת מנבאת

<math>P(w_t \mid w_{t-k}, \dots, w_{t-1})</math>

מ"וקטור תכונה" המייצג את k המילים הקודמות. אפשרות נוספת היא להשתמש במילים "עתידיות" כמו גם במילים מה"עבר" כתכונות, כך שההסתברות המשוערת היא

<math>P(w_t \mid w_{t-k}, \dots, w_{t-1}, w_{t+1}, \dots, w_{t+k})</math>

זה נקרא מודל "שק של מילים" (bag-of-words). כאשר וקטורי התכונה של המילים בהקשר משולבים על ידי פעולה רציפה, המודל הזה מכונה ארכיטקטורת שקית המילים הרציפה (CBOW).

אפשרות שלישית שמתאמנת לאט יותר מה-CBOW אבל מתפקדת מעט יותר טוב היא להפוך את הבעיה הקודמת ולגרום לרשת נוירונים ללמוד את ההקשר בהינתן מילה. או בצורה מדויקת יותר, בהינתן רצף של מילות אימון <math>w_1, w_2, w_3, \dots, w_T</math>, אחד מגדיל את ההסתברות הממוצעת לlog

<math>\frac{1}{T}\sum_{t=1}^T \sum_{-k \leq j \leq k, j \neq 0} \log P(w_{t+j} \mid w_t)</math>

כאשר k, גודל ההקשר האימון, יכול להיות פונקציה של המילה המרכזית <math>w_t</math>. זה נקרא מודל שפת דילוג על גרם (skip-gram). מודלים של שקית מילים ודילוג על גרם הם הבסיס לתוכנית word2vec.[7]

מודלי שפה בולטים עריכה

מודלי שפה בסיסיים:

  • GPT-2: Generative Pre-trained
  • BERT: ייצוג מקודד דו-כיווני של רובוטריקים (BERT)

מודלי שפה גדולים:

  • מודל שפה כללי (GLaM) של טריליון פרמטרים, ממחקר של Google[8]
  • מודלי שפה ליישומי דיאלוג (LaMDA) מודל של 137 מיליארד פרמטרים מ-Google Research[9]
  • Megatron-Turing מודל פרמטרים של 530 מיליארד NLG, מבית Microsoft/Nvidia[10]
  • BigScience Large Open-Science (BLOOM) מודל שפה רב-לשונית פתוחה בגישה פתוחה עם 176 מיליארד פרמטרים.
  • Transformer 2 עם 1.5 מיליארד פרמטרים.
  • GPT-3: Generative Pre-trained Transformer 3, עם גודל חסר תקדים של הקשר באורך 2048 אורך סמלי ו-175 מיליארד פרמטרים (דורש 800 GB של אחסון).
  • GPT-3.5/ ChatGPT /InstructGPT וגרסאות מתקדמות יותר מ-OpenAI[11]
  • GPT-NeoX-20B: מודל שפה אוטורגרסיבית בקוד פתוח עם 20 מיליארד פרמטרים.
  • OPT-175B מאת Meta AI: מודל נוסף של שפה של 175 מיליארד פרמטרים. זה זמין לקהילת המחקר הרחבה יותר של AI.

מודלים יוצרים שאינם מודל שפה:

  • יצירת תמונה תלת-ממדית של DreamFusion/Imagen מ-Google Research[12]
  • Get3D מ-Nvidia[13]
  • MineClip מ-Nvidia[14]
  • Point-E מאת OpenAI: מחולל מודלים תלת־ממדיים.[15]

Hugging Face מארח קבוצה של דגמי שפה זמינים לציבור עבור מפתחים לבניית יישומים באמצעות למידת מכונה.

הערכת איכות של מודלים עריכה

הערכת האיכות של מודלי שפה נעשית בעיקר על ידי השוואה לאמות מידה מדגמיות שנוצרו על ידי אדם במשימות אופייניות למטרה הנמדדת.

מבחני איכות נוספים בודקים את האופי הפנימי של מודל שפה או משווים שני מודלים אחד לשני. מכיוון שמודלי שפה נועדו בדרך כלל להיות דינמיים וללמוד מנתונים שהם רואים, כמה מודלים מוצעים חוקרים את קצב הלמידה, למשל באמצעות בדיקה של עקומות הלמידה של המודלים.[16]

מערכי נתונים שונים פותחו לשימוש כדי להעריך מערכות עיבוד שפה:

  • קורפוס של קבילות לשונית[17]
  • מדד GLUE[18]
  • קורפוס הפרפראזה של מיקרוסופט[19]
  • הסקת שפה טבעית רב-ז'אנרית
  • שאלה בהסקת שפה טבעית
  • צמדי שאלות Quora[20]
  • זיהוי מעורבות טקסטואלית[21]
  • מדד דמיון טקסטואלי סמנטי
  • מבחן תשובה לשאלות SQuAD[22]
  • Stanford Sentiment Treebank [23]
  • וינוגרד NLI

ביקורת עריכה

למרות שניתן להראות שמודלי שפה בזמננו, דוגמת GPT-2, יכולים לבצע פעולות אנושיות בכמה סוגי משימות, לא הוכח עדיין שהם מודלים קוגניטיביים סבירים. לדוגמה, הוכח שרשתות עצביות חוזרות על דפוסים שבני אדם לא יוצרים באופן טבעי, ואינם מצליחים ללמוד דפוסים רבים שבני אדם כן לומדים.[24]

קישורים חיצוניים עריכה

הערות שוליים עריכה

  1. ^ Christopher Manning and Hinrich Schütze, Foundations of statistical natural language processing, MIT, 1999, ISBN 9780262133609
  2. ^ Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze: An Introduction to Information Retrieval, pages 237–240. Cambridge University Press, 2009
  3. ^ Buttcher, Clarke, and Cormack. Information Retrieval: Implementing and Evaluating Search Engines. pg. 289–291. MIT Press.
  4. ^ Craig Trim, What is Language Modeling?, April 26th, 2013.
  5. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  6. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  7. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  8. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  9. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  10. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  11. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  12. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  13. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  14. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  15. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  16. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  17. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  18. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  19. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  20. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  21. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  22. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  23. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
  24. ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).