המשימה 'הטמעת טקסט' מאפשרת ליצור ייצוג מספרי של נתוני טקסט כדי לתעד את המשמעות הסמנטית שלהם. ההוראות הבאות מראות איך להשתמש בכלי להטמעת טקסט באפליקציות ל-iOS.
אתם יכולים לראות את המשימה הזו בפעולה בהדגמה הזו לאינטרנט. בסקירה הכללית תוכלו לקרוא מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו.
קוד לדוגמה
קוד הדוגמה של Text Embedder מספק הטמעה בסיסית של אפליקציה ל-iOS שמשלבת את המשימה הזו. בדוגמה מוערכת הדמיון הסמנטי בין שני קטעי טקסט, ונדרש מכשיר iOS פיזי או סימולטור של iOS.
אפשר להשתמש באפליקציה כנקודת התחלה לאפליקציית iOS משלכם, או להיעזר בה כשמשנים אפליקציה קיימת. אפשר לעיין בקוד לדוגמה של Text Embedder ב-GitHub.
מורידים את הקוד
בהוראות הבאות מוסבר איך ליצור עותק מקומי של קוד הדוגמה באמצעות הכלי של שורת הפקודה git.
כדי להוריד את הקוד לדוגמה:
משכפלים את מאגר git באמצעות הפקודה הבאה:
git clone https://github.com/google-ai-edge/mediapipe-samples
לחלופין, אפשר להגדיר את מכונת ה-Git לשימוש בקופה עם גישה מצומצמת, כך שיהיו לכם רק את הקבצים של האפליקציה לדוגמה של Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
אחרי שיוצרים גרסה מקומית של קוד הדוגמה, אפשר להתקין את ספריית המשימות של MediaPipe, לפתוח את הפרויקט באמצעות Xcode ולהפעיל את האפליקציה. להוראות, אפשר לעיין במדריך ההגדרה ל-iOS.
רכיבים מרכזיים
הקבצים הבאים מכילים את הקוד החשוב לאפליקציית הדוגמה של Text Embedder:
- TextEmbedderService.swift: הפונקציה הזו מאתחלת את הטקסט שמוטמע ומפעילה את ההסקה על נתוני הקלט.
- ViewController.swift: הקוד שמטמיע את ממשק המשתמש ומעצב את התוצאות.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח ופרויקטי הקוד לשימוש ב-Text Embedder. מידע כללי על הגדרת סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל דרישות לגבי גרסאות הפלטפורמה, זמין במדריך ההגדרה ל-iOS.
יחסי תלות
הכלי להטמעת טקסט משתמש בספרייה MediaPipeTasksText
, שאותה צריך להתקין באמצעות CocoaPods. הספרייה תואמת לאפליקציות Swift וגם לאפליקציות Objective-C, ולא נדרשת הגדרה נוספת ספציפית לשפה.
הוראות להתקנת CocoaPods ב-macOS מפורטות במדריך להתקנת CocoaPods.
במאמר שימוש ב-CocoaPods מוסבר איך ליצור Podfile
עם ה-Pods שדרושים לאפליקציה.
מוסיפים את ה-pod של MediaPipeTasksText
ב-Podfile
באמצעות הקוד הבא:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
אם האפליקציה כוללת יעדי בדיקת יחידה, תוכלו לעיין במדריך ההגדרה ל-iOS כדי לקבל מידע נוסף על הגדרת Podfile
.
דגם
כדי לבצע את המשימה 'הטמעת טקסט' ב-MediaPipe, נדרש מודל מאומן שתואמת למשימה הזו. מידע נוסף על המודלים המאומנים שאפשר להשתמש בכלי להטמעה של טקסט, אפשר למצוא בקטע 'מודלים' בסקירה הכללית על המשימה.
בוחרים מודל ומורידים אותו, ומוסיפים אותו לספריית הפרויקט באמצעות Xcode. לקבלת הוראות להוספת קבצים לפרויקט Xcode, קראו את המאמר ניהול קבצים ותיקיות בפרויקט Xcode.
השתמשו במאפיין BaseOptions.modelAssetPath
כדי לציין את הנתיב למודל בקובץ האפליקציה. דוגמה לקוד מופיעה בקטע הבא.
יצירת המשימה
אפשר ליצור את המשימה Text Embedder על ידי קריאה לאחד מהמפעילים שלה. ה-initializer של TextEmbedder(options:)
מקבל ערכים לאפשרויות ההגדרה.
אם אתם לא צריכים כלי להטמעת טקסט עם אפשרויות הגדרה בהתאמה אישית, תוכלו להשתמש במאתחל TextEmbedder(modelPath:)
כדי ליצור כלי להטמעת טקסט עם אפשרויות ברירת המחדל. מידע נוסף על אפשרויות ההגדרה זמין במאמר סקירה כללית על הגדרות.
הקוד הבא ממחיש איך ליצור ולהגדיר את המשימה הזו.
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
let textEmbedder = try TextEmbedder(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;
MPPTextEmbedder *textEmbedder =
[[MPPTextEmbedder alloc] initWithOptions:options error:nil];
אפשרויות הגדרה
למשימה הזו יש את אפשרויות התצורה הבאות לאפליקציות ל-iOS:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
l2_normalize |
האם לבצע נורמליזציה של וקטור המאפיינים המוחזר באמצעות נורמלי L2. משתמשים באפשרות הזו רק אם המודל כבר לא מכיל אופרטור L2_NORMALIZATION מקורי של TFLite. ברוב המקרים, המצב הזה כבר קיים, ולכן נורמליזציה של L2 מתבצעת באמצעות היסק של TFLite ללא צורך באפשרות הזו. | Boolean |
False |
quantize |
האם להצפין את הטמעת הנתונים שחוזרת לבייטים באמצעות קידוד סקלר. ההנחה במרומז היא שהטמעות הטמעות הן יחידה נורמלית (unit-norm), ולכן מובטח שלכל מאפיין יהיה ערך בתקן [ -1.0, 1.0]. אם זה לא המצב, צריך להשתמש באפשרות l2_normalize. | Boolean |
False |
הרצת המשימה
כדי להטמיע את טקסט הקלט ולקבל את וקטורי ההטמעה שלו, אפשר להשתמש בשיטה embed(text:)
של TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
הערה: המשימה חוסמת את השרשור הנוכחי עד שהיא מסיימת להריץ את ההסקה על הטקסט. כדי לא לחסום את ה-thread הנוכחי, צריך לבצע את העיבוד ב-thread ברקע באמצעות frameworks של iOS Dispatch או של NSOperation. אם האפליקציה נוצרה באמצעות Swift, אפשר גם להשתמש ב-Swift Concurrency להרצת חוט ברקע.
בקוד לדוגמה, השיטה embed(text:)
נקראת בקובץ TextEmbedderService.swift.
טיפול בתוצאות והצגתן
לאחר הפעלת ההסקה, המשימה Text Embedder מחזירה אובייקט TextEmbedderResult
שמכיל רשימה של הטמעות (נקודות צפות או סקלר-קוונטיזציה) של טקסט הקלט.
בהמשך מוצגת דוגמה לנתוני הפלט של המשימה הזו:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
אפשר להשוות את הדמיון הסמנטי בין שתי הטמעות באמצעות השיטה TextEmbedder.cosineSimilarity
.
Swift
let similarity = try TextEmbedder.cosineSimilarity( embedding1: result.embeddingResult.embeddings[0], embedding2: otherResult.embeddingResult.embeddings[0])
Objective-C
NSNumber *similarity = [MPPTextEmbedder cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0] andEmbedding2:otherResult.embeddingResult.embeddings[0] error:nil];
בקוד לדוגמה, השיטה TextEmbedder.cosineSimilarity
נקראת בקובץ TextEmbedderService.swift.