הטרנספורמרים משנים את עולם הבינה המלאכותית
מודלים מסוג טרנספורמרים משנים את עולם הבינה המלאכותית ומגיעים להישגים על אנושיים במשימות של עיבוד שפה טבעית (NLP), יצירת איורים, קיפול חלבונים, משחקי לוח ומחשב, ועוד. ספריית transformers מאפשרת לעבוד עם הטרנספורמרים השונים בממשק אחיד שנועד לשרת את חובבי Tensorflow כמו גם את מקצועני PyTorch. במדריך זה אסביר בקצרה מהם טרנספורמרים ואדגים סיכום של טקסט באמצעות הספרייה.
מה זה טרנספורמרים בבינה מלאכותית?
התחום של הבינה המלאכותית ולמידת המכונה עובר פיתוח מואץ בשנים האחרונות הודות לטכנולוגית Transformer אשר פותחה ב-2017 על ידי גוגל כדי לאפשר למחשבים לעבוד עם שפה אנושית אך מאז הוכחה כיעילה למגוון שימושים, דוגמת: תרגום, הבנת שפה אנושית, יצירת תמונות, פענוח מבנים מולקולריים, משחקי מחשב, הפעלת רובוטים, ועוד.
טכנולוגיות קודמות ניסו ללמד מחשבים לעבוד עם שפה אנושית בעזרת רשתות נוירונים מסוג RNN אבל הניסיון הראה שהמערכות לומדות לאט, אינן עירות להקשר, ונוטות לשכחה עם התארכות רצף המילים.
כל הטכנולוגיות לעבודה עם שפה אנושית משתמשות בוקטורים מספריים המייצגים מילים בגלל שמחשבים יודעים לעבוד עם מספרים ולא עם מילים. עניין עקרוני בקידוד טקסטים לוקטורים הוא לאיזה מילים לתת משקל גבוה יותר. מערכות attention מאפשרות למחשב ללמוד בעצמו על איזה חלק של המשפט לשים דגש.
בתחילה, מערכות attention שולבו עם רשתות RNN אבל אז פרץ לחיינו הטרנספורמר שהחליף את מערכות ה-RNN במערכות self-attention. הטרנספורמר מייעל את הלמידה על ידי כך שהוא מנצל את היכולת לחישוב מקבילי של מחשבים מודרניים Multi-Head attention. בנוסף, הטרנספורמר לומד טקסטים ארוכים כחטיבה אחת במקום לחלק לרצפים מה שפותר את הבעיה של "שכחה", ומקל על הבנת המילים בהקשר המשפט (לדוגמה, המילה "אות" יכולה להתייחס לסיגנל או ליחידת א"ב).
גוגל הקדימה את העולם ושחררה את BERT - מודל טרנספורמר מאומן עוד ב-2018 לרשות הציבור. חוץ מ-BERT קיימים כמה מאות טרנספורמרים, מתוכם בולטים: GPT של OpenAI המייצר טקסט ברמה חסרת תקדים, עונה על שאלות ומסכם טקסטים, DELL-E ליצירת תמונות על פי משפטים, Alpha Fold של DeepMind לחיזוי המבנה התלת מימדי של חלבונים. המשותף לכל המודלים שהם מתמחים בתחום אחד בניגוד לבני אדם המצויידים במספר גדול של כישורים. לכן, אולי המרשים בטרנספורמרים הוא, GATO שיכול לשחק משחקי מחשב, לשוחח, לערום קוביות באמצעות זרוע רובוטית ולבצע בסה"כ 604 משימות שונות מה שסולל את הדרך לבינה מלאכותית כללית ברמה אנושית.
גם ישראל מצליחה להתברג בצמרת תחום הבינה המלאכותית בעולם הודות למעבדות AI21 מתל אביב אשר פיתחו את המודל Jurassic העולה בכמה היבטים על יכולות הטרנספורמר GPT-3. ניתן לנסות את המודל בחינם (לחץ כדי להשתעשע עם Jurassic).
ספריית transformers של Hugging Face מספקת ממשק API נוח לעבודה עם טרנספורמרים. הספרייה מתממשקת עם כמה מאות מודלים, נכון לרגע כתיבת שורות אילה, ומצויידת במגוון שימושים. לכן הדרך הבטוחה ביותר היא להתחיל את לימוד הספרייה מדף תיאורי המקרה בכתובת: https://huggingface.co/transformers/usage.html. בדף תמצאו הסבר כיצד לסווג טקסטים, לבקש ממודל לענות בשאלות על טקסט, תרגום וחיבור טקסט על סמך משפט או שניים שנזין למודל.
רגע לפני שנעבור לדוגמת שימוש חשוב לציין שהטרנספורמרים עם יכולתם לחקות ואף להתעלות על ביצועי אנוש מעוררים חששות רבים. הסופר נוח הררי מאמין שתוך כמה מאות שנים ירשו את מקום האנושות רובוטים מצוידים בבינה מלאכותית. גם השם של הטכנולוגיה מעניין כי טרנספורמרים הם "רובוטריקים" יצורים רובוטיים הנאבקים על השליטה בכדור הארץ במציאות פוסט אפוקליפטית. הפחד מהשתלטות הטכנולוגיה הוא קדום ביותר. בסוף המאה ה-18 כתב גיתה בגרמנית את הפואמה על "שוליית הקוסם" שמתעייף מביצוע מטלות הבאת המים מהבאר שהטיל עליו הקוסם ומכשף את המטאטא שיעשה במקומו את העבודה. רק שהמטאטא יוצא משליטה וגורם להצפה של סדנת הקסמים במים, השוליה לא מצליח להשתלט על הגולם שיצר, ובכל פעם שהשוליה ביאושו שובר את המטאטא הוא מגלה שבמקום מטאטא אחד קמים רבים אחרים שמכפילים את קצב ההצפה בדומה לחזון הסינגולריות* של עתידנים בני ימינו. מקורה של האגדה בעולם העתיק, ויתכן שהראשונים שהגו את הסיפור היו יוונים או מצרים. מעניין שכבר לפני אלפי שנים בני אדם חששו מטכנולוגיה. אבל אם יש משהו שניסיון אלפי שנות חיים לצד מכונות לימדו אותנו הוא כמה אנחנו נהנים מהטכנולוגיה. עובדים פחות, וחיים יותר.
* singularity - מצב בו בינה מלאכותית חכמה מהאדם יוצרת בינה אחרת חכמה ממנה שיוצרת בינה אחרת, וכיו"ב אל מעבר לאופק עתידי שלא ניתן לשער.
במדריך זה אדגים סיכום ויצירה של טקסט באמצעות ממשק transformers של HuggingFace תוך שימוש במודל BERT - טרנספורמר מאומן שיצרה גוגל.
נתקין את הספרייה transformers:
!pip install transformers
סיכום טקסט
הדרך הפשוטה ביותר לסכם טקסט היא לעבוד עם פונקצית pipeline שנעביר לה את הפרמטר "summarization".
from transformers import pipeline
summarizer = pipeline("summarization")
הפונקציה משתמשת בטרנספומר Bart שהוא פיתוח של Bert.
נעביר לפונקציה את 4 הפסקאות הראשונות של מאמר בויקיפדיה על "רפסודיה בוהמית" של להקת קווין:
text_list = ["Bohemian Rhapsody is a song by the British rock band Queen. It was written by Freddie Mercury for the band's 1975 album A Night at the Opera. The song is a six-minute suite, notable for its lack of a refraining chorus and consisting of several sections: an intro, a ballad segment, an operatic passage, a hard rock part and a reflective coda. Bohemian Rhapsody is one of the few songs to emerge from the 1970s progressive rock movement to achieve widespread commercial success and appeal to a mainstream audience."]
ARTICLE = ' '.join(text_list)
ונדפיס את תוצאה:
print(summarizer(ARTICLE, max_length=130, min_length=30))
Bohemian Rhapsody was written by Freddie Mercury for the band's 1975 album A Night at the Opera . The song is a six-minute suite, notable for its lack of a refraining chorus and consisting of several sections . It is one of the few songs to emerge from the 1970s progressive rock movement to achieve widespread commercial success and appeal to a mainstream audience.
אנחנו לא חייבים להשתמש ב-Bart. נשתמש במודל T5 הנחשב לטוב ביותר לסיכום טקסט.
את המודלים השונים שמציעה הספרייה ניתן למצוא בדף https://huggingface.co/models
כדי להשתמש במודל אחר נגדיר מודל וטוקנייזר:
from transformers import AutoModelWithLMHead, AutoTokenizer
model = AutoModelWithLMHead.from_pretrained("t5-base")
tokenizer = AutoTokenizer.from_pretrained("t5-base")
נעשה טוקניזציה:
inputs = tokenizer.encode("summarize: " + ARTICLE, return_tensors="tf", max_length=512)
- המודל מוגבל ל- 512 טוקנים לכל היותר.
- אנחנו מצפים לטוקנים בתצוגת טנסור של Tensorflow (ולא PyTorch).
נריץ את המודל:
outputs = model.generate(inputs, max_length=150, min_length=40, length_penalty=2.0, num_beams=4, early_stopping=True)
- הגדרנו את אורך הסיכום.
- יתר הפרמטרים מגבילים את אפשרויות החיפוש.
נמיר את תוצא המודל מטוקנים למילים:
summary = tokenizer.decode(outputs[0], skip_special_tokens=True)
נדפיס את התוצאה:
print(summary)
bohemian Rhapsody is a song by the British rock band queen. it was written by Freddie Mercury for the band's 1975 album a night at the opera. the song is considered one of the greatest rock songs of all time.
קצר ולעניין.
יצירת טקסט
ביצירת טקסט אנחנו מצפים מהמחשב להשלים את הטקסט שאנחנו מספקים לו. המודל הטוב בתחום הוא GPT-2 שבו משתמשת הספרייה עבור פונקצית ה-pipeline.
כל מה שצריך הוא 3 שורות של קוד, ולהעביר לפונקציה את הפרמטר "text-generation":
passage = "Bohemian Rhapsody is a song by the British rock band Queen. It was written by Freddie Mercury for the band's 1975 album A Night at the Opera. The song is a six-minute suite, notable for its lack of a refraining chorus and consisting of several sections: an intro, a ballad segment, an operatic passage, a hard rock part and a reflective coda. Bohemian Rhapsody is one of the few songs to emerge from the 1970s progressive rock movement to achieve widespread commercial success and appeal to a mainstream audience."
text_generator = pipeline("text-generation")
print(text_generator(passage, max_length=200))
התוצאה:
Pianist and composer Steve Stokoe is known for his pioneering work with piano players, particularly the piano virtuoso Michael Lonergan, who played the bass with pianist James Blake in 1972, and his solo work with electric piano player Tom Watson in 1979.
The work of C. W. White was published as a pamphlet in 1982. White's work on C. W. White
אפשר גם להשתמש במודל אחר או לשנות את הפרמטרים כדי לקבל תוצאות שונות.
ניצור מודל וטוקנייזר:
from transformers import TFAutoModelWithLMHead, AutoTokenizer
model = TFAutoModelWithLMHead.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
- אני משתמש ב-GPT-2 שמייצר כותרות בעיתונות העולם אבל אפשר לבחור מודל אחר שמתמחה ביצירת טקסטים דוגמת: XLNet.
נהפוך את הפסקה לטוקנים:
inputs = tokenizer.encode(passage, add_special_tokens=False, return_tensors="tf")
נריץ את המודל:
outputs = model.generate(inputs, max_length=250, do_sample=True, temperature=0.7, top_p=0.8, top_k=50)
הפרמטרים:
- do_sample - כדי לנסות למנוע מהמודל לחזור על עצמו.
- temperature - ערכים נמוכים מ-1 בשביל תוצאות שמרניות.
- הפרמטרים הנוספים מגבילים את מספר האפשרויות וסבירותם.
נמיר את הטוקנים שמייצר המודל למילים:
generated = tokenizer.decode(outputs[0])
והתוצאה:
print(generated)
The title song is the opening track from Queen's 1973 album The Road to Hell. The song is a five-minute suite with two parts that are a breakaway from the rest of the song. The song is sung by a young woman named Margaret, who is a member of the band and a member of Queen's 1977 album The Road to Hell. The song is written by the band's guitarist, Alan Bennett. The song is recorded by the band's producer, David J. Taylor. The song is the first and only song recorded for Queen in the band's lifetime.
The title track is the second and only song recorded for Queen in the band's lifetime
כותבת מחדש את ההיסטוריה של עולם המוזיקה.
אם אתה רוצה לסכם טקסטים ארוכים אז כדאי שתקרא את המדריך סיכום מאמר ויקיפדיה באמצעות המודל המתקדם בעולם T5 של גוגל.
גם זה יעניין אותך
מערכת שאלות-תשובות מבוססת בינה מלאכותית
לכל המדריכים בנושא של למידת מכונה
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.