هوش داده افلاطون
جستجوی عمودی و هوش مصنوعی

خلاصه سازی متن با Amazon SageMaker و Hugging Face

تاریخ:

در این پست به شما نشان می‌دهیم که چگونه یکی از پردانلودترین مدل‌های پیش‌آموزش شده Hagging Face را که برای خلاصه‌سازی متن استفاده می‌شود، پیاده‌سازی کنید. DistilBART-CNN-12-6، در یک نوت بوک Jupyter با استفاده از آمازون SageMaker و SageMaker Hugging Face Inference Toolkit. بر اساس مراحل نشان داده شده در این پست، می توانید خلاصه کردن متن را امتحان کنید ویکی متن-2 مجموعه داده مدیریت شده توسط fast.ai، موجود در رجیستری داده های باز در AWS.

حجم داده های جهانی در مقیاس زتابایتی در حال افزایش است زیرا شرکت ها و مصرف کنندگان استفاده خود را از محصولات دیجیتال و خدمات آنلاین گسترش می دهند. برای درک بهتر این داده‌های رو به رشد، تکنیک‌های پردازش زبان طبیعی (NLP) یادگیری ماشین (ML) برای تجزیه و تحلیل متن برای رسیدگی به موارد استفاده شامل خلاصه‌سازی متن، تشخیص موجودیت، طبقه‌بندی، ترجمه و موارد دیگر تکامل یافته‌اند. AWS از قبل آموزش دیده را ارائه می دهد خدمات هوش مصنوعی AWS که می تواند با استفاده از تماس های API در برنامه ها ادغام شود و نیازی به تجربه ML ندارد. مثلا، درک آمازون می تواند وظایف NLP مانند تشخیص موجودیت سفارشی، تجزیه و تحلیل احساسات، استخراج عبارت کلیدی، مدل سازی موضوع و موارد دیگر را برای جمع آوری بینش از متن انجام دهد. می تواند اجرا کند تجزیه و تحلیل متن در طیف گسترده ای از زبان ها برای ویژگی های مختلف آن

خلاصه سازی متن یک تکنیک مفید برای درک مقادیر زیادی از داده های متنی است زیرا زیرمجموعه ای از اطلاعات معنادار متنی را از اسناد منبع ایجاد می کند. می‌توانید این تکنیک NLP را برای اسناد و مقالات متنی با فرم طولانی‌تر اعمال کنید، که مصرف سریع‌تر و نمایه‌سازی اسناد مؤثرتر را ممکن می‌سازد، برای مثال برای خلاصه کردن یادداشت‌های تماس از جلسات.

در آغوش کشیدن صورت یک کتابخانه منبع باز محبوب برای NLP با بیش از 49,000 مدل از پیش آموزش دیده در بیش از 185 زبان با پشتیبانی از چارچوب های مختلف است. AWS و Hugging Face دارای یک مشارکت که امکان ادغام یکپارچه را از طریق SageMaker با مجموعه ای از ظروف یادگیری عمیق (DLC) AWS برای آموزش و استنتاج در PyTorch یا TensorFlow و برآوردگرها و پیش بینی کننده های Hugging Face برای SageMaker Python SDK فراهم می کند. این قابلیت‌ها در SageMaker به توسعه‌دهندگان و دانشمندان داده کمک می‌کند تا با NLP در AWS راحت‌تر شروع کنند. پردازش متون با ترانسفورماتورها در چارچوب‌های یادگیری عمیق مانند PyTorch معمولاً یک کار پیچیده و زمان‌بر برای دانشمندان داده است که اغلب منجر به ناامیدی و عدم کارایی هنگام توسعه پروژه‌های NLP می‌شود. ظهور جوامع هوش مصنوعی مانند Hugging Face، همراه با قدرت خدمات ML در فضای ابری مانند SageMaker، توسعه این وظایف پردازش متن را تسریع و ساده می کند. SageMaker به شما در ساخت، آموزش، استقرار و عملیاتی کردن مدل‌های Hugging Face کمک می‌کند.

خلاصه سازی متن

