Dans ce référentiel, nous Finetune Openai Modèle Clip pour le langage turc à l'aide de la méthode LORA. Pour obtenir plus d'informations sur le clip, vous pouvez vérifier mon autre dépôt.
L'ensemble de données Flicker8 est utilisé pour la formation. Pour les légendes turques, l'ensemble de données TASVIRET est utilisé qui est un ensemble de données pour les légendes turques Flicker8.
Les ordinateurs portables sont entravés pour fonctionner sur Colab bien qu'il ne soit pas nécessaire. Les installations de bibliothèque nécessaires sont effectuées dans les ordinateurs portables afin d'exécuter sur Colab.
L'adaptation de faible rang est une technique pour les modèles Finetune. Au lieu de finir toutes les couches, certaines couches sont sélectionnées et entièrement entièrement. Par rapport à la finalité régulière au lieu de modifier les poids d'origine, la différence entre les poids initiaux et les poids finissants est stocké et sauvé. Les matrices stocant également les poids sont décomposées en deux matrices qui réduisent la taille des poids du modèle et garantit que le modèle initial et finetuné est similaire. Cela signifie que le modèle sera beaucoup plus protecteur contre l'oubli cathastropical. Tous ces éléments réduisent également la taille du modèle sur toutes les modèles. Vous pouvez donc simplement économiser le poids de la différence (ou le poids de Lora en d'autres termes) au lieu d'économiser les poids de la version entièrement entièrement. Cela donne la possibilité d'avoir un seul modèle de base grand et plusieurs petits poids LORA au lieu d'économiser de grands modèles pour chaque version à fineturation.
Lora_clip_training_tasviret -> code finetuning de clip avec lora
Inférence -> montre comment charger et utiliser le modèle LORA. Compare les performances de modèles de clip Finetuned originaux et Lora en turc et en anglais.
J'ai téléchargé le modèle sur HuggingFace. Le modèle peut être utilisé comme l'exemple ci-dessous:
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 )
Cet objectif de ce dépôt est de montrer comment utiliser Lora pour finertune plutôt que d'obtenir un bon modèle de clip pour la langue turque. Vous pouvez essayer d'augmenter les performances en ajoutant des augmentations et en mesurant les performances avec de meilleures mesures. Vous pouvez également essayer de remplacer l'encodeur textuel par un modèle pré-entraîné par des données turques telles que Distilbert. (Vous pouvez consulter mon autre dépôt pour cela)
Je tiens à remercier les sources ci-dessous que j'ai utilisées pour réaliser ce projet:
Finetuning un classificateur d'images avec Lora à l'aide de la bibliothèque PEFT: https://github.com/huggingface/peft/tree/main/examples/image_classification
Tutoriel de la bibliothèque PEFT: https://huggingface.co/docs/transformers/main/en/peft
Papier Lora original: https://arxiv.org/abs/2106.09685
TASVIRET (Turkish Flicker8 Légendes): https://www.kaggle.com/datasets/begum302553/tasviret-flickr8k-turkish
Tasviret Paper: https://ieeexplore.ieee.org/document/7496155
Papier à clip d'origine: https://arxiv.org/abs/2103.00020