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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ก.ย. 4, 2024
account_circleเขียนโดย ulukaya@, khanhlvg@

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

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

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

รายงานปัญหา