می‌توانید از خلاصه‌سازی متن برای شناسایی جملات کلیدی در یک سند یا شناسایی جملات کلیدی در چندین سند استفاده کنید. خلاصه سازی متن می تواند دو نوع خلاصه تولید کند: استخراجی و انتزاعی. خلاصه‌های استخراجی حاوی هیچ متنی نیستند که توسط ماشین تولید می‌شوند و مجموعه‌ای از جملات مهم هستند که از سند ورودی انتخاب شده‌اند. خلاصه‌های انتزاعی حاوی عبارات و جملات قابل خواندن برای انسان هستند که توسط مدل خلاصه‌سازی متن تولید شده‌اند. اکثر سیستم‌های خلاصه‌سازی متن بر اساس خلاصه‌سازی استخراجی هستند، زیرا دستیابی به خلاصه‌سازی متن انتزاعی دقیق دشوار است.

Hugging Face دارای بیش از 400 پیشرفته از پیش آموزش دیده است مدل های خلاصه سازی متن موجود است، اجرای ترکیب های مختلف تکنیک های NLP. این مدل‌ها بر روی مجموعه داده‌های مختلف آموزش داده می‌شوند که توسط شرکت‌های فناوری و اعضای جامعه Hugging Face آپلود و نگهداری می‌شوند. می‌توانید مدل‌ها را بر اساس بیشترین بارگیری یا دوست‌داشتن فیلتر کنید و در هنگام استفاده مستقیماً آنها را بارگیری کنید خلاصه API ترانسفورماتور Hugging Face. ترانسفورماتور Hugging Face فرآیند اجرای NLP را ساده می کند به طوری که مدل های NLP با کارایی بالا را می توان برای ارائه خلاصه های متن، بدون نیاز به دانش گسترده عملیات ML، به خوبی تنظیم کرد.

مدل‌های خلاصه‌سازی متن Hugging Face در AWS

SageMaker به تحلیلگران کسب و کار، دانشمندان داده و مهندسان MLOps ابزارهای انتخابی برای طراحی و اجرای بارهای کاری ML در AWS ارائه می دهد. این ابزارها پیاده سازی و آزمایش سریعتر مدل های ML را برای دستیابی به نتایج بهینه در اختیار شما قرار می دهند.

