המשימה 'הטמעת טקסט' מאפשרת ליצור ייצוג מספרי של נתוני טקסט כדי לתעד את המשמעות הסמנטית שלהם. ההוראות הבאות מראות איך להשתמש בכלי להטמעת טקסט באפליקציות ל-iOS.
אתם יכולים לראות את המשימה הזו בפעולה בהדגמה הזו לאינטרנט. למידע נוסף על היכולות, המודלים והאפשרויות להגדרה של המשימה הזו, ראו סקירה כללית.
קוד לדוגמה
קוד הדוגמה של Text Embedder מספק הטמעה בסיסית של אפליקציה ל-iOS שמשלבת את המשימה הזו. בדוגמה הזו נבדקות הדמיון הסמנטי בין שני קטעי טקסט, ונדרשים מכשיר iOS פיזי או סימולטור iOS.
אפשר להשתמש באפליקציה כנקודת התחלה לאפליקציית iOS משלכם, או להיעזר בה כשמשנים אפליקציה קיימת. אפשר לעיין בקוד לדוגמה של Text Embedder ב-GitHub.
מורידים את הקוד
בהוראות הבאות מוסבר איך ליצור עותק מקומי של קוד הדוגמה באמצעות הכלי של שורת הפקודה git.
כדי להוריד את הקוד לדוגמה:
משכפלים את מאגר ה-Git באמצעות הפקודה הבאה:
git clone https://github.com/google-ai-edge/mediapipe-samples
אפשר גם להגדיר את מכונה של git לשימוש ב-sparse checkout, כך שיישארו רק הקבצים של אפליקציית הדוגמה של Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
אחרי שיוצרים גרסה מקומית של קוד הדוגמה, אפשר להתקין את ספריית המשימות של MediaPipe, לפתוח את הפרויקט באמצעות Xcode ולהפעיל את האפליקציה. להוראות, אפשר לעיין במדריך ההגדרה ל-iOS.
רכיבים מרכזיים
הקבצים הבאים מכילים את הקוד החיוני לאפליקציה לדוגמה של הכלי להטמעת טקסט:
- TextEmbedderService.swift: הפונקציה הזו מאתחלת את הטקסט שמוטמע ומפעילה את ההסקה על נתוני הקלט.
- ViewController.swift: הקוד שמטמיע את ממשק המשתמש ומעצב את התוצאות.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח ופרויקטי הקוד לשימוש ב-Text Embedder. במדריך ההגדרה ל-iOS תוכלו לקרוא מידע כללי על הגדרת סביבת הפיתוח לשימוש במשימות MediaPipe, כולל הדרישות לגרסת הפלטפורמה.
יחסי תלות
הכלי להטמעת טקסט משתמש בספרייה MediaPipeTasksText
, שאותה צריך להתקין באמצעות CocoaPods. הספרייה תואמת לאפליקציות Swift וגם לאפליקציות Objective-C, ולא נדרשת הגדרה נוספת ספציפית לשפה.
הוראות להתקנת CocoaPods ב-macOS מפורטות במדריך להתקנת CocoaPods.
הוראות ליצירת Podfile
עם ה-pods הנדרשים לאפליקציה מפורטות במאמר שימוש ב-CocoaPods.
מוסיפים את ה-pod של MediaPipeTasksText
ב-Podfile
באמצעות הקוד הבא:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
אם האפליקציה כוללת יעדי בדיקת יחידה, תוכלו לעיין במדריך ההגדרה ל-iOS כדי לקבל מידע נוסף על הגדרת Podfile
.
דגם
למשימה של MediaPipe Text Embedder צריך להיות מודל מאומן שתואם למשימה הזו. מידע נוסף על המודלים המאומנים שאפשר להשתמש בכלי להטמעה של טקסט, אפשר למצוא בקטע 'מודלים' בסקירה הכללית על המשימה.
בוחרים מודל ומורידים אותו, ומוסיפים אותו לספריית הפרויקט באמצעות 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 Op. ברוב המקרים, זה כבר המצב. נירמול L2 נוצר באמצעות הסקת TFLite ללא צורך באפשרות הזו. | Boolean |
False |
quantize |
אם יש לכמת את ההטמעה שהוחזרה לבייטים באמצעות כימות סקלרי. ההנחה לגבי הטמעות היא שהן נורמליות ליחידה, ולכן לכל מאפיין מובטח ערך בטווח [-1.0, 1.0]. אם זה לא המצב, השתמשו באפשרות l2_regularize. | Boolean |
False |
הרצת המשימה
כדי להטמיע את טקסט הקלט ולקבל את וקטורי ההטמעה שלו, אפשר להשתמש בשיטה embed(text:)
של TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
הערה: המשימה חוסמת את השרשור הנוכחי עד שהיא מסיימת להריץ את ההסקה על הטקסט. כדי להימנע מחסימה של השרשור הנוכחי, מריצים את העיבוד בשרשור רקע באמצעות מסגרות ה-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.