מדריך להטמעת טקסט ל-Android

המשימה 'כלי להטמעת טקסט של MediaPipe' מאפשרת ליצור ייצוג מספרי של נתוני טקסט לתעד את המשמעות הסמנטית שלו. ההוראות האלה מדגימות איך להשתמש כלי להטמעת טקסט באפליקציות ל-Android.

מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה במשימה הזאת, ראו סקירה כללית.

קוד לדוגמה

קוד הדוגמה של MediaPipe Tasks הוא הטמעה פשוטה של כלי להטמעת טקסט לאפליקציה ל-Android. בדוגמה מוערכת הדמיון הסמנטי בין קטעי טקסט, וצריך להשתמש במכשיר Android פיזי או במכשיר Android אמולטור.

אפשר להשתמש באפליקציה כנקודת התחלה של אפליקציה משלכם ל-Android, או להתייחס אליה כשמשנים אפליקציה קיימת. הקוד לדוגמה של הכלי להטמעת טקסט מתארח ב- GitHub.

להורדת הקוד

בהוראות הבאות מוסבר איך ליצור עותק מקומי של הדוגמה באמצעות כלי שורת הפקודה git.

כדי להוריד את הקוד לדוגמה:

  1. משכפלים את מאגר ה-Git באמצעות הפקודה הבאה:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. לחלופין, להגדיר את מכונת ה-Git שלך לשימוש בקופה עם היעדר תשלום, כדי רק הקבצים עבור האפליקציה לדוגמה של כלי הטמעה של טקסט:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

אחרי שיוצרים גרסה מקומית של הקוד לדוגמה, אפשר לייבא את הפרויקט אל Android Studio ולהריץ את האפליקציה. לקבלת הוראות, אפשר לעיין במדריך ההגדרה עבור ב-Android.

רכיבים מרכזיים

הקבצים הבאים מכילים את הקוד החיוני בדוגמה הזו של הכלי להטמעת טקסט יישום:

  • TextEmbedderHelper.kt: הפעלת הכלי להטמעת הטקסט ומטפלת בבחירת המודל והענקת הגישה.
  • MainActivity.kt: הטמעת האפליקציה והרכבה של רכיבי ממשק המשתמש.

הגדרה

בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח פרויקטי קוד שמיועדים באופן ספציפי לשימוש בכלי להטמעת טקסט. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות MediaPipe, כולל הדרישות לגרסאות הפלטפורמה זמינות במדריך ההגדרה עבור ב-Android.

יחסי תלות

הכלי להטמעת טקסט משתמש בספריות com.google.mediapipe:tasks-text. הוספת הפריט שתלויות בקובץ build.gradle של פרויקט פיתוח האפליקציה ל-Android. אפשר לייבא את יחסי התלות הנדרשים באמצעות הקוד הבא:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

דגם

למשימה של MediaPipe Text Embedder נדרש מודל מאומן שתואם למשימה הזו. לקבלת מידע נוסף על מודלים זמינים מאומנים של כלי להטמעת טקסט, אפשר לעיין במאמר בסקירה הכללית על המשימה בקטע 'מודלים'.

בוחרים את המודל, מורידים אותו ושומרים אותו בספריית הפרויקט:

<dev-project-root>/src/main/assets

צריך לציין את הנתיב של המודל בתוך הפרמטר ModelAssetPath. ב הקוד לדוגמה מוגדר בפונקציה setupTextEmbedder() TextEmbedderHelper.kt file:

שימוש בפונקציה BaseOptions.Builder.setModelAssetPath() כדי לציין את הנתיב שבו משתמש המודל. השיטה הזו תופיע בדוגמה של הקוד .

יצירת המשימה

אפשר להשתמש באחת מהפונקציות של createFrom...() כדי ליצור את המשימה. הפונקציה createFromOptions() מקבלת אפשרויות הגדרה כדי להגדיר את כלי ההטמעה אפשרויות. אפשר להפעיל את המשימה גם דרך היצרן של createFromFile() מותאמת אישית. הפונקציה createFromFile() מקבלת נתיב יחסי או מוחלט אל את קובץ המודל שעבר אימון. למידע נוסף על אפשרויות תצורה, אפשרויות להגדרות.

הקוד הבא מדגים איך יוצרים ומגדירים את המשימה הזו.

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

הטמעת הקוד לדוגמה מגדירה את אפשרויות הכלי להטמעת טקסט הפונקציה setupTextEmbedder() TextEmbedderHelper.kt חדש.

אפשרויות תצורה

המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות ל-Android:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
l2_normalize האם לנרמל את וקטור התכונה שמוחזר באמצעות נורמת L2. אפשר להשתמש באפשרות הזו רק אם המודל לא מכיל כבר L2_NORMALIZATION TFLite Op. ברוב המקרים, זה כבר המצב, כך מתקבלת נירמול L2 באמצעות הסקת TFLite ללא צורך לאפשרות הזו. Boolean False
quantize האם יש לכמת את ההטמעה שהוחזרה לבייטים באמצעות קוונטיזציה סקלרית. מניחים בהטמעות מרומזות שהן נורות-יחידה לכן מובטח שלכל מאפיין יהיה ערך ב-[-1.0, 1.0]. כדאי להשתמש אם זה לא המצב, תוכלו להשתמש באפשרות l2_regularize. Boolean False

הכנת נתונים

הכלי להטמעת טקסט פועל עם נתוני טקסט (String). המשימה מטפלת בקלט הנתונים מראש, כולל יצירת אסימונים ועיבוד מראש של tensor. הכול העיבוד מראש מטופל בתוך הפונקציה embed(). אין צורך לפני עיבוד נוסף של טקסט הקלט.

val inputText = "The input text to be embedded."

הרצת המשימה

הכלי להטמעת טקסט משתמש בפונקציה embed כדי להפעיל הסקת מסקנות. לטקסט כלומר, החזרת הווקטורים של ההטמעה של טקסט הקלט.

הקוד הבא מדגים איך מבצעים את העיבוד באמצעות מודל המשימה.

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

בקוד לדוגמה, הפונקציה embed נקראת TextEmbedderHelper.kt חדש.

טיפול בתוצאות והצגת תוצאות

כשמריצים את ההסקה, המשימה של הכלי להטמעת טקסט מחזירה TextEmbedderResult שמכיל רשימה של הטמעות (נקודה צפה) מותאם באופן סקלרי) לטקסט הקלט.

בדוגמה הבאה אפשר לראות את נתוני הפלט מהמשימה:

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

אפשר להשוות את הדמיון הסמנטי בין שתי הטמעות באמצעות TextEmbedder.cosineSimilarity. אפשר לראות דוגמה בקוד הבא.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

בקוד לדוגמה, הפונקציה TextEmbedder.cosineSimilarity() נקראת TextEmbedderHelper.kt חדש.