از SageMaker Hugging Face Inference Toolkit، یک کتابخانه منبع باز، ما سه روش مختلف برای پیاده سازی و میزبانی مدل های خلاصه سازی متن Hugging Face را با استفاده از یک نوت بوک Jupyter بیان می کنیم:

  • خط لوله خلاصه سازی صورت در آغوش گرفتن - ایجاد یک خط لوله خلاصه سازی صورت در آغوش گرفتن با استفاده از "summarizationشناسه کار برای استفاده از یک مدل خلاصه سازی متن پیش فرض برای استنتاج در نوت بوک Jupyter. این خطوط لوله کد پیچیده را انتزاعی می‌کنند و به پزشکان مبتدی ML یک API ساده برای اجرای سریع خلاصه‌سازی متن بدون پیکربندی نقطه پایانی استنتاج ارائه می‌دهند. خط لوله همچنین به پزشک ML این امکان را می دهد که یک مدل از پیش آموزش دیده خاص و توکنایزر مربوط به آن را انتخاب کند. Tokenizers با تقسیم متن به کلمات یا زیرکلمه‌ها، متن را برای آماده شدن به عنوان ورودی برای مدل آماده می‌کنند، که سپس از طریق جدول جستجو به ID تبدیل می‌شوند. برای سادگی، قطعه کد زیر حالت پیش فرض را هنگام استفاده از خطوط لوله ارائه می کند. این DistilBART-CNN-12-6 مدل یکی از پر دانلودترین مدل های خلاصه سازی در Hugging Face می باشد و می باشد مدل پیش فرض خط لوله خلاصه سازی. خط آخر مدل از پیش آموزش دیده را فراخوانی می کند تا با توجه به دو آرگومان ارائه شده، خلاصه ای برای متن ارسال شده به دست آورد.
    from transformers import pipeline
    
    summarizer = pipeline("summarization")
    summarizer("An apple a day, keeps the doctor away", min_length=5, max_length=20)

  • نقطه پایانی SageMaker با مدل از پیش آموزش دیده - یک نقطه پایانی SageMaker با یک مدل از پیش آموزش دیده از آن ایجاد کنید Hugging Face Model Hub و آن را در یک نقطه پایانی استنتاج، مانند نمونه ml.m5.xlarge در قطعه کد زیر مستقر کنید. این روش به پزشکان باتجربه ML اجازه می‌دهد تا به سرعت مدل‌های منبع باز خاص را انتخاب کنند، آن‌ها را دقیق تنظیم کنند، و مدل‌ها را بر روی نمونه‌های استنتاج با عملکرد بالا مستقر کنند.
    from sagemaker.huggingface import HuggingFaceModel
    from sagemaker import get_execution_role
    
    role = get_execution_role()
    
    # Hub Model configuration. https://huggingface.co/models
    hub = {
      'HF_MODEL_ID':'sshleifer/distilbart-cnn-12-6',
      'HF_TASK':'summarization'
    }
    
    # create Hugging Face Model Class
    huggingface_model = HuggingFaceModel(
        transformers_version='4.17.0',
        pytorch_version='1.10.2',
        py_version='py38',
        env=hub,
        role=role,
    )
    
    # deploy model to SageMaker Inference
    predictor = huggingface_model.deploy(initial_instance_count=1,instance_type="ml.m5.xlarge")

  • نقطه پایانی SageMaker با یک مدل آموزش دیده - یک نقطه پایانی مدل SageMaker با یک مدل آموزش دیده ذخیره شده در یک ایجاد کنید سرویس ذخیره سازی ساده آمازون (Amazon S3) را سطل کرده و در یک نقطه پایانی استنتاج قرار دهید. این روش به پزشکان باتجربه ML اجازه می دهد تا به سرعت مدل های ذخیره شده خود را در Amazon S3 بر روی نمونه های استنتاج با کارایی بالا مستقر کنند. خود مدل از Hugging Face دانلود و فشرده می شود و سپس می توان آن را در Amazon S3 بارگذاری کرد. این مرحله در قطعه کد زیر نشان داده شده است:
    from sagemaker.huggingface import HuggingFaceModel
    from sagemaker import get_execution_role
    
    role = get_execution_role()
    
    # create Hugging Face Model Class
    huggingface_model = HuggingFaceModel(
        transformers_version='4.17.0',
        pytorch_version='1.0.2',
        py_version='py38',
        model_data='s3://my-trained-model/artifacts/model.tar.gz',
        role=role,
    )
    
    # deploy model to SageMaker Inference
    predictor = huggingface_model.deploy(initial_instance_count=1,instance_type="ml.m5.xlarge")

AWS منابع متعددی برای کمک به شما در استقرار بارهای کاری ML در دسترس دارد. این لنز یادگیری ماشینی از چارچوب AWS به خوبی معماری شده است بهترین شیوه های بار کاری ML، از جمله بهینه سازی منابع و کاهش هزینه را توصیه می کند. این اصول طراحی پیشنهادی تضمین می‌کند که بارهای کاری ML با معماری خوب در AWS برای تولید مستقر می‌شوند. توصیه کننده استنباط آمازون SageMaker به شما کمک می کند نمونه مناسب را برای استقرار مدل های ML خود با عملکرد و هزینه استنتاج بهینه انتخاب کنید. Inference Recommender با خودکار کردن تست بار و بهینه‌سازی عملکرد مدل در نمونه‌های ML، استقرار مدل را سرعت می‌بخشد و زمان ورود به بازار را کاهش می‌دهد.

در بخش‌های بعدی، نحوه بارگذاری یک مدل آموزش‌دیده از یک سطل S3 و استقرار آن در یک نمونه استنتاج مناسب را نشان می‌دهیم.

پیش نیازها

برای این راهنما، شما باید پیش نیازهای زیر را داشته باشید:

مدل Hugging Face را در SageMaker برای استنتاج خلاصه سازی متن بارگیری کنید

