เพิ่มการจัดประเภทข้อความในอุปกรณ์ลงในแอปด้วย TensorFlow Lite และ Firebase - Android Codelab

1. ภาพรวม

text-classification-result.png

ยินดีต้อนรับสู่ Codelab การจัดประเภทข้อความด้วย TensorFlow Lite และ Firebase ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ TensorFlow Lite และ Firebase เพื่อฝึกและติดตั้งใช้งานโมเดลการจัดประเภทข้อความในแอป Codelab นี้อิงตามตัวอย่าง TensorFlow Lite นี้

การจัดประเภทข้อความคือกระบวนการกำหนดแท็กหรือหมวดหมู่ให้กับข้อความตามเนื้อหา ซึ่งเป็นหนึ่งในงานพื้นฐานในการประมวลผลภาษาธรรมชาติ (NLP) ที่มีการใช้งานอย่างกว้างขวาง เช่น การวิเคราะห์ความรู้สึก การติดป้ายกำกับหัวข้อ การตรวจหาสแปม และการตรวจหาเจตนา

การวิเคราะห์ความรู้สึกคือการตีความและการจัดประเภทอารมณ์ (เชิงบวก เชิงลบ และเป็นกลาง) ภายในข้อมูลข้อความโดยใช้เทคนิคการวิเคราะห์ข้อความ การวิเคราะห์ความรู้สึกช่วยให้ธุรกิจระบุความรู้สึกของลูกค้าที่มีต่อผลิตภัณฑ์ แบรนด์ หรือบริการในการสนทนาออนไลน์และข้อเสนอแนะได้

บทแนะนำนี้แสดงวิธีสร้างโมเดลแมชชีนเลิร์นนิงสำหรับการวิเคราะห์ความรู้สึก โดยเฉพาะการจัดประเภทข้อความเป็นบวกหรือลบ นี่คือตัวอย่างของการจัดประเภทแบบไบนารีหรือแบบ 2 คลาส ซึ่งเป็นปัญหาแมชชีนเลิร์นนิงประเภทหนึ่งที่สำคัญและนำไปใช้ได้อย่างกว้างขวาง

สิ่งที่คุณจะได้เรียนรู้

  • ฝึกโมเดลวิเคราะห์ความรู้สึก TF Lite ด้วย TF Lite Model Maker
  • ติดตั้งใช้งานโมเดล TF Lite ใน Firebase ML และเข้าถึงโมเดลจากแอป
  • ผสานรวมโมเดลวิเคราะห์ความรู้สึกของ TF Lite เข้ากับแอปโดยใช้ไลบรารีงานของ TF Lite

สิ่งที่คุณต้องมี

  • Android Studio เวอร์ชันล่าสุด
  • โค้ดตัวอย่าง
  • อุปกรณ์ทดสอบที่ใช้ Android 5.0 ขึ้นไปและบริการ Google Play 9.8 ขึ้นไป หรือโปรแกรมจำลองที่มีบริการ Google Play 9.8 ขึ้นไป
  • หากใช้อุปกรณ์ ให้ใช้สายเชื่อมต่อ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์ในการสร้างแอป Android เท่าใด

ผู้เริ่มต้น ระดับกลาง ผู้ชำนาญ

2. รับโค้ดตัวอย่าง

โคลนที่เก็บ GitHub จากบรรทัดคำสั่ง

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

หากไม่ได้ติดตั้ง Git คุณยังดาวน์โหลดโปรเจ็กต์ตัวอย่างได้จากหน้า GitHub หรือโดยคลิกลิงก์นี้

3. นำเข้าแอปเริ่มต้น

จาก Android Studio ให้เลือกไดเรกทอรี codelab-textclassification-android-master ( android_studio_folder.png) จากการดาวน์โหลดโค้ดตัวอย่าง (File > Open > .../codelab-textclassification-android-master/start)

ตอนนี้คุณควรเปิดโปรเจ็กต์เริ่มต้นใน Android Studio แล้ว

4. เรียกใช้แอปเริ่มต้น

ตอนนี้คุณได้นำเข้าโปรเจ็กต์ไปยัง Android Studio แล้ว และพร้อมที่จะเรียกใช้แอปเป็นครั้งแรก เชื่อมต่ออุปกรณ์ Android แล้วคลิกเรียกใช้ ( execute.png) ในแถบเครื่องมือ Android Studio

แอปควรเปิดขึ้นในอุปกรณ์ โดยมีเพียง UI ที่เรียบง่ายซึ่งช่วยให้ผสานรวมและทดสอบโมเดลการจัดประเภทข้อความในขั้นตอนถัดไปได้ง่าย ในตอนนี้ หากคุณพยายามคาดการณ์ความรู้สึก แอปจะแสดงผลลัพธ์จำลองบางส่วนเท่านั้น

2fb4e69fafb2e3ed.png

