איך ליצור תשובות חכמות באמצעות ML Kit ב-Android

ערכת ה-ML Kit יכולה ליצור תשובות קצרות להודעות באמצעות מודל במכשיר.

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

לפני שמתחילים

  1. בקובץ build.gradle ברמת הפרויקט, חשוב להקפיד לכלול את מאגר הנתונים של Google' גם בקטע buildscript וגם בallprojects.
  2. מוסיפים את יחסי התלות של הספריות ל-Android Kit ב-ML Kit, ברמת הקובץ של האפליקציה במודול , שהיא בדרך כלל app/build.gradle:
    dependencies {
      // ...
    
      implementation 'com.google.mlkit:smart-reply:17.0.2'
    }
    
  3. בנוסף, בקובץ build.gradle ברמת האפליקציה, צריך להשבית את הדחיסה של tflite קבצים:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. יצירת אובייקט של היסטוריית שיחות

כדי ליצור תשובות מהירות, צריך להעביר למידת מכונה List של TextMessage כרונולוגית עם חותמת הזמן המוקדמת ביותר.

בכל פעם שהמשתמש שולח הודעה, תוכלו להוסיף את ההודעה ואת חותמת הזמן שלה להיסטוריית השיחות:

Kotlin

conversation.add(TextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()))

Java

conversation.add(TextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()));

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

Kotlin

conversation.add(TextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId))

Java

conversation.add(TextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId));

אובייקט של היסטוריית שיחות נראה כמו בדוגמה הבאה:

חותמת זמן מזהה משתמש isLocalUser מסר
21 בפברואר 2019 13:13:39 PST נכון האם את/ה בדרך?
21 בפברואר 2019 13:15 PST חבר0 FALSE אגיע באיחור, מצטערים!

ערכת ML מציעה תשובות להודעה האחרונה בהיסטוריית השיחות. ההודעה האחרונה צריכה להגיע ממשתמש לא מקומי. בדוגמה שלמעלה, ההודעה האחרונה בשיחה היא ממשתמש לא מקומי CUSTOMER0. כשמשתמשים בכרטיס ML Kit ביומן הזה, הוא מציע תשובות להודעה של CUSTOMERO'"מהיר, מאוחר!"

2. קבלת תשובות להודעות

כדי ליצור תשובות חכמות להודעה, צריך להשתמש במכונה של SmartReplyGenerator ולהעביר את היסטוריית השיחות לשיטת suggestReplies() שלה:

Kotlin

val smartReplyGenerator = SmartReply.getClient()
smartReply.suggestReplies(conversation)
        .addOnSuccessListener { result ->
            if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                // The conversation's language isn't supported, so
                // the result doesn't contain any suggestions.
            } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                // Task completed successfully
                // ...
            }
        }
        .addOnFailureListener {
            // Task failed with an exception
            // ...
        }

Java

SmartReplyGenerator smartReply = SmartReply.getClient();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so
                    // the result doesn't contain any suggestions.
                } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                    // Task completed successfully
                    // ...
                }
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
            }
        });

אם הפעולה מצליחה, אובייקט SmartReplySuggestionResult מועבר לטיפול של הצלחה. האובייקט מכיל רשימה של עד שלוש הצעות לתשובות, שאפשר להציג למשתמש:

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

Java

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

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