برای دانلود مدل از پیش آموزش خلاصه نویسی متن Hagging Face از کد زیر استفاده کنید DistilBART-CNN-12-6 و توکنایزر آن، و آنها را به صورت محلی در SageMaker در فهرست نوت بوک Jupyter خود ذخیره کنید:

from transformers import BartTokenizer, BartForConditionalGeneration, BartConfig

PRE_TRAINED_MODEL_NAME='sshleifer/distilbart-cnn-12-6'

model = BartForConditionalGeneration.from_pretrained(PRE_TRAINED_MODEL_NAME, cache_dir=hf_cache_dir)
model.save_pretrained('./models/bart_model/')

tokenizer = BartTokenizer.from_pretrained(PRE_TRAINED_MODEL_NAME)
tokenizer.save_pretrained('./models/bart_tokenizer/')

مدل خلاصه سازی متن ذخیره شده و توکنایزر آن را در قالب tar.gz فشرده کنید و آرتیفکت مدل فشرده شده را در یک سطل S3 بارگذاری کنید:

! tar -C models/ -czf model.tar.gz code/ bart_tokenizer/ bart_model/
from sagemaker.s3 import S3Uploader

file_key = 'model.tar.gz'
model_artifact = S3Uploader.upload(file_key,'s3://my-trained-model/artifacts')

یک انتخاب کنید استنتاج تصویر ظرف داکر برای انجام استنتاج خلاصه سازی متن. سیستم عامل لینوکس، چارچوب PyTorch و نسخه Hugging Face Transformer را تعریف کنید و ابر محاسبه الاستیک آمازون (Amazon EC2) نوع نمونه برای اجرای ظرف.

تصویر Docker در دسترس است رجیستری ظروف الاستیک آمازون (Amazon ECR) از همان حساب AWS، و پیوند آن تصویر کانتینر به عنوان یک URI برگردانده می شود.

from sagemaker.image_uris import retrieve

deploy_instance_type = 'ml.m5.xlarge'

pytorch_inference_image_uri = retrieve('huggingface',
                                       region=region,
                                       version='4.6.1',
                                       instance_type=deploy_instance_type,
                                       base_framework_version='pytorch1.8.1',
                                       image_scope='inference')

مدل خلاصه‌سازی متن را برای استقرار تصویر ظرف انتخابی که استنتاج انجام می‌دهد، تعریف کنید. در قطعه کد زیر، مدل فشرده آپلود شده در آمازون S3 مستقر شده است:

from sagemaker.huggingface.model import HuggingFaceModel
from sagemaker import get_execution_role

role = get_execution_role()

# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
   model_data="s3://my-trained-model/artifacts/model.tar.gz", # path to your trained sagemaker model
   image_uri=pytorch_inference_image_uri,
   role=role, # iam role with permissions to create an Endpoint
   transformers_version="4.6.1", # transformers version used
)

# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
   initial_instance_count=1, 
   instance_type="ml.m5.xlarge"
)

مدل خلاصه سازی متن مستقر شده را روی یک ورودی نمونه آزمایش کنید:

# example request, you need to define "inputs"
data = {
   "text": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}

# request
predictor.predict(data)

از Inference Recommender برای ارزیابی نمونه EC2 بهینه برای کار استنتاج استفاده کنید

در مرحله بعد، چندین نمونه از متن ورودی را با فرمت JSON ایجاد کنید و آنها را در یک فایل payload فشرده کنید. این نمونه های محموله توسط Inference Recommender برای مقایسه عملکرد استنتاج بین انواع مختلف نمونه EC2 استفاده می شود. هر یک از بارهای نمونه باید با قالب JSON نشان داده شده در قبل مطابقت داشته باشد. می توانید نمونه هایی را از ویکی متن-2 مجموعه داده مدیریت شده توسط fast.ai، موجود در رجیستری داده های باز در AWS.

آرتیفکت مدل خلاصه‌سازی متن فشرده و فایل بارگذاری نمونه فشرده را در سطل S3 بارگذاری کنید. ما مدل را در مرحله قبلی آپلود کردیم، اما برای وضوح، کدی را برای بارگذاری مجدد آن اضافه می‌کنیم:

bucket = sagemaker.Session().default_bucket()

prefix = "sagemaker/inference-recommender"