5. สร้างโปรเจ็กต์คอนโซล Firebase

เพิ่ม Firebase ลงในโปรเจ็กต์

  1. ไปที่คอนโซล Firebase
  2. เลือกเพิ่มโปรเจ็กต์
  3. เลือกหรือป้อนชื่อโปรเจ็กต์
  4. ทำตามขั้นตอนการตั้งค่าที่เหลือในคอนโซล Firebase แล้วคลิกสร้างโปรเจ็กต์ (หรือเพิ่ม Firebase หากคุณใช้โปรเจ็กต์ Google ที่มีอยู่)

6. เพิ่ม Firebase ไปยังแอป

  1. จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ ให้คลิกไอคอน Android เพื่อเปิดเวิร์กโฟลว์การตั้งค่า
  2. ป้อนชื่อแพ็กเกจของโค้ดแล็บ: org.tensorflow.lite.codelabs.textclassification

เพิ่มไฟล์ google-services.json ลงในแอป

หลังจากเพิ่มชื่อแพ็กเกจและเลือก "ลงทะเบียน"** แล้ว ให้คลิก "ดาวน์โหลด google-services.json"** เพื่อรับไฟล์การกำหนดค่า Firebase Android จากนั้นคัดลอกไฟล์ google-services.json ไปยังไดเรกทอรี *app* ในโปรเจ็กต์

เพิ่มปลั๊กอิน google-services ลงในแอป

ทําตามวิธีการในคอนโซล Firebase เพื่ออัปเดตไฟล์ build.gradle.kts เพื่อเพิ่ม Firebase ลงในแอป

ปลั๊กอิน google-services ใช้ไฟล์ google-services.json เพื่อกำหนดค่าแอปพลิเคชันให้ใช้ Firebase

ซิงค์โปรเจ็กต์กับไฟล์ Gradle

คุณควรซิงค์โปรเจ็กต์กับไฟล์ Gradle ในตอนนี้เพื่อให้แน่ใจว่าแอปมีทรัพยากร Dependency ทั้งหมด เลือกไฟล์ > ซิงค์โปรเจ็กต์กับไฟล์ Gradle จากแถบเครื่องมือของ Android Studio

7. เรียกใช้แอปด้วย Firebase

ตอนนี้คุณได้กำหนดค่าปลั๊กอิน google-services ด้วยไฟล์ JSON แล้ว คุณก็พร้อมที่จะเรียกใช้แอปด้วย Firebase เชื่อมต่ออุปกรณ์ Android แล้วคลิกเรียกใช้ ( execute.png) ในแถบเครื่องมือ Android Studio

แอปควรเปิดขึ้นในอุปกรณ์ ในตอนนี้ แอปของคุณควรยังคงสร้างได้สำเร็จ

8. ฝึกโมเดลการวิเคราะห์ความเห็น

เราจะใช้ TensorFlow Lite Model Maker เพื่อฝึกโมเดลการจัดประเภทข้อความเพื่อคาดการณ์ความรู้สึกของข้อความที่กำหนด

ขั้นตอนนี้จะแสดงเป็น Notebook ของ Python ที่คุณเปิดได้ใน Google Colab คุณเลือกรันไทม์ > เรียกใช้ทั้งหมดเพื่อเรียกใช้ Notebook ทั้งหมดพร้อมกันได้

เปิดใน Colab

หลังจากทำขั้นตอนนี้เสร็จแล้ว คุณจะมีโมเดลวิเคราะห์ความรู้สึกของ TensorFlow Lite ที่พร้อมสำหรับการนำไปใช้กับแอปบนอุปกรณ์เคลื่อนที่

9. ทําให้โมเดลใช้งานได้ใน Firebase ML

การทําให้โมเดลใช้งานได้ใน Firebase ML มีประโยชน์ด้วยเหตุผลหลัก 2 ประการ ดังนี้

  1. เราสามารถทำให้ขนาดการติดตั้งแอปมีขนาดเล็กและดาวน์โหลดโมเดลเฉพาะในกรณีที่จำเป็นเท่านั้น
  2. อัปเดตโมเดลได้เป็นประจำและมีรอบการเผยแพร่ที่แตกต่างจากแอปทั้งหมด

คุณสามารถติดตั้งใช้งานโมเดลผ่านคอนโซลหรือโดยอัตโนมัติโดยใช้ Firebase Admin SDK ในขั้นตอนนี้ เราจะติดตั้งใช้งานผ่านคอนโซล

ก่อนอื่น ให้เปิดคอนโซล Firebase แล้วคลิกแมชชีนเลิร์นนิงในแผงการนำทางด้านซ้าย คลิก "เริ่มต้นใช้งาน" หากเปิดเป็นครั้งแรก จากนั้นไปที่ "กำหนดเอง" แล้วคลิกปุ่ม "เพิ่มโมเดล"

