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

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

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

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

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

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

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

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

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

בשביל זה תצטרך:

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

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

הפעל הסקה ב-Java

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

העתק את קובץ מודל החיפוש .tflite לספריית הנכסים של מודול האנדרואיד שבו המודל יופעל. ציין שאין לדחוס את הקובץ, והוסף את ספריית 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 (NNAPI is included)
    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 עם מודל ונתוני בדיקה משלך.