เพิ่มการจัดประเภทข้อความในอุปกรณ์ลงในแอปด้วย 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_โฟลเดอร์.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. ป้อนชื่อแพ็กเกจของโค้ดแล็บ: 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. ฝึกโมเดลการวิเคราะห์ความรู้สึก

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

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

เปิดใน Colab

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

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

การทำให้โมเดลใช้งานได้กับ Firebase ML มีประโยชน์เนื่องจากเหตุผลหลัก 2 ประการ ได้แก่

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

คุณอาจทําให้การนําโมเดลไปใช้ได้ผ่านคอนโซลหรือแบบเป็นโปรแกรมโดยใช้ Firebase Admin SDK ในขั้นตอนนี้ เราจะทำให้ใช้งานได้ผ่านคอนโซล

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

เมื่อได้รับข้อความแจ้ง ให้ตั้งชื่อโมเดล 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 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 แล้วคลิกเรียกใช้ ( 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. ยินดีด้วย

ใน Codelab นี้ คุณได้เรียนรู้วิธีฝึกโมเดล 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

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

หากมีคำถาม

รายงานปัญหา