เมื่อได้รับข้อความแจ้ง ให้ตั้งชื่อโมเดลเป็น sentiment_analysis แล้วอัปโหลดไฟล์ที่คุณดาวน์โหลดจาก Colab ในขั้นตอนก่อนหน้า

3c3c50e6ef12b3b.png

10. ดาวน์โหลดโมเดลจาก Firebase ML

การเลือกเวลาที่จะดาวน์โหลดโมเดลระยะไกลจาก Firebase ลงในแอปอาจเป็นเรื่องยาก เนื่องจากโมเดล TFLite อาจมีขนาดค่อนข้างใหญ่ เราต้องการหลีกเลี่ยงการโหลดโมเดลทันทีเมื่อแอปเปิดตัว เนื่องจากหากโมเดลของเราใช้สำหรับฟีเจอร์เดียวและผู้ใช้ไม่เคยใช้ฟีเจอร์นั้น เราจะดาวน์โหลดข้อมูลจำนวนมากโดยไม่มีเหตุผล นอกจากนี้ เรายังตั้งค่าตัวเลือกการดาวน์โหลดได้ เช่น ดึงข้อมูลโมเดลเมื่อเชื่อมต่อกับ Wi-Fi เท่านั้น หากต้องการให้มั่นใจว่าโมเดลพร้อมใช้งานแม้จะไม่ได้เชื่อมต่อเครือข่าย คุณควรจัดกลุ่มโมเดลดังกล่าวโดยไม่รวมแอปเป็นข้อมูลสำรองด้วย

เพื่อความสะดวก เราจะนำโมเดลเริ่มต้นที่รวมไว้และดาวน์โหลดโมเดลจาก Firebase เสมอเมื่อแอปเริ่มทำงานเป็นครั้งแรก ด้วยวิธีนี้ เมื่อเรียกใช้การวิเคราะห์ความรู้สึก คุณจะมั่นใจได้ว่าการอนุมานจะทํางานกับโมเดลที่ได้จาก Firebase

ในไฟล์ app/build.gradle.kts ให้เพิ่มทรัพยากร Dependency ของแมชชีนเลิร์นนิง Firebase

app/build.gradle.kts

ค้นหาความคิดเห็นนี้

// TODO 1: Add Firebase ML dependency

จากนั้นเพิ่มข้อมูลต่อไปนี้

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

เมื่อ Android Studio ขอให้ซิงค์โปรเจ็กต์ ให้เลือกซิงค์เลย

จากนั้นมาเพิ่มโค้ดเพื่อดาวน์โหลดโมเดลจาก Firebase กัน

MainActivity.java

ค้นหาความคิดเห็นนี้

// TODO 2: Implement a method to download TFLite model from Firebase

จากนั้นเพิ่มข้อมูลต่อไปนี้

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

จากนั้นเรียกใช้เมธอด downloadModel ในเมธอด onCreate ของกิจกรรม

MainActivity.java

ค้นหาความคิดเห็นนี้

// TODO 3: Call the method to download TFLite model

จากนั้นเพิ่มข้อมูลต่อไปนี้

downloadModel("sentiment_analysis");

11. ผสานรวมโมเดลในแอป

ไลบรารีงานของ TensorFlow Lite ช่วยให้คุณผสานรวมโมเดล TensorFlow Lite เข้ากับแอปได้โดยใช้โค้ดเพียงไม่กี่บรรทัด เราจะเริ่มต้นอินสแตนซ์ NLClassifier โดยใช้โมเดล TensorFlow Lite ที่ดาวน์โหลดจาก Firebase จากนั้นเราจะใช้ข้อมูลดังกล่าวเพื่อจัดประเภทข้อความที่ผู้ใช้แอปป้อนและแสดงผลลัพธ์ใน UI

เพิ่มการอ้างอิง

ไปที่ไฟล์ Gradle ของแอป แล้วเพิ่มไลบรารีงานของ TensorFlow Lite (ข้อความ) ในทรัพยากร Dependency ของแอป

app/build.gradle

ค้นหาความคิดเห็นนี้

// TODO 4: Add TFLite Task API (Text) dependency

จากนั้นเพิ่มข้อมูลต่อไปนี้

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

เมื่อ Android Studio ขอให้ซิงค์โปรเจ็กต์ ให้เลือกซิงค์เลย

เริ่มต้นตัวแยกประเภทข้อความ

จากนั้นเราจะโหลดโมเดลการวิเคราะห์ความรู้สึกที่ดาวน์โหลดจาก Firebase โดยใช้ NLClassifier ของ Task Library

MainActivity.java

มาประกาศตัวแปรอินสแตนซ์ NLClassifier กัน ค้นหาความคิดเห็นนี้

// TODO 5: Define a NLClassifier variable

จากนั้นเพิ่มข้อมูลต่อไปนี้

