File size: 12,624 Bytes
490b24e
 
 
294fe7f
490b24e
f3ba46f
490b24e
75c12c2
294fe7f
c9de96d
 
9bd9937
294fe7f
490b24e
 
 
 
02e51db
 
4f3fc9b
490b24e
 
 
 
 
 
 
 
4f3fc9b
17055ea
 
91f4685
 
7220aeb
490b24e
 
17055ea
 
a79dcc6
490b24e
 
 
 
4d5f82a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a79dcc6
4d5f82a
 
 
 
65f4f04
490b24e
 
 
 
 
 
 
 
75c12c2
 
 
 
 
490b24e
4f3fc9b
490b24e
 
a524bac
00e11a3
a524bac
 
00e11a3
 
 
 
 
 
a524bac
00e11a3
 
a524bac
00e11a3
a524bac
00e11a3
 
a524bac
00e11a3
a524bac
 
 
00e11a3
 
a524bac
490b24e
 
 
 
 
 
 
 
 
 
 
 
 
a524bac
490b24e
 
a524bac
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Model
NOT production-ready. 
Based on DictaLM2.0; fine-tuned for text summarization.

Known Issues:
- The model is bloated (disk size - consider using maayanorner/hebrew-summarization-llm-4bit for low resource envs).
- While the results look pretty good, the model was not evaluated.
- Short inputs (i.e., "articles" of one line) will yield a contextless "summary".

4-bit quantized version:
https://huggingface.co/maayanorner/hebrew-summarization-llm-4bit
Install bitsandbytes to use the quantized version.

# Data:
https://github.com/IAHLT/summarization_he


# Example of usage:
**To use 4-bit version, set model_path to maayanorner/hebrew-summarization-llm-4bit**
```# install bitsandbytes>=0.41.3 to quantize
import torch
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig
)


def summarize(text, tokenizer, model, num_beams=4, temperature=1, max_new_tokens=512):
    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token
    if len(text) < 20:
        raise ValueError('Text must be at least 20 characters long.')
    # This text template is important.
    inputs = tokenizer(f'{text}\n### סיכום:', return_tensors="pt")
    in_data = inputs.input_ids.to('cuda')
    attention_mask = inputs.attention_mask.to('cuda')
    output_ids = model.generate(input_ids=in_data, attention_mask=attention_mask, num_beams=num_beams, max_new_tokens=max_new_tokens, do_sample=True, early_stopping=True, use_cache=True, temperature=temperature, pad_token_id=tokenizer.eos_token_id, eos_token_id=tokenizer.eos_token_id)
    generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
    
    return generated_text


def summarize_batch(texts, tokenizer, model, num_beams=4, temperature=1, max_new_tokens=512):
    for text in texts:
        if len(text) < 20:
            raise ValueError('Each text must be at least 20 characters long.')
    
    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token

    inputs = tokenizer([f'{text}\n### סיכום:' for text in texts], return_tensors="pt", padding=True)
    
    in_data = inputs.input_ids.to('cuda')
    attention_mask = inputs.attention_mask.to('cuda')

    output_ids = model.generate(
        input_ids=in_data,
        attention_mask=attention_mask,
        num_beams=num_beams,
        max_new_tokens=max_new_tokens,
        do_sample=True,
        early_stopping=True,
        use_cache=True,
        temperature=temperature,
        pad_token_id=tokenizer.eos_token_id,
        eos_token_id=tokenizer.eos_token_id
    )

    generated_texts = [tokenizer.decode(output, skip_special_tokens=True) for output in output_ids]
    
    return generated_texts


model_path = 'maayanorner/hebrew-summarization-llm' # or maayanorner/hebrew-summarization-llm-4bit

model = AutoModelForCausalLM.from_pretrained(
    model_path,
    trust_remote_code=True,
)
model.to('cuda')
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

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

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

summarize(text, max_new_tokens=512, tokenizer=tokenizer, model=model)
```

# Examples:
## Article
<div dir="rtl">

נבחרת ישראל תמשיך את המסע שלה בבית מספר 2 המאתגר בדרג A, כשתפגוש מחר (חמישי) את נבחרת צרפת במסגרת המחזור החמישי. אחרי ארבעה הפסדים מארבעה משחקים, השחקנים בכחול-לבן רוצים לחולל הפתעה בסטאד דה פראנס.ההרכב שתרגל רן בן שמעון לקראת המשחק: דניאל פרץ, שגיב יחזקאל, עידן נחמיאס, רז שלמה, שון גולדברג, ליאל עבדה, מוחמד אבו פאני, מחמוד ג’אבר, אוסקר גלוך, מנור סולומון ודור תורג’מן.רן בן שמעון, מאמן נבחרת ישראל, דיבר הערב במסיבת העיתונאים לקראת ההתמודדות: “הדרך שלי להתכונן לכל משחק היא כפי שאני חושב שצריך להתכונן אליו. ברמות האלה אנחנו מנסים לשלב בין השיטות, קו 5 וקו 4. כרגע בליגת האומות התוצאות מבחינתנו אולי בדקות האחרונות היו קשות אבל לאורך המשחקים, עד דקה 70-75, נגד צרפת אפילו עד דקה 86, היינו במשחק”.

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

