הטמעת זיהוי רעילות באמצעות AI באפליקציות מובייל
נתקלנו בפרויקטים שבהם דברי שטנה נותרו בלתי מזוהים בשל ניואנסים תרבותיים לשוניים. ספאם קל לתפוס באמצעות תבניות, אבל תוכן רעיל הוא ייחודי—נכתב על ידי אדם אמיתי ולעיתים קרובות נכון דקדוקית. הזיהוי מסתבך בשל החלפת אותיות (ליטספיק) ועלבונות סמויים. בנינו פתרון סוהר שמתמודד עם אתגר זה.
מדוע מודלים סטנדרטיים לזיהוי רעילות נכשלים באפליקציות בשפה הרוסית
מודלים כלליים לזיהוי רעילות כמו unitary/toxic-bert עובדים היטב על מערכי נתונים באנגלית מ-Reddit. באפליקציה בשפה הרוסית, הם מייצרים תוצאות חיוביות שגויות על מילים ספציפיות תרבותית ומפספסים ניבולי פה מוסווים עם החלפת אותיות—טקטיקה נפוצה לעקיפת סינון בקרב קהל ה-CIS. אותה בעיה חלה על טקסט באוקראינית ובלארוסית. מלכודת נוספת היא הסקת מודל סינכרונית בעת שליחת הודעה. המשתמש לוחץ על "שלח" וממתין 800 אלפיות שנייה—חוויית המשתמש נשברת. הזיהוי חייב להיות או עיבוד אסינכרוני או מהיר מספיק כדי שלא יורגש.
ארכיטקטורה רב-שכבתית לזיהוי רעילות: במכשיר + שרת
אנו משתמשים בשתי רמות סיווג. הראשונה היא במכשיר ומהירה: regex + מילון עם 2,000 תבניות רעילות ברורות, כולל גרסאות ליטספיק. היא מעבדת תוך <5 אלפיות שנייה, אינה דורשת רשת, ותופסת 60–65% מההודעות הרעילות עם מינימום תוצאות חיוביות שגויות. השנייה היא ML בצד השרת: מודל מכוונן על מערך נתונים בשפה הרוסית (RuToxic או דומה מ-Hugging Face). הוא נקרא באופן אסינכרוני לאחר הצגת ההודעה—אם הוא מופעל, ההודעה מוסתרת ומוחלפת במקום שמור. המסנן במכשיר מהיר פי 100 מהשרת (5 אלפיות שנייה לעומת 200 אלפיות שנייה) ומטפל בעד 65% מההודעות הרעילות ללא עומס רשת.
// Android: оптимистичная отправка + async toxicity check
fun sendMessage(text: String) {
val tempMessage = Message(text = text, status = MessageStatus.PENDING_REVIEW)
chatAdapter.addMessage(tempMessage) // показываем сразу
viewModelScope.launch {
val result = toxicityRepository.classify(text)
if (result.isToxic && result.confidence > 0.78f) {
chatAdapter.updateMessageStatus(tempMessage.id, MessageStatus.HIDDEN)
showToxicityNotice()
} else {
chatAdapter.updateMessageStatus(tempMessage.id, MessageStatus.VISIBLE)
}
}
messageApi.send(tempMessage)
}ממשק משתמש אופטימי זה + בדיקה לאחר פרסום מבטלים את זמן ההשהיה. המשתמש רואה את ההודעה באופן מיידי בזמן שהבדיקה מתבצעת במקביל.
תמיכה רב-לשונית באמצעות // Android: оптимистичная отправка + async toxicity check fun sendMessage(text: String) { val tempMessage = Message(text = text, status = MessageStatus.PENDING_REVIEW) chatAdapter.addMessage(tempMessage) // показываем сразу viewModelScope.launch { val result = toxicityRepository.classify(text) if (result.isToxic && result.confidence > 0.78f) { chatAdapter.updateMessageStatus(tempMessage.id, MessageStatus.HIDDEN) showToxicityNotice() } else { chatAdapter.updateMessageStatus(tempMessage.id, MessageStatus.VISIBLE) } } messageApi.send(tempMessage) }
עבור אפליקציות עם קהלים במספר מדינות, אנו משתמשים ב-xlm-roberta-base מכוונן על מערך נתונים מעורב. המודל בפורמט ONNX נפרס מאחורי נקודת קצה של FastAPI. חשוב: הסקה חייבת להיות באצוות תחת תעבורה גבוהה—xlm-roberta-base תומך באצוות דינמיות, ומספק תפוקה גבוהה פי ~4 בהשוואה לעיבוד רציף.
iOS: Core ML לסינון מקדים
ב-iOS, הסינון המקדים מיושם בנוחות באמצעות Core ML עם מסווג טקסט שהומר באמצעות onnxruntime:
let request = NLModel(mlModel: toxicityModel.model)
let prediction = request.predictedLabel(for: text) ?? "safe"
let confidence = request.predictedLabelHypotheses(for: text, maximumCount: 2)
if prediction == "toxic", let score = confidence["toxic"], score > 0.9 {
return .block
}coremltools עם NLModel מותאם אישית הוא הנתיב הנקי ביותר ל-iOS, ללא תלות בספריות צד שלישי בבנייה.
כיצד לכוונן מודל זיהוי רעילות עבור מערך הנתונים שלך
ראשית, אנו אוספים דיווחי משתמשים היסטוריים ומבצעים להם אנוטציה באמצעות Label Studio או Toloka—עד 10,000 דוגמאות. לאחר מכן אנו מכווננים מודל בסיס (למשל, let request = NLModel(mlModel: toxicityModel.model) let prediction = request.predictedLabel(for: text) ?? "safe" let confidence = request.predictedLabelHypotheses(for: text, maximumCount: 2) if prediction == "toxic", let score = confidence["toxic"], score > 0.9 { return .block } ) על נתונים ספציפיים לתחום. בשלב הבא, פורסים את API ההסקה ומשלבים אותו בלקוחות הניידים. השלב האחרון הוא כוונון ספים על בסיס איזון דיוק/רגישות כדי להתאים לדרישות המוצר. הניטור כולל את חלק ההודעות שנחסמו אוטומטית ושיעור התוצאות החיוביות השגויות מתלונות משתמשים.
הנה השוואה בין שתי הרמות:
| רמה | טכנולוגיה | זמן השהיה | תפוקה |
|---|---|---|---|
| במכשיר | RegExp + מילון | <5 אלפיות שנייה | בלתי מוגבלת (מקומית) |
| שרת | XLM-RoBERTa ONNX | 100-200 אלפיות שנייה | ~פי 4 עם אצוות |
כיצד להגדיר ספי הפעלה: מדריך שלב אחר שלב
- אסוף מערך נתונים עם אנוטציה של 1,000–2,000 הודעות המסווגות לפי קטגוריות רעילות.
- בנה עקומת ROC עבור כל קטגוריה על קבוצת בדיקה מופרדת.
- בחר סף חסימה אוטומטית וסף לבדיקה אנושית על בסיס שיעור התוצאות החיוביות השגויות הרצוי (בדרך כלל 1–5%).
- הגדר את הספים בתצורת המערכת והתחל בניטור.
תיעוד Apple Core ML: "מודלי Core ML יכולים להתעדכן במכשיר ללא שליחת נתונים לשרת, תוך שמירה על פרטיות המשתמש והפחתת זמן השהיה."
מה כוללת העבודה לזיהוי רעילות באמצעות AI (תוצרים)
- איסוף מערך נתונים ואנוטציה (עד 10,000 דוגמאות)
- כוונון מודל (מבוסס BERT או XLM-RoBERTa)
- פריסת API הסקה (FastAPI + ONNX)
- שילוב iOS (Core ML) ואנדרואיד (ML Kit או מותאם אישית)
- כוונון ספים וניטור
- תיעוד תפעולי
- גישה למודל ול-API
- הכשרה לצוות שלך ותמיכה שוטפת
הערכות זמנים
שילוב בסיסי של מודל רב-לשוני מוכן: 4–6 ימים. כוונון על מערך הנתונים שלך ופריסה: 2–3 שבועות נוספים. מערכת מלאה עם קטגוריזציה, תור בדיקה אנושית ולולאת משוב: 4–6 שבועות.
הניסיון והיתרונות שלנו
עם למעלה מ-5 שנים בשוק אפליקציות המובייל ורקורד מוכח, יישמנו זיהוי רעילות לשלושה פרויקטים עם קהלים של למעלה ממיליון משתמשים כל אחד. המודלים המוסמכים שלנו והביצועים המובטחים מבטיחים חיסכון במודרציה ידנית של 60–80%, והפתרון מחזיר את עצמו תוך 2–3 חודשים. פרויקט פיילוט מתחיל ב-$2,500. לקוחות מדווחים על חיסכון ממוצע של $10,000 בחודש לאחר הפריסה.
מדדי החברה: 5+ שנות ניסיון, 3+ יישומים מוצלחים, כל אחד מטפל במיליון+ משתמשים.
קבלו הערכה של הפרויקט שלכם—צרו קשר לייעוץ. הזמינו פרויקט פיילוט כדי לבדוק את הפתרון על הנתונים שלכם עם אחריות להחזר כספי ל-30 יום.







