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:
Sao chép kho lưu trữ git bằng lệnh sau:
git clone https://github.com/google-ai-edge/mediapipe-samples
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:
- TextEmbedderService.swift: khởi tạo trình nhúng văn bản và chạy quy trình suy luận trên dữ liệu đầu vào.
- ViewController.swift: Triển khai giao diện người dùng và định dạng kết quả.
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.