Hướng dẫn nhúng văn bản cho iOS

Tác vụ Trình nhúng văn bản cho phép bạn tạo một bản trình bày dạng số của dữ liệu văn bản để ghi lại ý nghĩa ngữ nghĩa của dữ liệu đó. Các hướng dẫn này cho bạn biết cách sử dụng Trình nhúng văn bản trong ứng dụng iOS.

Bạn có thể xem cách thực hiện tác vụ này bằng cách xem Bản minh hoạ web này. Để biết thêm thông tin về các tính năng, mô hình và tuỳ chọn cấu hình của tác vụ này, hãy xem phần Tổng quan.

Ví dụ về mã

Mã ví dụ cho Trình nhúng văn bản cung cấp cách triển khai cơ bản của một ứng dụng dành cho iOS tích hợp tác vụ này. Ví dụ này đánh giá mức độ tương đồng ngữ nghĩa giữa hai đoạn văn bản và yêu cầu một thiết bị iOS thực hoặc trình mô phỏng iOS.

Bạn có thể sử dụng ứng dụng này làm điểm xuất phát cho ứng dụng iOS của riêng mình hoặc tham khảo ứng dụng này khi sửa đổi một ứng dụng hiện có. Bạn có thể tham khảo mã ví dụ về Trình nhúng văn bản trên GitHub.

Tải mã xuống

Hướng dẫn sau đây cho bạn biết cách tạo bản sao cục bộ của mã ví dụ bằng công cụ dòng lệnh git.

Cách tải mã mẫu xuống:

  1. Sao chép kho lưu trữ git bằng lệnh sau:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Bạn có thể định cấu hình thực thể git để sử dụng tính năng kiểm tra thưa thớt, nhờ đó bạn chỉ có các tệp cho ứng dụng mẫu Trình nhúng văn bản:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/ios/
    

Sau khi tạo phiên bản cục bộ của mã ví dụ, bạn có thể cài đặt thư viện tác vụ MediaPipe, mở dự án bằng Xcode và chạy ứng dụng. Để biết hướng dẫn, hãy xem Hướng dẫn thiết lập cho iOS.

Các thành phần chính

Các tệp sau đây chứa mã quan trọng cho ứng dụng mẫu của Trình nhúng văn bản:

Thiết lập

Phần này mô tả các bước chính để thiết lập môi trường phát triển và dự án mã để sử dụng Trình nhúng văn bản. Để biết thông tin chung về cách thiết lập môi trường phát triển cho việc sử dụng các tác vụ MediaPipe, bao gồm cả các yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập cho iOS.

Phần phụ thuộc

Trình nhúng văn bản sử dụng thư viện MediaPipeTasksText. Bạn phải cài đặt thư viện này bằng CocoaPods. Thư viện này tương thích với cả ứng dụng Swift và Objective-C và không yêu cầu thiết lập bổ sung theo ngôn ngữ.

Để biết hướng dẫn cài đặt CocoaPods trên macOS, hãy tham khảo hướng dẫn cài đặt CocoaPods. Để biết hướng dẫn về cách tạo Podfile bằng các pod cần thiết cho ứng dụng, hãy tham khảo phần Sử dụng CocoaPods.

Thêm nhóm MediaPipeTasksText trong Podfile bằng mã sau:

target 'MyTextEmbedderApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Nếu ứng dụng của bạn có các mục tiêu kiểm thử đơn vị, hãy tham khảo Hướng dẫn thiết lập cho iOS để biết thêm thông tin về cách thiết lập Podfile.

Mẫu

Tác vụ Trình nhúng văn bản MediaPipe yêu cầu một mô hình đã huấn luyện tương thích với tác vụ này. Để biết thêm thông tin về các mô hình đã huấn luyện hiện có cho Trình nhúng văn bản, hãy xem Mục mô hình trong phần tổng quan về tác vụ.

Chọn và tải một mô hình xuống, sau đó thêm mô hình đó vào thư mục dự án bằng Xcode. Để biết hướng dẫn về cách thêm tệp vào dự án Xcode của bạn, hãy tham khảo bài viết Quản lý tệp và thư mục trong dự án Xcode của bạn.

Sử dụng thuộc tính BaseOptions.modelAssetPath để chỉ định đường dẫn đến mô hình trong gói ứng dụng. Để biết ví dụ về mã, hãy xem phần tiếp theo.

Tạo việc cần làm

Bạn có thể tạo tác vụ Trình nhúng văn bản bằng cách gọi một trong các trình khởi tạo của tác vụ đó. Trình khởi tạo TextEmbedder(options:) chấp nhận các giá trị cho các tuỳ chọn cấu hình.

Nếu không cần Trình nhúng văn bản được khởi tạo bằng các tuỳ chọn cấu hình tuỳ chỉnh, bạn có thể sử dụng trình khởi tạo TextEmbedder(modelPath:) để tạo Trình nhúng văn bản bằng các tuỳ chọn mặc định. Để biết thêm thông tin về các tuỳ chọn cấu hình, hãy xem phần Tổng quan về cấu hình.

Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ này.

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];

Các lựa chọn về cấu hình

Tác vụ này có các tuỳ chọn cấu hình sau đây cho ứng dụng iOS:

Tên tuỳ chọn Mô tả Khoảng giá trị Giá trị mặc định
l2_normalize Liệu có chuẩn hoá vectơ đặc điểm được trả về bằng chuẩn L2 hay không. Chỉ sử dụng tuỳ chọn này nếu mô hình chưa chứa TFLite L2_NORMALIZATION TFLite gốc. Trong hầu hết các trường hợp, việc này đã đúng trong trường hợp này và quá trình chuẩn hoá L2 đạt được thông qua suy luận TFLite mà không cần tuỳ chọn này. Boolean False
quantize Liệu nội dung nhúng được trả về có được lượng tử hoá thành byte thông qua lượng tử hoá vô hướng hay không. Các lượt nhúng được ngầm xem là quy chuẩn đơn vị, do đó, mọi chiều đều được đảm bảo có giá trị trong [-1.0, 1.0]. Sử dụng tuỳ chọn l2_normalize nếu không phải như vậy. Boolean False

Chạy tác vụ

Để nhúng văn bản đầu vào và lấy vectơ nhúng của văn bản đó, bạn có thể sử dụng phương thức embed(text:) của TextEmbedder.

Swift

let result = try textEmbedder.embed(text: text)

Objective-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

Lưu ý: Tác vụ này chặn luồng hiện tại cho đến khi hoàn tất việc chạy suy luận trên văn bản. Để tránh chặn luồng hiện tại, hãy thực thi quá trình xử lý trong luồng nền bằng cách sử dụng khung iOS Dispatch hoặc NSOperation. Nếu ứng dụng được tạo bằng Swift, bạn cũng có thể dùng Swift Concurrency để thực thi luồng trong nền.

Trong mã ví dụ, phương thức embed(text:) được gọi trong tệp TextEmbedderService.swift.

Xử lý và hiển thị kết quả

Sau khi chạy dự đoán, tác vụ Trình nhúng văn bản sẽ trả về một đối tượng TextEmbedderResult chứa danh sách các mục nhúng (dấu phẩy động hoặc lượng tử hoá vô hướng) cho văn bản đầu vào.

Sau đây là ví dụ về dữ liệu đầu ra của tác vụ này:

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

Bạn có thể so sánh điểm tương đồng về mặt ngữ nghĩa của 2 mục nhúng bằng phương thức 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];
    

Trong mã ví dụ, phương thức TextEmbedder.cosineSimilarity được gọi trong tệp TextEmbedderService.swift.