private NLClassifier textClassifier;

เริ่มต้นตัวแปร textClassifier ด้วยโมเดลการวิเคราะห์ความรู้สึกที่ดาวน์โหลดจาก Firebase ค้นหาความคิดเห็นนี้

// TODO 6: Initialize a TextClassifier with the downloaded model

จากนั้นเพิ่มข้อมูลต่อไปนี้

textClassifier = NLClassifier.createFromFile(model.getFile());

จัดประเภทข้อความ

เมื่อตั้งค่าอินสแตนซ์ textClassifier แล้ว คุณจะเรียกใช้การวิเคราะห์ความรู้สึกได้ด้วยการเรียกใช้เมธอดเพียงครั้งเดียว

MainActivity.java

ค้นหาความคิดเห็นนี้

// TODO 7: Run sentiment analysis on the input text

จากนั้นเพิ่มข้อมูลต่อไปนี้

List<Category> results = textClassifier.classify(text);

ใช้การประมวลผลภายหลัง

สุดท้าย เราจะแปลงเอาต์พุตของโมเดลเป็นข้อความอธิบายเพื่อแสดงบนหน้าจอ

MainActivity.java

ค้นหาความคิดเห็นนี้

// TODO 8: Convert the result to a human-readable text

นำโค้ดที่สร้างข้อความผลลัพธ์จำลองออก

String textToShow = "Dummy classification result.\n";

จากนั้นเพิ่มข้อมูลต่อไปนี้

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. เรียกใช้แอปสุดท้าย

คุณได้ผสานรวมโมเดลการวิเคราะห์ความรู้สึกเข้ากับแอปแล้ว ดังนั้นมาทดสอบกัน เชื่อมต่ออุปกรณ์ Android แล้วคลิกเรียกใช้ ( execute.png) ในแถบเครื่องมือ Android Studio

แอปควรคาดการณ์ความรู้สึกของรีวิวภาพยนตร์ที่คุณป้อนได้อย่างถูกต้อง

img/text-classification-result.png

13. เพิ่มประสิทธิภาพแอปด้วยฟีเจอร์ Firebase เพิ่มเติม

นอกจากโฮสต์โมเดล TFLite แล้ว Firebase ยังมีฟีเจอร์อื่นๆ อีกหลายอย่างที่จะช่วยเพิ่มประสิทธิภาพกรณีการใช้งานแมชชีนเลิร์นนิงของคุณ

  • การตรวจสอบประสิทธิภาพ Firebase เพื่อวัดความเร็วในการอนุมานโมเดลที่ทำงานบนอุปกรณ์ของผู้ใช้
  • Firebase Analytics เพื่อวัดประสิทธิภาพของโมเดลในเวอร์ชันที่ใช้งานจริงโดยวัดปฏิกิริยาของผู้ใช้
  • Firebase A/B Testing เพื่อทดสอบโมเดลหลายเวอร์ชัน
  • คุณจำได้ไหมว่าเราฝึกโมเดล TFLite 2 เวอร์ชันไปก่อนหน้านี้ การทดสอบ A/B เป็นวิธีที่ดีในการดูว่าเวอร์ชันใดมีประสิทธิภาพดีกว่าในเวอร์ชันที่ใช้งานจริง

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ประโยชน์จากฟีเจอร์เหล่านี้ในแอปได้ที่ Codelab ด้านล่าง

14. ยินดีด้วย

ในโค้ดแล็บนี้ คุณได้เรียนรู้วิธีฝึกโมเดล TFLite สำหรับการวิเคราะห์ความรู้สึกและนําไปใช้กับแอปบนอุปกรณ์เคลื่อนที่โดยใช้ Firebase ดูข้อมูลเพิ่มเติมเกี่ยวกับ TFLite และ Firebase ได้ที่ตัวอย่างอื่นๆ ของ TFLite และคู่มือการเริ่มต้นใช้งานของ Firebase

สิ่งที่เราได้พูดถึงไปแล้ว

  • TensorFlow Lite
  • Firebase ML

ขั้นตอนถัดไป

  • วัดความเร็วในการอนุมานของโมเดลด้วยการตรวจสอบประสิทธิภาพของ Firebase
  • ทําให้โมเดลใช้งานได้จาก Colab ไปยัง Firebase โดยตรงผ่าน Firebase ML Model Management API
  • เพิ่มกลไกเพื่อให้ผู้ใช้แสดงความคิดเห็นเกี่ยวกับผลการคาดการณ์ และใช้ Firebase Analytics เพื่อติดตามความคิดเห็นของผู้ใช้
  • ทําการทดสอบ A/B กับโมเดลเวกเตอร์ของคําเฉลี่ยและโมเดล MobileBERT ด้วย Firebase A/B Testing

ดูข้อมูลเพิ่มเติม

หากมีข้อสงสัย

รายงานปัญหา