שילוב של מחפשי טקסט

חיפוש טקסט מאפשר לחפש טקסט שדומה מבחינה סמנטית במאגר. הוא פועל על ידי הטמעת שאילתת החיפוש בווקטור רב-ממדי שמייצג את המשמעות הסמנטית של השאילתה, ואז ביצוע חיפוש דמיון באינדקס מותאם אישית שהוגדר מראש באמצעות ScaNN (Scalable Nearest Neighbors).

בניגוד לסיווג טקסטים (למשל סיווג שפה טבעית של Bert), כדי להרחיב את מספר הפריטים שאפשר לזהות לא צריך לאמן מחדש את כל המודל. אפשר להוסיף פריטים חדשים על ידי בנייה מחדש של האינדקס. היא גם מאפשרת לעבוד עם מאגרי מידע גדולים יותר (100,000 פריטים ומעלה).

אפשר להשתמש ב-API של Task Library TextSearcher כדי לפרוס את הכלי המותאם אישית לחיפוש טקסט באפליקציות לנייד.

התכונות העיקריות של TextSearcher API

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

  • עיבוד של טקסט קלט, כולל טוקניזציה של Wordpiece או Sentencepiece בתוך הגרף או מחוצה לו על טקסט קלט.

דרישות מוקדמות

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

לשם כך, תצטרכו:

  • מודל TFLite להטמעת טקסט, כמו Universal Sentence Encoder. לדוגמה,
    • האחת שאומנה מחדש ב-Colab, שעברה אופטימיזציה להסקת מסקנות במכשיר. ב-Pixel 6, לוקח רק 6 אלפיות השנייה לשאילתת מחרוזת טקסט.
    • הגרסה הכמותית, שהיא קטנה יותר מהגרסה שלמעלה אבל לוקח 38ms לכל הטמעה.
  • קורפוס הטקסט.

אחרי השלב הזה, אמור להיות לכם מודל חיפוש עצמאי של TFLite (למשל, mobilenet_v3_searcher.tflite), שהוא מודל הטמעת הטקסט המקורי עם האינדקס שמצורף למטא-נתונים של מודל TFLite.

הסקת מסקנות ב-Java

שלב 1: מייבאים את התלות ב-Gradle והגדרות אחרות

מעתיקים את קובץ המודל של .tflite searcher לספריית הנכסים של מודול Android שבו המודל יופעל. מציינים שהקובץ לא צריך להיות דחוס, ומוסיפים את ספריית TensorFlow Lite לקובץ build.gradle של המודול:

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

שלב 2: שימוש במודל

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

אפשר לעיין בקוד המקור וב-Javadoc כדי לראות עוד אפשרויות להגדרת TextSearcher.

הרצת הסקה ב-C++‎

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

אפשר לעיין בקוד המקור כדי לראות עוד אפשרויות להגדרת TextSearcher.

הרצת הסקה ב-Python

שלב 1: מתקינים את חבילת TensorFlow Lite Support Pypi.

אפשר להתקין את חבילת TensorFlow Lite Support Pypi באמצעות הפקודה הבאה:

pip install tflite-support

שלב 2: שימוש במודל

from tflite_support.task import text

# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

אפשר לעיין בקוד המקור כדי לראות עוד אפשרויות להגדרת TextSearcher.

תוצאות לדוגמה

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

אתם יכולים לנסות את כלי ההדגמה הפשוט של CLI ל-TextSearcher עם מודל ונתוני בדיקה משלכם.