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

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

האתגר ההנדסי לא היה טריוויאלי, since נדרשנו לתכנן pipeline שלוקח כתבות, פוסטים, ציוצים, תגובות ואזכורים רוחביים, מנתח אותם בעזרת עיבוד שפה טבעית (NLP), ומפיק תובנות בזמן אמת. במאמר זה אפרט את הארכיטקטורה שבנינו, הכלים בהם השתמשנו, והלקחים שהפקנו. כל קוד המקור זמין ב־GitHub ואף פרסמנו ספרייה פנימית בשם cultrank-py,, and while

מסך קוד ונתונים במערכת ניטור תרבותית

מיהו בני ציפר ולמה הוא משמש מקרה בוחן אידיאלי?

בני ציפר אינו רק שם מוכר בשיח התרבותי הישראלי, אלא גם צומת מידע עם מאפיינים ייחודיים לאימון מודלים של מעורבות תוכן,, and while הוא כותב במגוון פלטפורמות - מדור ספרות בעיתון "הארץ", עמוד פייסבוק פעיל, חשבון טוויטר וראיונות מצולמים. הפיזור הזה מאפשר לבחון cross‑platform propagation - כיצד אותו מסר עובר בין מדיומים ומשנה עוצמה.

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

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

ארכיטקטורת ה־Pipeline: מאיפה מתחילים,, while

המערכת, שזכתה לשם הקוד PunditTracker, בנויה על גבי תשתית Kubernetes ב־AWS עם אחסון אובייקטים ב־S3? אימצנו ארכיטקטורה מונחית אירועים: כל רכיב מתקשר דרך Kafka, מה שמאפשר הרצה אסינכרונית של מודולים שונים - איסוף, טיוב, אנליזה, ויזואליזציה.

תרשים ארכיטקטורת מיקרו-שירותים לניתוח תוכן

בשכבת ה־Ingestion השתמשנו ב־Apache NiFi לניהול זרימות מול API-ים של טוויטר (v2), Facebook Graph, ו־Web Scraper מותאם אישית שמבוסס על Playwright? כל פיסת תוכן נשמרת כ־Raw JSON ב־S3, ולאחר מכן עוברת נרמול ל־Schema אחיד: `author_id`, `platform`, `timestamp`, `content`, `engagement_metrics`.

כדי לטפל בטקסטים בעברית, הטמענו שלב Pre‑processing ייעודי. ספריית spaCy אינה תומכת בעברית מחוץ לקופסה, לכן הרכבנו מודל מותאם על בסיס HeBERT - גרסה עברית של BERT. הוספנו ניתוב דינמי: אם ה־confidence של HeBERT נמוך, הטקסט מועבר לגיבוי של Stanza (Stanford NLP) עם מודל עברי. התוצאה: דיוק tokenization של 97,? And 2% על מדגם של 10,000 פוסטים

ניתוח סנטימנט ומדד השפעה: איך הופכים מילים למספרים,? While

בשונה מפלטפורמות מסחריות שמציעות "engagement score" גנרי, רצינו מדד ייחודי שמשקלל לא רק לייקים ושיתופים, אלא גם את עומק השיח - האם התגובות הן דיון מעמיק או תגובות סרק? הגדרנו את מדד ה־CIS (Cultural Influence Score) על בסיס שלושה וקטורים:

  • Reach: כמות החשיפות המשוערכת לפי גודל הקהל בחשבונות המגיבים.
  • Resonance: יחס בין תגובות ארוכות (מעל 50 מילה) לסך התגובות.
  • Sentiment Alignment: מידת הקיטוב - עד כמה הקהל מגיב בצורה אחידה (חיובית/שלילית) או מפולג.

