שפות
ספאם מגיע בכל שפה, וכך גם דואר רגיל. Spam Scanner קורא את שניהם, ונוהג בזהירות עם שפות שהוא יודע עליהן מעט: מסנן ספאם שמסמן כל הודעה בערבית או בסינית גרוע מהיעדר מסנן.
קריאת כל כתב#
- מילים. הטקסט מפוצל בעזרת
Intl.Segmenter, שפועל לפי כללי גבולות המילים של Unicode ומשתמש במילונים לסינית, יפנית, תאית, לאו, חמרית ובורמזית, כתבים שנכתבים בלי רווחים. טקסטים ארוכים מפוצלים קודם לחלקים, כי המפצל ב-Node.js 18 מאט על מחרוזות ארוכות מאוד. - נרמול. Unicode NFKC הופך אותיות ברוחב מלא ואת רוב האותיות המעוצבות (𝐅𝐑𝐄𝐄, Ⓕⓡⓔⓔ) לאותיות רגילות. הטקסט מומר לאותיות קטנות לפי כללי Unicode.
- הסוואות. תווים בלתי נראים בתוך מילים (
freeעם רווח ברוחב אפס בין שתי אותיות, מקפים רכים) מוסרים ונספרים. מילים שמערבבות אלפביתים, כמוpаypalעם а קירילית, ממופות חזרה לאלפבית אחד ונספרות. ספרות שמשמשות כאותיות (v1agra) מומרות. כל הסוואה היא מאפיין בפני עצמו, ושלושה תווים בלתי נראים או יותר, או שתי מילים מעורבות או יותר, גם מוסיפים נקודות.
זיהוי השפה#
השפה של כל הודעה מזוהה לפי הכתב שלה, ובכתבים שמשותפים לשפות רבות, לפי האותיות שלה:
- הנגול היא קוריאנית; היראגנה וקטקנה פירושן יפנית; תאית, יוונית, עברית, ארמנית, גאורגית, בנגלית, טמילית וכתבים אחרים שמשמשים שפה אחת מציינים אותה ישירות.
- אותיות קיריליות שנמצאות רק בשפה אחת מכריעות בין אוקראינית (і, ї, є, ґ), בלארוסית (ў), סרבית (ђ, ћ, џ), מקדונית (ѓ, ќ, ѕ) ורוסית (ы, э, ё).
- טקסט בכתבים שמשותפים לכמה שפות (לטיני, קירילי, ערבי, דוונאגרי ואחרים), כשהוא ארוך מספיק כדי לשפוט, עובר ל-franc, שמוגבל לשפות נפוצות בדואר אלקטרוני כדי שהודעות קצרות לא יסומנו בשפות נדירות.
השפה מדווחת כ-result.language, ו-allowedLanguages: ['en', 'de'] (--allow-language en,de) מוסיף 3 נקודות לדואר שזוהה בביטחון בכל שפה אחרת.
שפות שהמודל יודע עליהן מעט#
מסווג לומד מדוגמאות. מאגרי ספאם ציבוריים מכילים הרבה יותר ספאם בשפות זרות מאשר hamדואר רצוי: ההפך מספאם. בשפות זרות, ולכן מסווג תמים לומד שטקסט בסינית או בערבית כשלעצמו פירושו ספאם. Spam Scanner מתקן זאת בשלוש דרכים:
- השפה אף פעם אינה ראיה. השפה והכתב שזוהו לא משמשים כסימנים.
- מילים נשקלות בתוך השפה שלהן. הסתברות הספאם של מילה מחושבת מול מספר הודעות הספאם וה-ham שהמסווג ראה בשפה של ההודעה, לא בכל השפות. מילה יומיומית בפורטוגזית, במודל שראה בעיקר ספאם בפורטוגזית, נשארת ניטרלית.
- הביטחון עוקב אחרי הכיסוי. התוצאה נמשכת לכיוון „לא בטוח” ביחס למספר ההודעות מכל סוג שהמסווג ראה באותה שפה: ביטחון מלא דורש 1,000 מכל סוג (או 2% מהסוג הקטן יותר, במודלים אישיים קטנים). שפה שאין לה ham בנתוני האימון תמיד מקבלת „לא בטוח”.
המודל המצורף מעולם לא ראה את SMS Spam Multilingual Collection, הודעות SMS שתורגמו בתרגום מכונה ל-21 שפות. לפני הכללים האלה, הוא סימן 5.7% מה-ham הזה כספאם, כולל 55% מהפורטוגזית ו-41% מהצרפתית. איתם, 0.18%: אף לא אחת בסינית, ערבית, קוריאנית, יפנית, הינדי, פורטוגזית, צרפתית או ב-20 שפות אחרות, ו-0.27% באנגלית.
תפיסת ספאם בשפות האלה#
„לא בטוח” הוא בטוח, אבל הוא לא תופס ספאם. שלושה דברים כן תופסים:
- שאר הבדיקות לא תלויות בשפה: דומיינים מתחזים, קישורים מטעים, קבצי הרצה, פקודות מאקרו, אימות, רשימות שחורות, הכללים.
- מודל שפה. מודלים פתוחים מודרניים קוראים 100 עד 200 שפות, ו-Spam Scanner שואל אחד מהם בכל פעם שהמסווג לא בטוח. בדיקות הקצה-לקצה בודקות ש-
qwen3.5:4bתופס ספאם ומעביר ham בסינית, ערבית, קוריאנית, הינדי ותאית. מודלי שפה - אימון על הדואר שלכם. במודל שאומן על הדואר שלכם, כמה מאות הודעות מכל סוג בשפה מסוימת נותנות למסווג ביטחון מלא בה. אימון, ומאגר נתונים אופציונלי שמוסיף 21 שפות.