Xây dựng mô hình phân loại văn bản “Hugging Face” trong Amazon SageMaker JumpStart

bởi Hemant Singh, Rachna Chadha, and Ashish Khetan |08 tháng 05 2024

Amazon SageMaker JumpStart cung cấp các bộ thuật toán tích hợp, mô hình được đào tạo trước và mẫu giải pháp dựng sẵn để giúp các nhà khoa học dữ liệu và người thực hành máy học (ML) bắt đầu đào tạo và triển khai mô hình ML một cách nhanh chóng. Bạn có thể sử dụng các thuật toán và mô hình này cho cả việc học có giám sát và không giám sát. Họ có thể xử lý nhiều loại dữ liệu đầu vào khác nhau, bao gồm hình ảnh, văn bản và dạng bảng.

Bài đăng này giới thiệu cách sử dụng mô hình phân loại văn bản và mô hình “fill-mask” có sẵn trên Hugging Face trong SageMaker JumpStart để phân loại văn bản trên tập dữ liệu tùy chỉnh. Chúng tôi cũng chứng minh việc thực hiện suy luận hàng loạt và theo thời gian thực cho các mô hình này. Thuật toán học có giám sát này hỗ trợ học chuyển giao cho tất cả các mô hình được đào tạo trước có trên Hugging Face. Nó lấy một đoạn văn bản làm đầu vào và xuất ra xác suất cho mỗi nhãn lớp. Bạn có thể tinh chỉnh các mô hình được đào tạo trước này bằng cách sử dụng phương pháp học chuyển giao ngay cả khi không có sẵn kho văn bản lớn. Nó có sẵn trong giao diện người dùng SageMaker JumpStart trong Amazon SageMaker Studio. Bạn cũng có thể sử dụng nó thông qua SageMaker Python SDK, như được minh họa trong sổ tay ví dụ Giới thiệu về SageMaker HuggingFace – Phân loại văn bản.

Tổng quan về giải pháp

Phân loại văn bản bằng HuggingFace trong SageMaker cung cấp khả năng học chuyển giao trên tất cả các mô hình được đào tạo trước có sẵn trên HuggingFace. Theo số lượng nhãn lớp trong dữ liệu huấn luyện, một lớp phân loại sẽ được gắn vào mô hình HuggingFace được huấn luyện trước. Sau đó, toàn bộ mạng, bao gồm cả mô hình được đào tạo trước hoặc chỉ lớp phân loại trên cùng mới có thể được tinh chỉnh trên dữ liệu đào tạo tùy chỉnh. Trong chế độ học chuyển giao này, việc đào tạo có thể đạt được ngay cả với tập dữ liệu nhỏ hơn.

Trong bài đăng này, chúng tôi trình bày cách thực hiện như sau:

  • Sử dụng thuật toán phân loại văn bản HuggingFace mới
  • Thực hiện suy luận với thuật toán phân loại văn bản HuggingFace
  • Tinh chỉnh mô hình được đào tạo trước trên tập dữ liệu tùy chỉnh
  • Thực hiện suy luận hàng loạt với thuật toán phân loại văn bản HuggingFace

!pip install sagemaker –upgrade –quiet

import sagemaker, boto3, json

from sagemaker.session import Session

sagemaker_session = Session()

aws_role = sagemaker_session.get_caller_identity_arn()

aws_region = boto3.Session().region_name

sess = sagemaker.Session()

Chạy suy luận trên mô hình được đào tạo trước

SageMaker JumpStart hỗ trợ suy luận cho mọi mô hình phân loại văn bản có sẵn thông qua HuggingFace. Mô hình có thể được lưu trữ cho văn bản suy luận và hỗ trợ dưới dạng loại nội dung ứng dụng/loại nội dung x-text . Điều này không chỉ cho phép bạn sử dụng một tập hợp các mô hình được đào tạo trước mà còn cho phép bạn chọn các nhiệm vụ phân loại khác.

Đầu ra chứa các giá trị xác suất, nhãn lớp cho tất cả các lớp và nhãn dự đoán tương ứng với chỉ mục lớp có xác suất cao nhất được mã hóa ở định dạng JSON. Mô hình xử lý một chuỗi cho mỗi yêu cầu và chỉ xuất ra một dòng. Sau đây là ví dụ về phản hồi có định dạng JSON:

accept: application/json;verbose