model_archive_name = "model.tar.gz"
payload_archive_name = "payload.tar.gz"

sample_payload_url = sagemaker.Session().upload_data(
    payload_archive_name, bucket=bucket, key_prefix=prefix + "/inference"
)
model_url = sagemaker.Session().upload_data(
    model_archive_name, bucket=bucket, key_prefix=prefix + "/model"
)

فهرست مدل‌های استاندارد ML موجود در SageMaker را در سراسر جهان مرور کنید باغ وحش های مدل رایجمانند NLP و بینایی کامپیوتری. یک مدل NLP را برای انجام استنتاج خلاصه سازی متن انتخاب کنید:

import boto3
import pandas as pd

inference_client = boto3.client("sagemaker", region)

list_model_metadata_response = inference_client.list_model_metadata()

domains = []
frameworks = []
framework_versions = []
tasks = []
models = []

for model_summary in list_model_metadata_response["ModelMetadataSummaries"]:
    domains.append(model_summary["Domain"])
    tasks.append(model_summary["Task"])
    models.append(model_summary["Model"])
    frameworks.append(model_summary["Framework"])
    framework_versions.append(model_summary["FrameworkVersion"])

data = {
    "Domain": domains,
    "Task": tasks,
    "Framework": frameworks,
    "FrameworkVersion": framework_versions,
    "Model": models,
}

df = pd.DataFrame(data)

pd.set_option("display.max_rows", None)
pd.set_option("display.max_columns", None)
pd.set_option("display.width", 1000)
pd.set_option("display.colheader_justify", "center")
pd.set_option("display.precision", 3)

display(df.sort_values(by=["Domain", "Task", "Framework", "FrameworkVersion"]))

مثال زیر از bert-base-cased مدل NLP ثبت مدل خلاصه سازی متن در رجیستری مدل SageMaker با دامنه، چارچوب و وظیفه‌ای که در مرحله قبل به درستی شناسایی شده است. پارامترهای این مثال در ابتدای قطعه کد زیر نشان داده شده است.

به محدوده انواع نمونه EC2 توجه کنید که توسط Inference Recommender در زیر ارزیابی می شود SupportedRealtimeInferenceInstanceTypes در کد زیر مطمئن شوید که محدودیت های سرویس برای حساب AWS اجازه استقرار این نوع گره های استنتاج را می دهد.

ml_domain = "NATURAL_LANGUAGE_PROCESSING"
ml_task = "FILL_MASK"
model_name = "bert-base-cased"
dlc_uri = pytorch_inference_image_uri
framework = 'PYTORCH'
framework_version='1.6.0'

inference_client = boto3.client("sagemaker", region)

model_package_group_name = uuid.uuid1()

model_pacakge_group_response = inference_client.create_model_package_group(
    ModelPackageGroupName=str(model_package_group_name), ModelPackageGroupDescription="description"
)

model_package_version_response = inference_client.create_model_package(
    ModelPackageGroupName=str(model_package_group_name),
    ModelPackageDescription="InferenceRecommenderDemo",
    Domain=ml_domain,
    Task=ml_task,
    SamplePayloadUrl=sample_payload_url,
    InferenceSpecification={
        "Containers": [
            {
                "ContainerHostname": "huggingface-pytorch",
                "Image": dlc_uri,
                "ModelDataUrl": model_url,
                "Framework": framework,
                "FrameworkVersion": framework_version,
                "NearestModelName": model_name,
                "Environment": {
                    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
                    "SAGEMAKER_PROGRAM": "inference.py",
                    "SAGEMAKER_REGION": region,
                    "SAGEMAKER_SUBMIT_DIRECTORY": model_url,
                },
            },
        ],
        "SupportedRealtimeInferenceInstanceTypes": [
            "ml.t2.xlarge",
            "ml.c5.xlarge",
            "ml.m5.xlarge",
            "ml.m5d.xlarge",
            "ml.r5.xlarge",
            "ml.inf1.xlarge",
        ],
        "SupportedContentTypes": [
            "application/json",
        ],
        "SupportedResponseMIMETypes": ["application/json"],
    },
)

