في هذا الريبو ، نقوم بتشكيل نموذج مقطع Openiai للغة التركية باستخدام طريقة Lora. للحصول على مزيد من المعلومات على المقطع ، يمكنك الخروج من ريبو الآخر.
يتم استخدام مجموعة بيانات Flicker8 للتدريب. بالنسبة للتسميات التوضيحية التركية ، يتم استخدام مجموعة بيانات Tasviret وهي مجموعة بيانات لتسميات التوضيح التركية.
من المقرر أن يتم تشغيل دفاتر الملاحظات على كولاب على الرغم من أنه ليس ضروريًا. تتم عمليات تثبيت المكتبة اللازمة في دفاتر الملاحظات من أجل التشغيل على كولاب.
التكيف المنخفض الرتبة هو تقنية لتحقيق النماذج. بدلاً من تحديد جميع الطبقات ، يتم تحديد بعض الطبقات وتكوينها. بالمقارنة مع التحويل العادي بدلاً من تغيير الأوزان الأصلية ، يتم تخزين الفرق بين الأوزان الأولية والأوزان المحددة وحفظها. كما يتم تحلل المصفوفات التي تخزن الأوزان إلى مصفوفين تقلل من حجم الأوزان النموذجية وتضمن أن يكون النموذج الأولي والطنيق متشابهًا. هذا يعني أن النموذج سيكون أكثر حماية من النسيان الكاثوليكي. كل هذه أيضا تقلل من حجم النموذج. لذلك يمكنك فقط توفير وزن الفرق (أو وزن Lora وبعبارة أخرى) بدلاً من توفير أوزان الإصدار الكامل. هذا يمنح القدرة على الحصول على نموذج قاعدة كبير واحد وأوزان Lora صغيرة متعددة بدلاً من توفير نماذج كبيرة لكل نسخة محفورة بالتحية.
lora_clip_training_tasviret -> رمز مقطع مع lora
الاستدلال -> يوضح كيفية تحميل واستخدام نموذج Lora. يقارن عروض نماذج المقطع الأصلي واللورا في كل من التركية والإنجليزية.
لقد قمت بتحميل النموذج إلى Luggingface. يمكن استخدام النموذج مثل المثال أدناه:
from PIL import Image
from transformers import CLIPProcessor , CLIPModel
model = CLIPModel . from_pretrained ( "openai/clip-vit-base-patch32" )
model . load_adapter ( "kesimeg/lora-turkish-clip" ) # model can be found on Huggingface ?
model . eval ()
processor = CLIPProcessor . from_pretrained ( "openai/clip-vit-base-patch32" )
img = Image . open ( "dog.png" ) # A dog image
inputs = processor ( text = [ "Çimenler içinde bir köpek." , "Bir köpek." , "Çimenler içinde bir kuş." ], images = img , return_tensors = "pt" , padding = True )
outputs = model ( ** inputs )
logits_per_image = outputs . logits_per_image
probs = logits_per_image . softmax ( dim = 1 )
print ( probs )
هذا الهدف من هذا الريبو هو إظهار كيفية استخدام Lora إلى Finetune Clip بدلاً من الحصول على نموذج مقطع جيد للغة التركية. يمكنك محاولة زيادة الأداء عن طريق إضافة زيادة وقياس الأداء بمقاييس أفضل. يمكنك أيضًا محاولة استبدال المشفر النصي بنموذج مسبق بالبيانات التركية مثل Distilbert. (يمكنك التحقق من ريبو الآخر لهذا)
أود أن أشكر المصادر التي اعتدت على جعل هذا المشروع:
Finetuning مصنف صورة مع Lora باستخدام مكتبة PEFT: https://github.com/huggingface/peft/tree/main/examples/image_classification
تعليمي مكتبة PEFT: https://huggingface.co/docs/transformers/main/en/peft
ورقة لورا الأصلية: https://arxiv.org/abs/2106.09685
Tasviret (التسميات التوضيحية التركية 8): https://www.kaggle.com/datasets/begum302553/tasviret-flickr8k-turkish
Tasviret Paper: https://ieeexplore.ieee.org/document/7496155
ورق مقطع أصلي: https://arxiv.org/abs/2103.00020