คู่มือการฝังข้อความสำหรับ iOS

งานตัวฝังข้อความช่วยให้คุณสร้างการนําเสนอข้อมูลข้อความเป็นตัวเลขเพื่อบันทึกความหมายเชิงอรรถศาสตร์ วิธีการเหล่านี้แสดงวิธีใช้เครื่องมือฝังข้อความในแอป iOS

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

ตัวอย่างโค้ด

โค้ดตัวอย่างสำหรับเครื่องมือฝังข้อความมีการติดตั้งใช้งานพื้นฐานของแอปสำหรับ iOS ที่ผสานรวมงานนี้ ตัวอย่างนี้จะประเมินความคล้ายคลึงเชิงความหมายระหว่างข้อความ 2 รายการ และต้องใช้อุปกรณ์ iOS จริงหรือเครื่องจำลอง iOS

คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสําหรับแอป iOS ของคุณเอง หรือใช้อ้างอิงเมื่อแก้ไขแอปที่มีอยู่ได้ ดูโค้ดตัวอย่างของเครื่องมือฝังข้อความได้ใน GitHub

ดาวน์โหลดรหัส

วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาโค้ดตัวอย่างในเครื่องโดยใช้เครื่องมือบรรทัดคำสั่ง git

วิธีดาวน์โหลดโค้ดตัวอย่าง

  1. โคลนที่เก็บ Git โดยใช้คําสั่งต่อไปนี้

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. คุณสามารถเลือกกำหนดค่าอินสแตนซ์ 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