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

با استفاده از محفظه‌های Hugging Face Amazon SageMaker که اسکریپت خودتان را می‌آورد، یک مدل خلاصه‌کننده را دقیق تنظیم و اجرا کنید.

تاریخ:

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

سال گذشته، AWS یک را اعلام کرد مشارکت با در آغوش کشیدن صورت برای کمک به تولید سریع‌تر مدل‌های پردازش زبان طبیعی (NLP). Hugging Face یک جامعه هوش مصنوعی منبع باز است که بر NLP متمرکز شده است. کتابخانه مبتنی بر پایتون آنها (ترانسفورماتور) ابزارهایی را برای استفاده آسان از معماری های پیشرفته ترانسفورماتور مانند BERT، RoBERTa و GPT فراهم می کند. می‌توانید این مدل‌ها را برای انواع وظایف NLP، مانند طبقه‌بندی متن، استخراج اطلاعات و پاسخ‌گویی به سؤال، اعمال کنید. دیگران.

آمازون SageMaker یک سرویس کاملاً مدیریت شده است که به توسعه دهندگان و دانشمندان داده توانایی ساخت، آموزش و استقرار سریع مدل های یادگیری ماشین (ML) را می دهد. SageMaker بار سنگین را از هر مرحله از فرآیند ML حذف می کند و توسعه مدل های با کیفیت بالا را آسان تر می کند. SageMaker Python SDK APIها و کانتینرهای منبع باز را برای آموزش و استقرار مدل ها در SageMaker با استفاده از چندین چارچوب مختلف ML و یادگیری عمیق ارائه می دهد.

ادغام Hugging Face با SageMaker به شما این امکان را می دهد که مدل های Hugging Face را در مقیاس در موارد استفاده خاص دامنه خود بسازید.

در این پست، نمونه‌ای از نحوه ساخت و استقرار خلاصه‌کننده متن Hugging Face سفارشی در SageMaker را به شما آموزش می‌دهیم. ما از Pegasus [1] برای این منظور استفاده می کنیم، اولین مدل مبتنی بر ترانسفورماتور که به طور خاص بر روی یک هدف طراحی شده برای خلاصه سازی متن انتزاعی از قبل آموزش داده شده است. BERT از قبل در مورد پنهان کردن کلمات تصادفی در یک جمله آموزش دیده است. در مقابل، در طول آموزش پگاسوس، جملات از یک سند ورودی پوشانده می شوند. سپس مدل جملات گمشده را به عنوان یک توالی خروجی واحد با استفاده از تمام جملات بدون نقاب به عنوان زمینه تولید می کند و در نتیجه یک خلاصه اجرایی از سند ایجاد می کند.

به لطف انعطاف پذیری کتابخانه HuggingFace، می توانید به راحتی کد نشان داده شده در این پست را برای انواع دیگر مدل های ترانسفورماتور مانند t5، BART و غیره تطبیق دهید.

مجموعه داده های خود را برای تنظیم دقیق مدل Hagging Face بارگیری کنید

برای بارگذاری یک مجموعه داده سفارشی از یک فایل CSV، از load_dataset روش از بسته ترانسفورماتور. با استفاده از datasets.Dataset.map تابع. map تابع روی مجموعه داده بارگذاری شده تکرار می شود و تابع tokenize را برای هر مثال اعمال می کند. سپس مجموعه داده توکن شده می تواند برای تنظیم دقیق مدل به مربی ارسال شود. کد زیر را ببینید:

# Python
def tokenize(batch):
    tokenized_input = tokenizer(batch[args.input_column], padding='max_length', truncation=True, max_length=args.max_source)
    tokenized_target = tokenizer(batch[args.target_column], padding='max_length', truncation=True, max_length=args.max_target)
    tokenized_input['target'] = tokenized_target['input_ids']

    return tokenized_input
    

def load_and_tokenize_dataset(data_dir):
    for file in os.listdir(data_dir):
        dataset = load_dataset("csv", data_files=os.path.join(data_dir, file), split='train')
    tokenized_dataset = dataset.map(lambda batch: tokenize(batch), batched=True, batch_size=512)
    tokenized_dataset.set_format('numpy', columns=['input_ids', 'attention_mask', 'labels'])
    
    return tokenized_dataset

