งานตัวแยกประเภทข้อความช่วยให้คุณจัดประเภทข้อความเป็นชุดหมวดหมู่ที่กำหนดไว้ เช่น ความรู้สึกเชิงบวกหรือเชิงลบ ระบบจะกำหนดหมวดหมู่ตามโมเดลที่คุณใช้และวิธีฝึกโมเดลนั้น วิธีการเหล่านี้จะแสดง วิธีใช้ตัวแยกประเภทข้อความในแอป iOS ตัวอย่างโค้ดที่อธิบายในวิธีการเหล่านี้จะอยู่ใน GitHub
คุณดูงานนี้ในการใช้งานจริงได้โดยดูการสาธิตในเว็บนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่าของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างงาน MediaPipe Tasks เป็นการใช้งานขั้นพื้นฐานของแอปตัวแยกประเภทข้อความสำหรับ iOS
คุณสามารถใช้แอปเป็นจุดเริ่มต้นสำหรับแอป iOS ของคุณเองหรืออ้างอิงถึงแอปเมื่อแก้ไขแอปที่มีอยู่ ดูโค้ดตัวอย่างตัวแยกประเภทข้อความได้ใน GitHub
ดาวน์โหลดโค้ด
วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาโค้ดตัวอย่างในเครื่องโดยใช้เครื่องมือบรรทัดคำสั่ง git
วิธีดาวน์โหลดโค้ดตัวอย่าง
โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples
(ไม่บังคับ) กำหนดค่าอินสแตนซ์ Git เพื่อใช้การชำระเงินแบบกะทัดรัด เพื่อให้คุณมีเพียงไฟล์สำหรับแอปตัวอย่างตัวแยกประเภทข้อความเท่านั้น
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/ios/
หลังจากสร้างโค้ดตัวอย่างเวอร์ชันในเครื่องแล้ว คุณจะติดตั้งไลบรารีงาน MediaPipe เปิดโปรเจ็กต์โดยใช้ Xcode แล้วเรียกใช้แอปได้ โปรดดูวิธีการในคู่มือการตั้งค่าสำหรับ iOS
องค์ประกอบหลัก
ไฟล์ต่อไปนี้มีโค้ดสำคัญสำหรับแอปพลิเคชันตัวอย่างตัวแยกประเภทข้อความ
- TextClassifierHelper.swift: เริ่มต้นตัวแยกประเภทข้อความและจัดการการเลือกโมเดล
- ViewController.swift: ใช้งาน UI และจัดรูปแบบผลลัพธ์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมการพัฒนาและโปรเจ็กต์โค้ดเพื่อใช้ตัวแยกประเภทข้อความ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนาสำหรับการใช้งาน MediaPipe รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
ตัวแยกประเภทข้อความใช้ไลบรารี MediaPipeTasksText
ซึ่งต้องติดตั้งโดยใช้ CocoaPods ไลบรารีนี้ใช้งานได้กับทั้งแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเฉพาะภาษาใดๆ เพิ่มเติม
หากต้องการดูวิธีการติดตั้ง CocoaPods ใน macOS โปรดอ่านคู่มือการติดตั้ง CocoaPods
ดูวิธีสร้าง Podfile
ด้วยพ็อดที่จำเป็นสำหรับแอปได้ที่การใช้ CocoaPods
เพิ่มพ็อด MediaPipeTasksText ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyTextClassifierApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
หากแอปมีเป้าหมายการทดสอบหน่วย โปรดอ่านคู่มือการตั้งค่าสำหรับ iOS เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า Podfile
รุ่น
งาน MediaPipe Text Classifier ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ได้รับการฝึกแล้วที่พร้อมใช้งานสำหรับตัวแยกประเภทข้อความได้ที่ภาพรวมงานส่วนโมเดล
เลือกและดาวน์โหลดโมเดล แล้วเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode สำหรับคำแนะนำเกี่ยวกับวิธีเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode โปรดดูการจัดการไฟล์และโฟลเดอร์ในโปรเจ็กต์ Xcode
ใช้พร็อพเพอร์ตี้ BaseOptions.modelAssetPath
เพื่อระบุเส้นทางไปยังโมเดลใน App Bundle โปรดดูตัวอย่างโค้ดในส่วนถัดไป
สร้างงาน
คุณสร้างงานตัวแยกประเภทข้อความได้โดยเรียกใช้หนึ่งในเครื่องมือเริ่มต้น เครื่องมือเริ่มต้น TextClassifier(options:)
จะกำหนดค่าสำหรับตัวเลือกการกำหนดค่า
หากไม่ต้องการให้ตัวแยกประเภทข้อความที่เริ่มใช้ตัวเลือกการกำหนดค่าที่กำหนดเอง คุณสามารถใช้เครื่องมือเริ่มต้น TextClassifier(modelPath:)
เพื่อสร้างตัวแยกประเภทข้อความที่มีตัวเลือกเริ่มต้นได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าได้ที่ภาพรวมการกำหนดค่า
โค้ดต่อไปนี้แสดงวิธีการสร้างและกำหนดค่างานนี้
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6
let textClassifier = try TextClassifier(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;
MPPTextClassifier *textClassifier =
[[MPPTextClassifier alloc] initWithOptions:options error:nil];
ตัวเลือกการกำหนดค่า
งานมีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป iOS
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
displayNamesLocale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ในข้อมูลเมตาของโมเดลของงาน หากมี ค่าเริ่มต้นคือ en สำหรับภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลเป็นภาษาท้องถิ่นลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้โดยใช้ TensorFlow Lite Metadata Writer API
| รหัสภาษา | en |
maxResults |
ตั้งค่าจำนวนสูงสุดของผลลัพธ์การจัดประเภทที่มีคะแนนสูงสุด หากต้องการแสดงผล หาก < 0 ระบบจะแสดงผลทั้งหมดที่มี | ตัวเลขจำนวนบวกใดก็ได้ | -1 |
scoreThreshold |
ตั้งค่าเกณฑ์คะแนนการคาดการณ์ที่จะลบล้างเกณฑ์ที่ระบุไว้ในข้อมูลเมตาของโมเดล (หากมี) ผลลัพธ์ที่ต่ำกว่าค่านี้ถูกปฏิเสธ | จำนวนลอยตัวใดก็ได้ | ไม่ได้ตั้งค่า |
categoryAllowlist |
ตั้งค่ารายการตัวเลือกของชื่อหมวดหมู่ที่อนุญาต หากไม่ว่างเปล่า ผลลัพธ์การจัดประเภทที่ไม่มีชื่อหมวดหมู่ในชุดนี้จะถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก
ตัวเลือกนี้ใช้ด้วยกันกับ categoryDenylist ไม่ได้ และการใช้ทั้ง 2 รายการจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
categoryDenylist |
ตั้งค่ารายการตัวเลือกของชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต หากไม่ว่างเปล่า ผลลัพธ์การจัดประเภทซึ่งมีชื่อหมวดหมู่อยู่ในชุดนี้จะถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ด้วยกันกับ categoryAllowlist ไม่ได้เลย และใช้ทั้ง 2 ผลลัพธ์เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
ตัวแยกประเภทข้อความใช้ได้กับข้อมูลข้อความ งานนี้จะจัดการการประมวลผลอินพุตข้อมูลล่วงหน้า ซึ่งรวมถึงการแปลงข้อมูลเป็นโทเค็นและการประมวลผลล่วงหน้าของ tensor
การประมวลผลล่วงหน้าทั้งหมดได้รับการจัดการภายในฟังก์ชัน classify(text:)
โดยไม่จำเป็นต้องประมวลผลข้อความอินพุตล่วงหน้าเพิ่มเติม
Swift
let text = "The input text to be classified."
Objective-C
NSString *text = @"The input text to be classified.";
เรียกใช้งาน
หากต้องการเรียกใช้ตัวแยกประเภทข้อความ ให้ใช้เมธอด classify(text:)
ตัวแยกประเภทข้อความจะแสดงหมวดหมู่ที่เป็นไปได้สำหรับข้อความที่ป้อน
Swift
let result = try textClassifier.classify(text: text)
Objective-C
MPPTextClassifierResult *result = [textClassifier classifyText:text
error:nil];
หมายเหตุ: งานจะบล็อกชุดข้อความปัจจุบันจนกว่าจะใช้การอนุมานข้อความให้เสร็จสิ้น เพื่อหลีกเลี่ยงการบล็อกเทรดปัจจุบัน ให้ดำเนินการประมวลผลในเทรดเบื้องหลังโดยใช้เฟรม iOS Dispatch หรือ NSOperation
แฮนเดิลและแสดงผลลัพธ์
เมื่อเรียกใช้การอนุมาน งานตัวแยกประเภทข้อความจะแสดงผลออบเจ็กต์ TextClassifierResult
ที่มีรายการหมวดหมู่ที่เป็นไปได้สำหรับข้อความอินพุต ระบบจะกำหนดหมวดหมู่ตามโมเดลที่คุณใช้ ดังนั้นหากต้องการหมวดหมู่อื่น ให้เลือกโมเดลอื่น หรือฝึกโมเดลที่มีอยู่อีกครั้ง
ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้
TextClassificationResult:
Classification #0 (single classification head):
ClassificationEntry #0:
Category #0:
category name: "positive"
score: 0.8904
index: 0
Category #1:
category name: "negative"
score: 0.1096
index: 1
ผลลัพธ์นี้ได้มาจากการเรียกใช้ตัวแยกประเภท BERT กับข้อความอินพุต: "an imperfect but overall entertaining mystery"
ไฟล์ ViewController.swift ในโค้ดตัวอย่างจะสาธิตวิธีแสดงผลการตรวจจับที่ส่งคืนจากงาน