งานตัวฝังข้อความช่วยให้คุณสร้างการนําเสนอข้อมูลข้อความเป็นตัวเลขเพื่อบันทึกความหมายเชิงอรรถศาสตร์ วิธีการเหล่านี้แสดงวิธีใช้เครื่องมือฝังข้อความในแอป iOS
คุณสามารถดูการทํางานของงานนี้ได้โดยดูการสาธิตบนเว็บนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ รูปแบบ และตัวเลือกการกําหนดค่าของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับเครื่องมือฝังข้อความแสดงการใช้งานพื้นฐานของแอปสําหรับ iOS ที่ผสานรวมงานนี้ ตัวอย่างนี้ประเมินความคล้ายคลึงกันทางความหมายระหว่างข้อความ 2 ชิ้นและต้องใช้อุปกรณ์ iOS จริงหรือเครื่องจำลอง 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_embedder/ios/
หลังจากสร้างโค้ดตัวอย่างเวอร์ชันในเครื่องแล้ว คุณสามารถติดตั้งไลบรารีงาน MediaPipe, เปิดโปรเจ็กต์โดยใช้ Xcode และเรียกใช้แอปได้ ดูวิธีการได้ที่คู่มือการตั้งค่าสำหรับ iOS
คอมโพเนนต์หลัก
ไฟล์ต่อไปนี้มีโค้ดสําคัญสําหรับตัวอย่างแอปพลิเคชันโปรแกรมฝังข้อความ
- TextEmbedderService.swift: เริ่มต้นใช้งานโปรแกรมฝังข้อความและเรียกใช้การอนุมานกับข้อมูลอินพุต
- ViewController.swift: ใช้ UI และจัดรูปแบบผลลัพธ์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสําคัญในการตั้งค่าสภาพแวดล้อมการพัฒนาและโปรเจ็กต์โค้ดเพื่อใช้เครื่องมือฝังข้อความ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนาเพื่อใช้งาน MediaPipe รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
ตัวฝังข้อความใช้ไลบรารี MediaPipeTasksText
ซึ่งต้องติดตั้งโดยใช้ CocoaPods ไลบรารีนี้ใช้ได้กับทั้งแอป Swift และ Objective-C และไม่จำเป็นต้องมีการตั้งค่าเพิ่มเติมสำหรับภาษาใดภาษาหนึ่ง
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่คู่มือการติดตั้ง CocoaPods
ดูวิธีการสร้าง Podfile
ที่มีพ็อดที่จำเป็นสำหรับแอปได้ที่การใช้ CocoaPods
เพิ่มพ็อด MediaPipeTasksText
ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
หากแอปมีเป้าหมายการทดสอบยูนิต ให้ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า Podfile
ในคู่มือการตั้งค่าสําหรับ iOS
รุ่น
งานโปรแกรมฝังข้อความของ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับเครื่องมือฝังข้อความ โปรดดูภาพรวมงานส่วนโมเดล
เลือกและดาวน์โหลดโมเดล แล้วเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode โปรดดูวิธีการเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ได้ที่การจัดการไฟล์และโฟลเดอร์ในโปรเจ็กต์ Xcode ของคุณ
ใช้พร็อพเพอร์ตี้ BaseOptions.modelAssetPath
เพื่อระบุเส้นทางไปยังโมเดลใน App Bundle ดูตัวอย่างโค้ดได้ในส่วนถัดไป
สร้างงาน
คุณสร้างงานตัวฝังข้อความได้โดยเรียกตัวเริ่มต้นรายการใดรายการหนึ่ง ตัวเริ่มต้น TextEmbedder(options:)
จะยอมรับค่าสำหรับตัวเลือกการกำหนดค่า
หากไม่จําเป็นต้องเริ่มต้นใช้งานเครื่องมือฝังข้อความด้วยตัวเลือกการกําหนดค่าที่กําหนดเอง คุณสามารถใช้ตัวเริ่มต้น TextEmbedder(modelPath:)
เพื่อสร้างเครื่องมือฝังข้อความที่มีตัวเลือกเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าได้ที่ภาพรวมการกําหนดค่า
โค้ดต่อไปนี้แสดงวิธีสร้างและกําหนดค่างานนี้
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
let textEmbedder = try TextEmbedder(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;
MPPTextEmbedder *textEmbedder =
[[MPPTextEmbedder alloc] initWithOptions:options error:nil];
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป iOS
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
l2_normalize |
กำหนดว่าจะปรับค่าเวกเตอร์ฟีเจอร์ที่แสดงผลด้วย L2 หรือไม่ ใช้ตัวเลือกนี้เฉพาะในกรณีที่โมเดลไม่มีการดำเนินการ L2_NORMALIZATION ของ TFLite เดิมอยู่แล้ว ซึ่งในกรณีส่วนใหญ่จะเป็นเช่นนั้นอยู่แล้ว และระบบจะทำการแปลง L2 ผ่านการอนุมาน TFLite โดยไม่จำเป็นต้องใช้ตัวเลือกนี้ | Boolean |
False |
quantize |
ควรแปลงการฝังที่แสดงผลเป็นไบต์ผ่านการแปลงเชิงสเกลหรือไม่ ระบบจะถือว่าการฝังมีรูปแบบเป็นหน่วยโดยปริยาย และรับประกันว่ามิติข้อมูลใดๆ จะมีค่าอยู่ในช่วง [-1.0, 1.0] ใช้ตัวเลือก l2_normalize หากไม่ใช่กรณีนี้ | Boolean |
False |
เรียกใช้งาน
หากต้องการฝังอินพุตข้อความและรับเวกเตอร์การฝัง คุณสามารถใช้เมธอด embed(text:)
ของ TextEmbedder
ได้
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
หมายเหตุ: งานจะบล็อกเทรดปัจจุบันจนกว่าจะเสร็จสิ้นการอนุมานในข้อความ หากต้องการหลีกเลี่ยงการบล็อกเธรดปัจจุบัน ให้ดำเนินการประมวลผลในเธรดแบ็กกราวด์โดยใช้เฟรมเวิร์ก Dispatch หรือ NSOperation ของ iOS หากแอปสร้างขึ้นโดยใช้ Swift คุณจะใช้ Swift Concurrency สำหรับการเรียกใช้เธรดเบื้องหลังได้ด้วย
ในโค้ดตัวอย่าง ระบบจะเรียกใช้เมธอด embed(text:)
ในไฟล์ TextEmbedderService.swift
จัดการและแสดงผลลัพธ์
เมื่อเรียกใช้การอนุมาน งานโปรแกรมฝังข้อความจะแสดงผลTextEmbedderResult
ออบเจ็กต์ที่มีรายการการฝัง (ทศนิยมหรือจํานวนจริง) สําหรับข้อความอินพุต
ต่อไปนี้คือตัวอย่างข้อมูลเอาต์พุตจากงานนี้
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
คุณสามารถเปรียบเทียบความคล้ายคลึงเชิงความหมายของข้อมูลเชิงลึก 2 รายการได้โดยใช้เมธอด
TextEmbedder.cosineSimilarity
Swift
let similarity = try TextEmbedder.cosineSimilarity( embedding1: result.embeddingResult.embeddings[0], embedding2: otherResult.embeddingResult.embeddings[0])
Objective-C
NSNumber *similarity = [MPPTextEmbedder cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0] andEmbedding2:otherResult.embeddingResult.embeddings[0] error:nil];
ในโค้ดตัวอย่าง ระบบจะเรียกใช้เมธอด TextEmbedder.cosineSimilarity
ในไฟล์
TextEmbedderService.swift