{“probabilities”: [prob_0, prob_1, prob_2, …],

“labels”: [label_0, label_1, label_2, …],

“predicted_label”: predicted_label}

Nếu accept được đặt thành application/json thì mô hình chỉ đưa ra xác suất. Để biết thêm chi tiết về đào tạo và suy luận, hãy xem sổ ghi chép mẫu.

Bạn có thể chạy suy luận trên mô hình phân loại văn bản bằng cách chuyển model_id vào biến môi trường trong khi tạo đối tượng của lớp Model. Xem đoạn mã sau:

from sagemaker.jumpstart.model import JumpStartModel

hub = {}

HF_MODEL_ID = ‘distilbert-base-uncased-finetuned-sst-2-english’ # Pass any other HF_MODEL_ID from – https://huggingface.co/models?pipeline_tag=text-classification&sort=downloads

hub[‘HF_MODEL_ID’] = HF_MODEL_ID

hub[‘HF_TASK’] = ‘text-classification’

model = JumpStartModel(model_id=infer_model_id, env =hub, enable_network_isolation=False

Tinh chỉnh mô hình được đào tạo trước trên tập dữ liệu tùy chỉnh

Bạn có thể tinh chỉnh từng mô hình phân loại văn bản hoặc filled mask hoặc phân loại văn bản được đào tạo trước cho bất kỳ tập dữ liệu cụ thể nào được tạo thành từ các câu văn bản với số lượng lớp bất kỳ. Mô hình được huấn luyện trước gắn một lớp phân loại vào mô hình nhúng văn bản và khởi tạo các tham số lớp thành các giá trị ngẫu nhiên. Kích thước đầu ra của lớp phân loại được xác định dựa trên số lượng lớp được phát hiện trong dữ liệu đầu vào. Mục tiêu là giảm thiểu lỗi phân loại trên dữ liệu đầu vào. Sau đó, bạn có thể triển khai mô hình tinh chỉnh để suy luận.

Sau đây là hướng dẫn về cách định dạng dữ liệu huấn luyện để nhập vào mô hình:

  • Đầu vào – Một thư mục chứa tệp data.csv. Mỗi hàng của cột đầu tiên phải có nhãn lớp số nguyên nằm trong khoảng từ 0 đến số lượng lớp. Mỗi hàng của cột thứ hai phải có dữ liệu văn bản tương ứng.
  • Đầu ra – Một mô hình được tinh chỉnh có thể được triển khai để suy luận hoặc đào tạo thêm bằng cách sử dụng đào tạo gia tăng.

Sau đây là ví dụ về tệp CSV đầu vào. Tệp không được có bất kỳ tiêu đề nào. Tệp phải được lưu trữ trong bộ chứa Amazon Simple Storage Service (Amazon S3) với đường dẫn tương tự như sau:

s3://bucket_name/input_directory/. Dấu / là bắt buộc.

|0 |hide new secretions from the parental units|

|0 |contains no wit , only labored gags|

|1 |that loves its characters and communicates something rather beautiful about human nature|

|…|…|

Thuật toán cũng hỗ trợ học chuyển giao cho các mô hình được đào tạo trước HuggingFace. Mỗi mô hình được xác định bởi một model_id duy nhất. Ví dụ sau đây cho thấy cách tinh chỉnh mô hình cơ sở BERT được xác định bởi model_id=huggingface-tc-bert-base-cased trên tập dữ liệu đào tạo tùy chỉnh. Các mô hình tarballs được đào tạo trước đã được tải xuống trước từ HuggingFace và được lưu với chữ ký mô hình thích hợp trong bộ chứa S3, sao cho công việc đào tạo chạy trong mạng riêng.

Để học chuyển trên tập dữ liệu tùy chỉnh của bạn, bạn có thể cần thay đổi các giá trị mặc định của hyperparameters đào tạo. Bạn có thể tìm nạp từ điển Python gồm các hyperparameters này với các giá trị mặc định của chúng bằng cách gọi hyperparameters.retrieve_default, cập nhật chúng nếu cần và sau đó chuyển chúng đến lớp Công cụ ước tính. Hyperparameters Train_only_top_layer xác định tham số mô hình nào thay đổi trong quá trình tinh chỉnh. Nếu train_only_top_layer  là True, các tham số của các lớp phân loại sẽ thay đổi và các tham số còn lại không đổi trong quá trình tinh chỉnh. Nếu train_only_top_layer là False thì tất cả tham số của mô hình đều được tinh chỉnh. Xem đoạn mã sau:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model

hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values

hyperparameters[“epochs”] = “5”

Đối với trường hợp sử dụng này, chúng tôi cung cấp SST2 làm tập dữ liệu mặc định để tinh chỉnh các mô hình. Tập dữ liệu chứa các đánh giá phim tích cực và tiêu cực. Nó đã được tải xuống từ TensorFlow theo Giấy phép Apache 2.0. Đoạn mã sau cung cấp tập dữ liệu đào tạo mặc định được lưu trữ trong nhóm S3:

# Sample training data is available in this bucket

training_data_bucket = f”jumpstart-cache-prod-{aws_region}”

training_data_prefix = “training-datasets/SST/”

training_dataset_s3_path = f”s3://{training_data_bucket}/{training_data_prefix}”

Chúng tôi tạo một đối tượng Ước tính bằng cách cung cấp các giá trị model_id và hyperparameters như sau:

# Create SageMaker Estimator instance

tc_estimator = JumpStartEstimator(

hyperparameters=hyperparameters,

model_id=dropdown.value,

instance_type=training_instance_type,

metric_definitions=training_metric_definitions,

output_path=s3_output_location,

enable_network_isolation=False if model_id == “huggingface-tc-models” else True

)

Để khởi chạy công việc đào tạo SageMaker nhằm tinh chỉnh mô hình, hãy gọi .fit trên đối tượng của lớp Công cụ ước tính, đồng thời chuyển vị trí S3 của tập dữ liệu đào tạo:

# Launch a SageMaker Training job by passing s3 path of the training data

tc_estimator.fit({“training”: training_dataset_s3_path}, logs=True)

Bạn có thể xem các số liệu hiệu suất như tổn thất đào tạo và độ chính xác/mất mát xác thực thông qua Amazon CloudWatch trong khi đào tạo. Bạn cũng có thể tìm nạp các số liệu này và phân tích chúng bằng TrainingJobAnalytics:

df = TrainingJobAnalytics(training_job_name=training_job_name).dataframe() #It will produce a dataframe with different metrics

df.head(10)

Biểu đồ sau đây hiển thị các số liệu khác nhau được thu thập từ nhật ký CloudWatch bằng TrainingJobAnalytics.

Để biết thêm thông tin về cách sử dụng thuật toán phân loại văn bản SageMaker Hugging Face mới để học chuyển trên tập dữ liệu tùy chỉnh, hãy triển khai mô hình tinh chỉnh, chạy suy luận trên mô hình đã triển khai và triển khai mô hình được đào tạo trước như không cần tinh chỉnh trước điều chỉnh trên tập dữ liệu tùy chỉnh, hãy xem sổ ghi chép ví dụ sau.

Tinh chỉnh mô hình bằng cách điều chỉnh mô hình tự động

Điều chỉnh mô hình tự động (ATM) của SageMaker, còn được gọi là điều chỉnh hyperparameters, tìm phiên bản tốt nhất của mô hình bằng cách chạy nhiều công việc đào tạo trên tập dữ liệu của bạn bằng thuật toán và phạm vi hyperparameters mà bạn chỉ định. Sau đó, nó chọn các giá trị hyperparameters dẫn đến mô hình hoạt động tốt nhất, được đo bằng số liệu bạn chọn. Trong đoạn mã sau, bạn sử dụng đối tượng HyperparameterTuner để tương tác với các API điều chỉnh hyperparameters SageMaker:

from sagemaker.tuner import ContinuousParameter

# Define objective metric based on which the best model will be selected.

amt_metric_definitions = {

“metrics”: [{“Name”: “val_accuracy”, “Regex”: “‘eval_accuracy’: ([0-9\\.]+)”}],

“type”: “Maximize”,

}

# You can select from the hyperparameters supported by the model, and configure ranges of values to be searched for training the optimal model.(https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html)

hyperparameter_ranges = {

“learning_rate”: ContinuousParameter(0.00001, 0.0001, scaling_type=”Logarithmic”)

}

# Increase the total number of training jobs run by AMT, for increased accuracy (and training time).

max_jobs = 6

# Change parallel training jobs run by AMT to reduce total training time, constrained by your account limits.

# if max_jobs=max_parallel_jobs then Bayesian search turns to Random.

max_parallel_jobs = 2

Sau khi đã xác định các đối số cho đối tượng HyperparameterTuner, bạn chuyển cho nó Công cụ ước tính và bắt đầu đào tạo. Điều này sẽ tìm thấy mô hình hoạt động tốt nhất.

Thực hiện suy luận hàng loạt với thuật toán phân loại văn bản HuggingFace

Nếu mục tiêu của suy luận là tạo ra các dự đoán từ một mô hình được đào tạo trên một tập dữ liệu lớn trong đó việc giảm thiểu độ trễ không phải là vấn đề đáng lo ngại thì chức năng suy luận hàng loạt có thể đơn giản nhất, có khả năng mở rộng hơn và phù hợp hơn.

Suy luận hàng loạt rất hữu ích trong các tình huống sau:

  • Xử lý trước tập dữ liệu để loại bỏ nhiễu hoặc sai lệch cản trở quá trình đào tạo hoặc suy luận từ tập dữ liệu của bạn
  • Lấy suy luận từ các tập dữ liệu lớn
  • Chạy suy luận khi bạn không cần điểm cuối liên tục
  • Liên kết các bản ghi đầu vào với các suy luận để hỗ trợ việc giải thích kết quả

Để chạy suy luận hàng loạt trong trường hợp sử dụng này, trước tiên bạn phải tải xuống tập dữ liệu SST2 cục bộ. Xóa nhãn lớp khỏi nó và tải nó lên Amazon S3 để suy luận hàng loạt. Bạn tạo đối tượng của lớp Model mà không cung cấp điểm cuối và tạo đối tượng biến áp hàng loạt từ nó. Bạn sử dụng đối tượng này để cung cấp các dự đoán hàng loạt về dữ liệu đầu vào. Xem đoạn mã sau:

batch_transformer = model.transformer(

instance_count=1,

instance_type=inference_instance_type,

output_path=output_path,

assemble_with=”Line”,

accept=”text/csv”

)

batch_transformer.transform(

input_path, content_type=”text/csv”, split_type=”Line”

)

batch_transformer.wait()

Sau khi chạy suy luận theo lô, bạn có thể so sánh độ chính xác của dự đoán trên tập dữ liệu SST2.

Phần kết luận

Trong bài đăng này, chúng ta đã thảo luận về thuật toán phân loại văn bản SageMaker Hugging Face. Chúng tôi đã cung cấp mã ví dụ để thực hiện học chuyển trên tập dữ liệu tùy chỉnh bằng cách sử dụng mô hình được đào tạo trước trong mạng riêng bằng thuật toán này. Chúng tôi cũng cung cấp chức năng để sử dụng bất kỳ mô hình phân loại văn bản hoặc HuggingFace nào cho việc học suy luận và chuyển giao. Cuối cùng, chúng tôi đã sử dụng suy luận hàng loạt để chạy suy luận trên các tập dữ liệu lớn. Để biết thêm thông tin, hãy xem sổ ghi chép mẫu.

Giới thiệu về tác giả

Hemant Singh là Nhà khoa học ứng dụng có kinh nghiệm về Amazon SageMaker JumpStart. Anh có bằng thạc sĩ tại Viện Khoa học Toán học Courant và B.Tech từ IIT Delhi. Anh ấy có kinh nghiệm làm việc với nhiều vấn đề về học máy trong lĩnh vực xử lý ngôn ngữ tự nhiên, thị giác máy tính và phân tích chuỗi thời gian.

Rachna Chadha là Kiến trúc sư giải pháp chính AI/ML về Tài khoản chiến lược tại AWS. Rachna là một người lạc quan, tin rằng việc sử dụng AI có đạo đức và có trách nhiệm có thể cải thiện xã hội trong tương lai và mang lại sự thịnh vượng về kinh tế và xã hội. Trong thời gian rảnh rỗi, Rachna thích dành thời gian cho gia đình, đi bộ đường dài và nghe nhạc

Tiến sĩ Ashish Khetan là Nhà khoa học ứng dụng cấp cao với các thuật toán tích hợp của Amazon SageMaker và giúp phát triển các thuật toán học máy. Ông lấy bằng Tiến sĩ tại Đại học Illinois Urbana-Champaign. Ông là nhà nghiên cứu tích cực về học máy và suy luận thống kê, đồng thời đã xuất bản nhiều bài báo trong các hội nghị NeurIPS, ICML, ICLR, JMLR, ACL và EMNLP.