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

1. ภาพรวม

text-classification-result.png

ยินดีต้อนรับสู่การจำแนกประเภทข้อความด้วย TensorFlow Lite และ Firebase Codelab ใน 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) จากตัวอย่างการดาวน์โหลดโค้ด (ไฟล์ > เปิด > .../codelab-textclassification-android-master/start)

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

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

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

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

2fb4e69fafb2e3ed.png

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

เพิ่ม Firebase ไปยังโปรเจ็กต์

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

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

  1. จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ ให้คลิกไอคอน Android เพื่อเปิดเวิร์กโฟลว์การตั้งค่า
  2. ป้อนชื่อแพ็กเกจของ Codelab: 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 และคลิกเรียกใช้ ( ดำเนินการ.png) ในแถบเครื่องมือ Android Studio

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

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

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

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

เปิดใน 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. ผสานรวมโมเดลในแอปของคุณ

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

เพิ่มทรัพยากร Dependency

ไปที่ไฟล์ Gradle ของแอปและเพิ่ม TensorFlow Lite Task Library (Text) ในทรัพยากร 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 ของไลบรารีงาน

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 และคลิกเรียกใช้ ( ดำเนินการ.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. ยินดีด้วย

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

สรุปประเด็นที่ได้พูดถึง

  • TensorFlow Lite
  • Firebase ML

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

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

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

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

รายงานปัญหา