اسکریپت آموزشی خود را برای برآوردگر Hugging Face SageMaker بسازید

همانطور که در پست توضیح داده شده است AWS و Hugging Face برای ساده‌سازی و تسریع پذیرش مدل‌های پردازش زبان طبیعی با یکدیگر همکاری می‌کنند.، آموزش مدل صورت در آغوش گرفته در SageMaker هرگز آسانتر نبوده است. ما می توانیم این کار را با استفاده از تخمینگر Hugging Face از SageMaker SDK.

قطعه کد زیر Pegasus را در مجموعه داده ما به خوبی تنظیم می کند. شما همچنین می توانید بسیاری را پیدا کنید نمونه دفترچه یادداشت که شما را از طریق تنظیم دقیق انواع مدل ها، که مستقیماً در مخزن ترانسفورماتور GitHub در دسترس هستند، راهنمایی می کند. برای فعال کردن آموزش توزیع شده، می توانیم از کتابخانه موازی داده ها در SageMaker، که در HuggingFace Trainer API تعبیه شده است. برای فعال کردن موازی سازی داده ها، باید آن را تعریف کنیم distribution پارامتر در برآوردگر صورت در آغوش گرفتن ما.

# Python
from sagemaker.huggingface import HuggingFace
# configuration for running training on smdistributed Data Parallel
distribution = {'smdistributed':{'dataparallel':{ 'enabled': True }}}
huggingface_estimator = HuggingFace(entry_point='train.py',
                                    source_dir='code',
                                    base_job_name='huggingface-pegasus',
                                    instance_type= 'ml.g4dn.16xlarge',
                                    instance_count=1,
                                    transformers_version='4.6',
                                    pytorch_version='1.7',
                                    py_version='py36',
                                    output_path=output_path,
                                    role=role,
                                    hyperparameters = {
                                        'model_name': 'google/pegasus-xsum',
                                        'epoch': 10,
                                        'per_device_train_batch_size': 2
                                    },
                                    distribution=distribution)
huggingface_estimator.fit({'train': training_input_path, 'validation': validation_input_path, 'test': test_input_path})

حداکثر اندازه دسته آموزشی که می توانید پیکربندی کنید به اندازه مدل و حافظه GPU نمونه مورد استفاده بستگی دارد. اگر آموزش توزیع شده SageMaker فعال باشد، اندازه کل دسته جمع هر دسته ای است که در هر دستگاه/GPU توزیع شده است. اگر از ml.g4dn.16xlarge با آموزش توزیع شده به جای نمونه ml.g4dn.xlarge استفاده کنیم، هشت برابر (8 GPU) به اندازه یک نمونه ml.g4dn.xlarge (1 GPU) حافظه داریم. اندازه دسته در هر دستگاه ثابت می ماند، اما هشت دستگاه به طور موازی در حال آموزش هستند.

طبق معمول با SageMaker، a ایجاد می کنیم train.py اسکریپت برای استفاده با حالت اسکریپت و عبور ابرپارامترها برای آموزش. قطعه کد زیر برای Pegasus مدل را بارگذاری می کند و با استفاده از Transformers آن را آموزش می دهد Trainer کلاس:

# Python
from transformers import (
    AutoModelForSeq2SeqLM,
    AutoTokenizer,
    Seq2SeqTrainer,
    Seq2seqTrainingArguments
)

model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)
    
training_args = Seq2seqTrainingArguments(
    output_dir=args.model_dir,
    num_train_epochs=args.epoch,
    per_device_train_batch_size=args.train_batch_size,
    per_device_eval_batch_size=args.eval_batch_size,
    warmup_steps=args.warmup_steps,
    weight_decay=args.weight_decay,
    logging_dir=f"{args.output_data_dir}/logs",
    logging_strategy='epoch',
    evaluation_strategy='epoch',
    saving_strategy='epoch',
    adafactor=True,
    do_train=True,
    do_eval=True,
    do_predict=True,
    save_total_limit = 3,
    load_best_model_at_end=True,
    metric_for_best_model='eval_loss'
    # With the goal to deploy the best checkpoint to production
    # it is important to set load_best_model_at_end=True,
    # this makes sure that the last model is saved at the root
    # of the model_dir” directory
)
    
trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset['train'],
    eval_dataset=dataset['validation']
)

trainer.train()
trainer.save_model()

# Get rid of unused checkpoints inside the container to limit the model.tar.gz size
os.system(f"rm -rf {args.model_dir}/checkpoint-*/")

کد کامل در دسترس است GitHub.

مدل آموزش دیده Hugging Face را در SageMaker مستقر کنید

دوستان ما در Hugging Face به لطف SageMaker Hugging Face Inference Toolkit. شما می توانید به سادگی با تنظیم متغیر محیطی، مدل آموزش دیده قبلی را مستقیماً مستقر کنید "HF_TASK":"summarization" (برای دستورالعمل، نگاه کنید مدل های پگاسوس) انتخاب کنید گسترش، و سپس انتخاب کنید آمازون SageMaker، بدون نیاز به نوشتن اسکریپت استنتاج.

با این حال، اگر به روش خاصی برای تولید یا پس‌فرایند پیش‌بینی نیاز دارید، برای مثال ایجاد چند پیشنهاد خلاصه بر اساس فهرستی از پارامترهای مختلف تولید متن، نوشتن اسکریپت استنتاج خود می‌تواند مفید و نسبتاً ساده باشد:

# Python
# inference.py script

import os
import json
import torch
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

def model_fn(model_dir):
    # Create the model and tokenizer and load weights
    # from the previous training Job, passed here through "model_dir"
    # that is reflected in HuggingFaceModel "model_data"
    tokenizer = AutoTokenizer.from_pretrained(model_dir)
    model = AutoModelForSeq2SeqLM.from_pretrained(model_dir).to(device).eval()
    
    model_dict = {'model':model, 'tokenizer':tokenizer}
    
    return model_dict
        

def predict_fn(input_data, model_dict):
    # Return predictions/generated summaries
    # using the loaded model and tokenizer on input_data
    text = input_data.pop('inputs')
    parameters_list = input_data.pop('parameters_list', None)
    
    tokenizer = model_dict['tokenizer']
    model = model_dict['model']

    # Parameters may or may not be passed    
    input_ids = tokenizer(text, truncation=True, padding='longest', return_tensors="pt").input_ids.to(device)
    
    if parameters_list:
        predictions = []
        for parameters in parameters_list:
            output = model.generate(input_ids, **parameters)
            predictions.append(tokenizer.batch_decode(output, skip_special_tokens=True))
    else:
        output = model.generate(input_ids)
        predictions = tokenizer.batch_decode(output, skip_special_tokens=True)
    
    return predictions
    
    
def input_fn(request_body, request_content_type):
    # Transform the input request to a dictionary
    request = json.loads(request_body)
    return request

همانطور که در کد قبلی نشان داده شده است، چنین اسکریپت استنتاجی برای HuggingFace در SageMaker فقط به توابع الگوی زیر نیاز دارد:

  • model_fn() – محتوای آنچه را که در پایان کار آموزشی ذخیره شده است در داخل می خواند SM_MODEL_DIR، یا از دایرکتوری وزن مدل موجود که به عنوان فایل tar.gz در آن ذخیره شده است سرویس ذخیره سازی ساده آمازون (Amazon S3). برای بارگذاری مدل آموزش دیده و توکنایزر مرتبط استفاده می شود.
  • input_fn() - داده های دریافتی از درخواستی که به نقطه پایانی ارسال شده است را قالب بندی می کند.
  • predict_fn() – خروجی را فراخوانی می کند model_fn() (مدل و نشانه ساز) برای اجرای استنتاج بر روی خروجی input_fn() (داده های فرمت شده).

به صورت اختیاری، می توانید یک output_fn() تابع برای قالب بندی استنتاج، با استفاده از خروجی predict_fn()، که در این پست نشان ندادیم.

سپس می توانیم مدل آموزش دیده Hugging Face را به همراه اسکریپت استنتاج مرتبط با SageMaker با استفاده از مدل SageMaker صورت در آغوش گرفته کلاس:

# Python
from sagemaker.huggingface import HuggingFaceModel

model = HuggingFaceModel(model_data=huggingface_estimator.model_data,
                     role=role,
                     framework_version='1.7',
                     py_version='py36',
                     entry_point='inference.py',
                     source_dir='code')
                     
predictor = model.deploy(initial_instance_count=1,
                         instance_type='ml.g4dn.xlarge'
                         )

مدل مستقر شده را تست کنید

برای این نسخه ی نمایشی، ما مدل را بر روی آن آموزش دادیم مجموعه داده‌های بررسی لباس‌های تجارت الکترونیک زنان، که شامل بررسی مقالات لباس (که ما آنها را به عنوان متن ورودی در نظر می گیریم) و عناوین مرتبط با آنها (که به عنوان خلاصه در نظر می گیریم) است. پس از حذف مقالات با عنوان مفقود، مجموعه داده شامل 19,675 بررسی است. تنظیم دقیق مدل Pegasus در مجموعه آموزشی حاوی 70 درصد از آن مقالات برای پنج دوره تقریباً 3.5 ساعت در یک نمونه ml.p3.16xlarge طول کشید.

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

# Python
Review Text
"I ordered this sweater in green in petite large. The color and knit is beautiful and the shoulders and body fit comfortably; however, the sleeves were very long for a petite. I roll them, and it looks okay but would have rather had a normal petite length sleeve."

Original Title
"Long sleeves"

Rating
3

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

# Python
inputs = {
    "inputs":[
"I ordered this sweater in green in petite large. The color and knit is   beautiful and the shoulders and body fit comfortably; however, the sleeves were very long for a petite. I roll them, and it looks okay but would have rather had a normal petite length sleeve."
    ],

    "parameters_list":[
        {
            "length_penalty":2
        },
	{
            "length_penalty":1
        },
	{
            "length_penalty":0.6
        },
        {
            "length_penalty":0.4
        }
    ]

result = predictor.predict(inputs)
print(result)

[
    ["Beautiful color and knit but sleeves are very long for a petite"],
    ["Beautiful sweater, but sleeves are too long for a petite"],
    ["Cute, but sleeves are long"],
    ["Very long sleeves"]
]

کدام خلاصه را ترجیح می دهید؟ اولین عنوان تولید شده تمام حقایق مهم در مورد بررسی را با یک چهارم تعداد کلمات به تصویر می کشد. در مقابل، آخرین مورد فقط از سه کلمه (کمتر از 1/10 طول بررسی اصلی) برای تمرکز بر مهمترین ویژگی ژاکت استفاده می کند.

نتیجه

می‌توانید یک خلاصه‌کننده متن را روی مجموعه داده‌های سفارشی خود تنظیم کنید و آن را برای تولید در SageMaker با این مثال ساده در دسترس قرار دهید GitHub. اضافی نمونه دفترچه یادداشت برای آموزش و استقرار مدل های Hugging Face در SageMaker نیز موجود است.

مثل همیشه، AWS از بازخورد استقبال می کند. لطفا هرگونه نظر یا سوالی را مطرح کنید.

منابع

[1] پگاسوس: پیش تمرینی با جملات شکاف استخراج شده برای خلاصه سازی انتزاعی


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

ویکتور مالسویچ یک مهندس یادگیری ماشین با خدمات حرفه ای AWS، علاقه مند به پردازش زبان طبیعی و MLO ها است. او با مشتریان همکاری می کند تا مدل های یادگیری عمیق چالش برانگیز را در AWS تولید کند. او در اوقات فراغت خود از اشتراک یک لیوان شراب قرمز و مقداری پنیر با دوستانش لذت می برد.

آمنه نجمی یک دانشمند داده با خدمات حرفه ای AWS است. او مشتاق کمک به مشتریان برای نوآوری با فناوری‌های کلان داده و هوش مصنوعی است تا از ارزش تجاری و بینش داده‌ها بهره ببرند. او در اوقات فراغت خود از باغبانی و سفر به مکان های جدید لذت می برد.

نقطه_img

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

نقطه_img

چت با ما

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