یک کار پیش‌فرض Inference Recommender با استفاده از ModelPackageVersion ناشی از مرحله قبل این uuid کتابخانه پایتون برای ایجاد یک نام منحصر به فرد برای کار استفاده می شود.

from sagemaker import get_execution_role

client = boto3.client("sagemaker", region)

role = get_execution_role()
default_job = uuid.uuid1()
default_response = client.create_inference_recommendations_job(
    JobName=str(default_job),
    JobDescription="Job Description",
    JobType="Default",
    RoleArn=role,
    InputConfig={"ModelPackageVersionArn": model_package_version_response["ModelPackageArn"]},
)

با اجرای کد زیر می توانید وضعیت کار Inference Recommender را دریافت کنید:

inference_recommender_job = client.describe_inference_recommendations_job(
        JobName=str(default_job)
)

وقتی وضعیت شغلی است COMPLETED، تأخیر استنتاج، زمان اجرا و سایر معیارهای انواع نمونه EC2 ارزیابی شده توسط کار پیش فرض Inference Recommender را مقایسه کنید. نوع گره مناسب را بر اساس نیاز مورد استفاده خود انتخاب کنید.

data = [
    {**x["EndpointConfiguration"], **x["ModelConfiguration"], **x["Metrics"]}
    for x in inference_recommender_job["InferenceRecommendations"]
]
df = pd.DataFrame(data)
df.drop("VariantName", inplace=True, axis=1)
pd.set_option("max_colwidth", 400)
df.head()

نتیجه

SageMaker راه های متعددی را برای استفاده از مدل های صورت در آغوش گرفته ارائه می دهد. برای مثال های بیشتر، بررسی کنید AWS نمونه های GitHub. بسته به پیچیدگی مورد استفاده و نیاز به تنظیم دقیق مدل، می توانید روش بهینه را برای استفاده از این مدل ها انتخاب کنید. خطوط لوله Hugging Face می تواند نقطه شروع خوبی برای آزمایش سریع و انتخاب مدل های مناسب باشد. هنگامی که نیاز به سفارشی سازی و پارامترسازی مدل های انتخابی دارید، می توانید مدل ها را دانلود کرده و در نقاط پایانی استنتاج سفارشی شده مستقر کنید. برای تنظیم دقیق بیشتر مدل برای یک مورد خاص، باید پس از دانلود آن مدل را آموزش دهید.

مدل‌های NLP به طور کلی، از جمله مدل‌های خلاصه‌سازی متن، پس از آموزش بر روی مجموعه داده‌ای که برای مورد استفاده خاص است، عملکرد بهتری دارند. MLOPها و ویژگی‌های نظارت بر مدل SageMaker اطمینان حاصل می‌کنند که مدل مستقر شده به عملکرد مطابق انتظارات ادامه می‌دهد. در این پست، از Inference Recommender برای ارزیابی بهترین نوع نمونه مناسب برای استقرار مدل خلاصه سازی متن استفاده کردیم. این توصیه‌ها می‌توانند عملکرد و هزینه مورد استفاده ML شما را بهینه کنند.


درباره نویسنده

دکتر نضال البیروتی یک معمار ارشد راه حل در خدمات وب آمازون است که علاقه زیادی به راه حل های یادگیری ماشین دارد. نیدال بیش از 25 سال تجربه کار در انواع نقش های جهانی فناوری اطلاعات در سطوح و سطوح مختلف دارد. نیدال به عنوان یک مشاور قابل اعتماد برای بسیاری از مشتریان AWS عمل می کند تا سفر پذیرش ابری آنها را پشتیبانی و سرعت بخشد.

دارن کو یک معمار Solutions مستقر در لندن است. او به مشتریان SMB بریتانیا و ایرلند در زمینه معماری مجدد و نوآوری در فضای ابری توصیه می کند. دارن به برنامه های کاربردی ساخته شده با معماری های بدون سرور علاقه مند است و علاقه زیادی به حل چالش های پایداری با یادگیری ماشین دارد.

نقطه_img

جدیدترین اطلاعات

نقطه_img

چت با ما

سلام! چگونه می توانم به شما کمک کنم؟