לצורך חישוב הסנטימנט השתמשנו ב־HeBERT fine‑tuned for sentiment שפורסם ב־Hugging Face. אימנו אותו מחדש על 15,000 דגימות מתחום התרבות, כשבכל דגימה מתויגת קטגוריה: הערכה, ביקורת, ניטרלי. לקחנו בחשבון את תופעת ה"ציניות הישראלית" - ביטויים כמו "יופי, חכה חכה" דורשים קונטקסט רחב; לכן שילבנו classifier דו-שלבי: ראשית, זיהוי אירוניה באמצעות מודל Zero‑Shot מבוסס mT5, ורק אחר כך ניתוח סנטימנט.

בפרופיל של בני ציפר, גילינו שציון הסנטימנט הכללי שלילי ב־62% מהפוסטים, אך דווקא פוסטים שליליים קיבלו Resonance גבוה פי 1. 8 מפוסטים חיוביים,, while since כלומר, קהל העוקבים נוטה לפתח דיון ארוך יותר דווקא בתגובה לביקורת, מה שמאתגר את ההנחה שפוסטים חיוביים "מצליחים" יותר.

Graph-Based Entity Linking: מיפוי רשת ההשפעה האמיתית

הבנו מהר מאוד שציון השפעה בדיד לכל פוסט אינו מספיק. המערכת צריכה לחשוף את הקשרים הסמויים בין כותבים, נושאים ומגיבים. לצורך זה, הטמענו מסד נתונים גרפי - Neo4j - ותכננו סכמה הכוללת צמתים מסוג `Person`, `Article`, `Topic`, `Platform` וקשתות כמו `MENTIONS`, `RESPONDS_TO`, `SHARES`.

גרף קשרים בין יישויות תרבותיות במסד Neo4j

תהליך ה־Entity Recognition בוצע עם spaCy + HeBERT, והתיוגות (Named Entities) הועברו ל־entity resolution מול ויקינתונים ומסד פנימי של דמויות תרבות ישראליות. לדוגמה, כל איזכור של "עגנון" מקושר אוטומטית לישות `Q12345` (ש"י עגנון), ומשם נגזר הקשר עם בני ציפר דרך קשת `HAS_WRITTEN_ABOUT`.

הגרף איפשר לנו לבצע שאילתות כמו: "מהם חמשת האנשים שציפר מזכיר הכי הרבה במאמרים על ספרות? " או "אילו חשבונות טוויטר מגיבים גם לציפר וגם למבקרי ספרות אחרים? ",, but since תובנה מעניינת: מתוך 100 המגיבים הפעילים ביותר לטוריו של ציפר, 34% היו גם פעילים בחשבונות של הוצאות ספרים גדולות, מה שמעיד על קהל מקצועי מגובש.

עיבוד Near Real-Time: Stream Processing עם Kafka Streams

מכיוון שדרישת הלקוח כללה התראות על "אירועי שיא" - למשל פוסט ויראלי במיוחד - לא יכולנו להסתפק בעיבוד באצ׳ים לילי. בנינו Topology ב־Kafka Streams שכוללת:

  • Filtering: רק פוסטים עם engagement ראשוני מעל סף מסוים נכנסים לניתוח מעמיק.
  • Enrichment: שליפת מטא-דאטה (מיקום, מגדר, שפה) מה־API של הפלטפורמה.
  • Aggregation: חישוב חלונות של 15 דקות, שעה ויום לזיהוי מגמות חריגות.

השתמשנו ב־RocksDB כמאגר מצב מקומי, ומעקב אחר ביצועים דרך Confluent Metrics Reporter. תוצאות ה־Aggregation נדחפות לאינדקס Elasticsearch לצורך חיפוש ויזואליזציה, but כך, כאשר גילינו שפוסט של ציפר בנושא "ספרות ושואה" חצה 1,000 שיתופים תוך 7 דקות, הופעלה התראה אוטומטית בצוותי מערכת.

הארכיטקטורה הזו, שלכאורה נראית כבדה, רצה על אשכול של 3 ברוקרים ומטפלת ב־2. 5 מיליון אירועים ביום

.

Need a Custom App Built?

Let's discuss your project and bring your ideas to life.

Contact Me Today →

Back to Online Trends