תיוג תוכן אוטומטי מבוסס בינה מלאכותית באפליקציות מובייל
תרחיש טיפוסי: משתמש מעלה תמונה לאפליקציה, אך כדי להוסיף תגית, עליו לבחור ידנית מתוך מאות אפשרויות או להקליד טקסט. ההקשר והזמן אובדים. אנו מיישמים תיוג אוטומטי מבוסס AI — תמונות, טקסט ווידאו מקבלים תוויות ללא התערבות אנושית. רקורד העבודה שלנו: למעלה מ-20 פרויקטים, משווקים ועד רשתות חברתיות, עם טקסונומיות מותאמות אישית. הפתרון מתאים לכל תחום: רפואה, נדל"ן, קמעונאות, חינוך. מודלים על-גבי המכשיר משיגים דיוק של 92%, מודלים בשרת 98% עם ניקוד סף מכוון כראוי. אנו מבטיחים כוונון סף דיוק של 98% ובעלי ניסיון של למעלה מ-10 שנים בפיתוח AI ומובייל.
לדוגמה, חנות בגדים מקוונת: אימנו מודל לזיהוי 150 קטגוריות בדיוק של 91%. כעת כל פריט שמועלה מקבל אוטומטית תגיות כמו "שמלה", "כותנה", "קיץ". זה קיצר את זמן המודרציה פי 4 וחסך כ-$4.5k–6.5k בשנה בתיוג ידני. הלקוחות שלנו חוסכים בדרך כלל $10,000–$50,000 בשנה בהתאם לנפח התוכן.
תיעוד Apple Core ML ממליץ על למידת העברה ליצירת מודלים קומפקטיים עם 20+ דוגמאות לכל קטגוריה.
כיצד AI מתייג תמונות ב-iOS ואנדרואיד
המחסנית הסטנדרטית היא VNClassifyImageRequest (iOS) + ImageLabeler (אנדרואיד). הם מחזירים תוויות כלליות כמו "אוכל", "שמיים", "חתול". לצרכים עסקיים, יש צורך בטקסונומיה מותאמת אישית: לא "ביגוד", אלא "ז'קט עור", "שמלת פרחים". אנו מאמנים מודל מותאם אישית באמצעות CreateML (iOS) או TensorFlow Lite (אנדרואיד). להלן דוגמה לאימון מודל מותאם אישית תחת iOS.
// Обучение через CreateML (запускать на Mac, не на устройстве)
import CreateML
let trainingData = MLImageClassifier.DataSource.labeledDirectories(
at: URL(fileURLWithPath: "/training_data")
// Структура: /training_data/jacket/, /training_data/shoes/, /training_data/bag/
)
var params = MLImageClassifier.ModelParameters()
params.maxIterations = 25
params.validationData = .split(strategy: .automatic)
params.featureExtractor = .scenePrint(revision: 2) // Transfer learning от Apple
let model = try MLImageClassifier(trainingData: trainingData, parameters: params)
try model.write(to: URL(fileURLWithPath: "/model.mlmodel"), metadata: nil)20–50 דוגמאות לכל קטגוריה, 15–30 דקות של אימון על MacBook Pro M2 — מקבלים מודל קומפקטי. Core ML Model Deployment מאפשר עדכון שלו ללא פרסום גרסה חדשה ב-App Store.
מדוע תגיות היררכיות מאיצות חיפוש
רשימה שטוחה של תגיות היא כאוס. היררכיה כמו "אוכל → מטבח איטלקי → פסטה" נותנת חיפוש וסינון מובנים. אנו מיישמים זאת באמצעות עצים:
// Android: TagTree data class Tag(
val id: String,
val name: String,
val parentId: String?,
val synonyms: List<String> = emptyList()
)
// При тегировании: если назначен тег "Паста" — автоматически добавляем родительские
fun expandWithParents(tagId: String, tagTree: Map<String, Tag>): Set<String> {
val result = mutableSetOf(tagId)
var current = tagTree[tagId]
while (current?.parentId != null) {
current = tagTree[current.parentId]
current?.let { result.add(it.id) }
}
return result
}לאחסון אנו משתמשים בטבלה נפרדת עם שדה // Обучение через CreateML (запускать на Mac, не на устройстве) import CreateML let trainingData = MLImageClassifier.DataSource.labeledDirectories( at: URL(fileURLWithPath: "/training_data") // Структура: /training_data/jacket/, /training_data/shoes/, /training_data/bag/ ) var params = MLImageClassifier.ModelParameters() params.maxIterations = 25 params.validationData = .split(strategy: .automatic) params.featureExtractor = .scenePrint(revision: 2) // Transfer learning от Apple let model = try MLImageClassifier(trainingData: trainingData, parameters: params) try model.write(to: URL(fileURLWithPath: "/model.mlmodel"), metadata: nil) (// Android: TagTree data class Tag( val id: String, val name: String, val parentId: String?, val synonyms: List<String> = emptyList() ) // При тегировании: если назначен тег "Паста" — автоматически добавляем родительские fun expandWithParents(tagId: String, tagTree: Map<String, Tag>): Set<String> { val result = mutableSetOf(tagId) var current = tagTree[tagId] while (current?.parentId != null) { current = tagTree[current.parentId] current?.let { result.add(it.id) } } return result } , auto, user). תגיות אוטומטיות נראות רק בחיפוש, תגיות משתמש בממשק המשתמש.
השוואה בין תיוג על-גבי המכשיר לעומת תיוג בשרת
| מאפיין | על-גבי המכשיר (CreateML / TensorFlow Lite) | בצד השרת (OpenAI / Claude) |
|---|---|---|
| זמן השהיה | מיידי (5–50 אלפיות השנייה) | 0.5–2 שניות |
| מצב לא מקוון | כן | לא |
| פרטיות | הנתונים לעולם לא עוזבים את המכשיר | הנתונים נשלחים לשרת |
| דיוק | 85–92% על טקסונומיה מצומצמת | 95–98% על בקשות מורכבות |
| עלות | חינם (משאבי מחשוב של המכשיר) | תשלום לכל בקשת API |
אנו משלבים את שניהם: תגיות בסיסיות נקבעות על המכשיר, למקרים מורכבים אנו שולחים בקשה לשרת. תיוג על-גבי המכשיר מהיר פי 3–10 מהשרת עם דיוק דומה לקטגוריות טיפוסיות.
כיצד פועל ניקוד הסף?
כל מודל מחזיר הסתברות לכל קטגוריה בין 0 ל-1. אנו קובעים סף (בדרך כלל 0.7–0.9) — תגיות מתחת לסף נמחקות. מנהל יכול לסקור ולתקן תגיות אוטומטיות. בדיקות A/B של ספים שונים עוזרות למצוא את האיזון האופטימלי בין דיוק לרגישות.כיצד לשפר את דיוק התגיות
אם הדיוק נמוך מהציפיות, הגדל את ערכת האימון ל-100+ דוגמאות לכל קטגוריה או השתמש במודל בצד השרת למקרים קשים. אימון מחדש קבוע על נתונים חדשים שומר על הטקסונומיה מעודכנת. אנו ממליצים לאמן מחדש את המודל מדי חודש ככל שמופיעים סוגי תוכן חדשים.
תיוג טקסט ווידאו
פוסטים טקסטואליים — סיווג NLP על-גבי המכשיר באמצעות Natural Language Framework או בשרת. הנחיה: "קבע 3–5 תגיות מהרשימה: ...". תגובת JSON מנותחת בצד הלקוח.
וידאו — ניתוח פריימים מרכזיים:
func tagVideo(at url: URL) async throws -> Set<String> {
let asset = AVURLAsset(url: url)
let duration = asset.duration.seconds
let generator = AVAssetImageGenerator(asset: asset)
generator.maximumSize = CGSize(width: 224, height: 224)
var allTags = Set<String>()
var time = 0.0
while time < duration {
let cgImage = try generator.copyCGImage(at: CMTime(seconds: time, preferredTimescale: 600), actualTime: nil)
let frameTags = try await classifyImage(cgImage)
allTags.formUnion(frameTags)
time += 3.0 // каждые 3 секунды
}
return allTags
}לווידאו ארוך אנו משתמשים במשימות רקע (admin ב-iOS, func tagVideo(at url: URL) async throws -> Set<String> { let asset = AVURLAsset(url: url) let duration = asset.duration.seconds let generator = AVAssetImageGenerator(asset: asset) generator.maximumSize = CGSize(width: 224, height: 224) var allTags = Set<String>() var time = 0.0 while time < duration { let cgImage = try generator.copyCGImage(at: CMTime(seconds: time, preferredTimescale: 600), actualTime: nil) let frameTags = try await classifyImage(cgImage) allTags.formUnion(frameTags) time += 3.0 // каждые 3 секунды } return allTags } באנדרואיד) או שולחים לשרת.
שלבי יישום
- ביקורת תוכן ודרישות: ניתוח נפח וסוגי התוכן הנוכחיים, הגדרת יעדים עסקיים.
- עיצוב טקסונומיה: יצירת מבנה תגיות שטוח או היררכי עם קלט מבעלי עניין.
- איסוף נתונים וסימון: איסוף מינימום 20 דוגמאות לכל קטגוריה, סימון ידני.
- אימון מודל: שימוש ב-CreateML (iOS) או TensorFlow Lite (אנדרואיד) עם למידת העברה; אימות דיוק.
- אינטגרציה: הטמעת SDK באפליקציה, חיבור מודלים על-גבי המכשיר ובשרת, יישום מסנני חיפוש.
- בדיקות והשקה: בדיקות A/B של ספים, השקה לייצור, ניטור ביצועים.
תוצרים
- דוח ביקורת ומסמך עיצוב טקסונומיה
- ערכת נתונים מסומנת לאימון
- מודל מאומן (.mlmodel / .tflite) וקוד מקור
- SDK משולב ל-iOS (Swift) ואנדרואיד (Kotlin) עם תמיכה בהיררכיה
- ארכיטקטורת על-גבי המכשיר + שרת (Firebase, Supabase, או השרת שלך)
- תוצאות בדיקות דיוק והמלצות סף
- תיעוד מלא של API וטקסונומיה
- הכשרת צוות (2 סדנאות)
- חודש תמיכה טכנית לאחר ההשקה עם גישה לקוד מקור וארטיפקטים של המודל
לוחות זמנים ליישום
| שלב | משך |
|---|---|
| תיוג תמונות על-גבי המכשיר (מודלים מוכנים) | 3–5 ימים |
| טקסונומיה מותאמת אישית + אימון ספציפי לתחום | 1–2 שבועות |
| תיוג טקסט + וידאו + היררכיה | 2–4 שבועות |
| מחזור מלא (אנליטיקה → עיצוב → בדיקות → השקה) | 3 עד 8 שבועות |
התמחור נקבע באופן אישי. להערכה מדויקת, שלחו לנו את תיאור הפרויקט שלכם — נכין הצעה מסחרית תוך 1–2 ימים.







