قم بضبط ونشر نموذج الملخص باستخدام حاويات Hugging Face Amazon SageMaker التي تجلب النص الخاص بك

كان هناك العديد من التطورات الحديثة في مجال البرمجة اللغوية العصبية. تتمتع النماذج المدربة مسبقًا وخدمات البرمجة اللغوية العصبية المُدارة بالكامل بوصول ديمقراطي واعتماد البرمجة اللغوية العصبية. فهم الأمازون هي خدمة مُدارة بالكامل يمكنها أداء مهام البرمجة اللغوية العصبية مثل التعرف على الكيانات المخصصة ونمذجة الموضوع وتحليل المشاعر والمزيد لاستخراج الرؤى من البيانات دون الحاجة إلى أي خبرة سابقة في تعلم الآلة.

في العام الماضي ، أعلنت AWS عن إصدار شراكة مع وجه يعانق للمساعدة في إنتاج نماذج معالجة اللغة الطبيعية (NLP) بشكل أسرع. Hugging Face هو مجتمع ذكاء اصطناعي مفتوح المصدر ، يركز على البرمجة اللغوية العصبية. مكتبتهم المستندة إلى Python (ترانسفورمرس) يوفر أدوات لاستخدام بنيات المحولات الأكثر حداثة مثل BERT و RoBERTa و GPT بسهولة. يمكنك تطبيق هذه النماذج على مجموعة متنوعة من مهام البرمجة اللغوية العصبية ، مثل تصنيف النص واستخراج المعلومات والإجابة على الأسئلة ، من بين وغيرها.

الأمازون SageMaker هي خدمة مُدارة بالكامل توفر للمطورين وعلماء البيانات القدرة على إنشاء نماذج التعلم الآلي (ML) وتدريبها ونشرها بسرعة. يزيل SageMaker الرفع الثقيل من كل خطوة من خطوات عملية ML ، مما يجعل من السهل تطوير نماذج عالية الجودة. يوفر SageMaker Python SDK واجهات برمجة تطبيقات وحاويات مفتوحة المصدر لتدريب النماذج ونشرها على SageMaker ، باستخدام العديد من أطر عمل التعلم الآلي والتعلم العميق المختلفة.

يتيح لك تكامل Hugging Face مع SageMaker إنشاء نماذج Hugging Face على نطاق واسع في حالات الاستخدام الخاصة بالمجال الخاص بك.

في هذا المنشور ، نرشدك إلى مثال على كيفية إنشاء ونشر مُلخص نص Hugging Face مخصص على SageMaker. نستخدم Pegasus [1] لهذا الغرض ، النموذج الأول القائم على Transformer تم تدريبه مسبقًا بشكل خاص على هدف مصمم خصيصًا لتلخيص النص التجريدي. تم تدريب BERT مسبقًا على إخفاء الكلمات العشوائية في الجملة ؛ في المقابل ، أثناء التدريب المسبق لـ Pegasus ، يتم إخفاء الجمل من مستند الإدخال. يقوم النموذج بعد ذلك بإنشاء الجمل المفقودة كتسلسل إخراج منفرد باستخدام جميع الجمل غير المقنعة كسياق ، مما يؤدي إلى إنشاء ملخص تنفيذي للمستند كنتيجة لذلك.

بفضل مرونة مكتبة HuggingFace ، يمكنك بسهولة تكييف الكود الموضح في هذا المنشور لأنواع أخرى من نماذج المحولات ، مثل t5 و BART والمزيد.

قم بتحميل مجموعة البيانات الخاصة بك لضبط نموذج Hugging Face

لتحميل مجموعة بيانات مخصصة من ملف CSV ، نستخدم الامتداد load_dataset طريقة من حزمة المحولات. يمكننا تطبيق الترميز على مجموعة البيانات المحملة باستخدام ملف datasets.Dataset.map وظيفة. ال map تتكرر الدالة عبر مجموعة البيانات المحملة وتطبق وظيفة الرمز المميز على كل مثال. يمكن بعد ذلك تمرير مجموعة البيانات ذات الرموز المميزة إلى المدرب لضبط النموذج. انظر الكود التالي:

# 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 من سيج ميكر 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})

يعتمد الحد الأقصى لحجم دفعة التدريب التي يمكنك تكوينها على حجم النموذج وذاكرة وحدة معالجة الرسومات للمثيل المستخدم. إذا تم تمكين تدريب SageMaker الموزع ، فإن الحجم الإجمالي للدفعة هو مجموع كل دفعة يتم توزيعها عبر كل جهاز / وحدة معالجة رسومات. إذا استخدمنا ml.g4dn.16xlarge مع التدريب الموزع بدلاً من مثيل ml.g4dn.xlarge ، فلدينا ثمانية أضعاف (8 وحدات معالجة رسومات) أكبر قدر من الذاكرة مثل مثيل ml.g4dn.xlarge (1 GPU). يظل حجم الدُفعة لكل جهاز كما هو ، لكن ثمانية أجهزة تتدرب بشكل متوازٍ.

كالعادة مع SageMaker ، نقوم بإنشاء ملف 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 for Transformers أسهل من أي وقت مضى بفضل مجموعة أدوات استدلال الوجه المعانقة من SageMaker. يمكنك نشر النموذج الذي تم تدريبه مسبقًا بشكل مباشر عن طريق إعداد متغير البيئة "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 بتنسيق خدمة تخزين أمازون البسيطة (أمازون S3). يتم استخدامه لتحميل النموذج المدرب والمميزات المرتبطة به.
  • input_fn () - تنسيق البيانات الواردة من طلب تم إجراؤه إلى نقطة النهاية.
  • التنبؤ_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] PEGASUS: تدريب مسبق على جمل الفجوة المستخرجة للتلخيص الملخص


عن المؤلفين

قم بضبط ونشر نموذج ملخّص باستخدام حاويات Hugging Face Amazon SageMaker التي تجلب النص الخاص بك PlatoBlockchain Data Intelligence. البحث العمودي. عاي. فيكتور ماليسيفيتش مهندس تعلم الآلة مع خدمات AWS الاحترافية ، شغوف بمعالجة اللغات الطبيعية و MLOps. إنه يعمل مع العملاء لتطوير نماذج التعلم العميق الصعبة ووضعها في الإنتاج على AWS. في أوقات فراغه ، يستمتع بتقاسم كأس من النبيذ الأحمر وبعض الجبن مع الأصدقاء.

قم بضبط ونشر نموذج ملخّص باستخدام حاويات Hugging Face Amazon SageMaker التي تجلب النص الخاص بك PlatoBlockchain Data Intelligence. البحث العمودي. عاي.آمنة نجمي هو عالم بيانات مع خدمات AWS الاحترافية. إنها شغوفة بمساعدة العملاء على الابتكار باستخدام تقنيات البيانات الضخمة والذكاء الاصطناعي للاستفادة من قيمة الأعمال والرؤى من البيانات. في أوقات فراغها ، تستمتع بالبستنة والسفر إلى أماكن جديدة.

الطابع الزمني:

اكثر من التعلم الآلي من AWS