קפטן הנבחרת, אלי דסה, הוסיף: "ברור שזו לא סיטואציה קלה עבורנו. אנחנו מתמודדים עם הרבה עניינים במדינה ומחוצה לה. המשחק מחר הוא הזדמנות עבורנו לייצג את המדינה הכי טוב שאפשר. אנחנו פוגשים את אחת הנבחרות הטובות בעולם, זה ניסיון טוב עבורנו. אנחנו מצפים לייצג את המדינה שלנו ולעשות משחק טוב, למרות שהתזמון לא מושלם”.
"חזרתי מפציעה לאחרונה ואני מרגיש בסדר גמור. אני שמח לחזור לנבחרת, למערכת הטובה שהתחלנו ליצור. אני מקווה שנצליח מחר, יש לנו יריבה חזקה מאוד קשה. לפרקים גדולים במשחקים האחרונים הראנו שאנחנו מסוגלים להתמודד ברמה הזו, ועם שיפורים קטנים נוכל לעשות דברים גדולים". “כמובן שזה חיסרון גדול עבורנו שאנחנו לא משחקים בישראל, אבל אנחנו מודים לאלו שאמיצים מספיק כדי להגיע ולראות אותנו. יש לי הרבה חברים מפאריס שרוצים לבוא למשחק אבל לא יכולים או מפחדים קצת. אבל גם המעט שמגיעים, עבורנו זה נחמד לראות שיש בנו תמיכה.
</div>

### Summary 1:
<div dir="rtl">
סיכום: נבחרת ישראל תפגוש את נבחרת צרפת בסטאד דה פראנס במחזור החמישי של הדרג A במסגרת ליגת האומות. המאמן, רן בן שמעון, דיבר במסיבת העיתונאים על הקושי לשחק מחוץ לישראל והציפייה למשחק מול נבחרת צרפת. קפטן הנבחרת, אלי דסה, דיבר גם הוא על הקושי לשחק מחוץ לישראל ועל החיסרון של קיליאן אמבפה. נבחרת ישראל תנסה להפתיע את נבחרת צרפת בסטאד דה פראנס.
</div>

### Summary 2:
<div dir="rtl">
סיכום: נבחרת ישראל תתמודד מחר (חמישי) מול נבחרת צרפת בסטאד דה פראנס במסגרת המחזור החמישי של ליגת האומות, אחרי ארבעה הפסדים מארבעה משחקים. רן בן שמעון, מאמן הנבחרת, דיבר הערב במסיבת עיתונאים לקראת המשחק. בן שמעון אופטימי לגבי סיכויי הנבחרת, למרות הקשיים: "אנחנו מנסים להכין את הנבחרת בצורה הטובה ביותר, למרות המצב הבטחוני והקשיים האחרים. אנחנו מתמודדים מול נבחרת חזקה מאוד, אבל מאמינים שנוכל לתת להם פייט טוב". אלי דסה, קפטן הנבחרת, הוסיף: "ברור שזו לא סיטואציה קלה עבורנו. אנחנו מתמודדים עם הרבה עניינים במדינה ומחוצה לה. המשחק מחר הוא הזדמנות עבורנו לייצג את המדינה הכי טוב שאפשר. אנחנו מצפים לייצג את המדינה שלנו ולעשות משחק טוב".
</div>

______________

## Random Linkedin Post (out-of-distribution):
<div dir="rtl">

אחרי שלוש שנים מאתגרות ומרגשות, אני גאה לשתף שסיימתי תואר ראשון במדעי המחשב! 🎓

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

במהלך הלימודים והפרויקטים השונים שביצעתי צברתי ידע וניסיון בכלים וטכנולוגיות מגוונים:
• שפות תכנות: C, C++, C#, Python, JavaScript, TypeScript
• כלים וסביבות עבודה: Docker, Jenkins, SQL, Gatling, Selenium
• תכנות מערכות משובצות (Embedded): Arduino, Raspberry Pi

כעת אני מחפש את ההזדמנות שלי להשתלב בתעשייה, עם עדיפות לתפקידי פיתוח Full-Stack/Back-End אך פתוח גם להצעות נוספות!

אני מגיע עם תשוקה לטכנולוגיה, מוטיבציה גבוהה וחשיבה יצירתית. אז אם אתם מכירים חברה שמחפשת מפתח צעיר ונלהב, אשמח לשלוח קורות חיים. ואם לא - גם לייק או שיתוף יעזרו לי מאוד! 😊
</div>

### Summary:
<div dir="rtl">
הפוסט מתאר את סיום לימודיו של הכותב לתואר ראשון במדעי המחשב במכללה האקדמית תל אביב-יפו. במהלך הלימודים צבר הכותב ידע וניסיון בכלים וטכנולוגיות מגוונות, כגון שפות תכנות, כלים וסביבות עבודה, ותכנות מערכות משובצות. כעת הוא מחפש עבודה בתחום הפיתוח.
</div>