En este repositorio, finetunamos el modelo de clip de OpenAI para el idioma turco utilizando el método Lora. Para obtener más información sobre el clip, puede consultar mi otro repositorio.
Flicker8 DataSet se usa para el entrenamiento. Para los subtítulos turcos se utiliza el conjunto de datos Tasviret, que es un conjunto de datos para los subtítulos de Flicker8 turco.
Los cuadernos tienen la intención de funcionar en Colab, aunque no es necesario. Las instalaciones de la biblioteca necesarias se realizan en cuadernos para ejecutarse en Colab.
La adaptación de bajo rango es una técnica para los modelos Finetune. En lugar de Finetuning todas las capas, algunas capas se seleccionan y Finetuned. En comparación con la delicadeza regular en lugar de cambiar los pesos originales, se almacenan y guardan la diferencia entre los pesos iniciales y los pesos finos. También las matrices que almacenan los pesos se descomponen en dos matrices que reducen el tamaño de los pesos del modelo y aseguran que el modelo inicial y finante sea similar. Esto significa que el modelo será mucho más protector contra el olvido catastropical. Todo esto también reduce el tamaño del modelo. Por lo tanto, puede guardar el peso de diferencia (o el peso de Lora en otras palabras) en lugar de guardar los pesos de la versión Finetuned Whole. Esto proporciona la capacidad de tener un solo modelo base grande y múltiples pesos de lora pequeños en lugar de guardar modelos grandes para cada versión Finetuned.
Lora_clip_training_tasviret -> Código de clip de Finetuning con Lora
Inferencia -> Demuestra cómo cargar y usar el modelo Lora. Compara actuaciones de los modelos de clips originales y finetos de Lora tanto en turco como en inglés.
He subido el modelo a Huggingface. El modelo se puede usar como el siguiente ejemplo:
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 )
Este objetivo de este repositorio es mostrar cómo usar Lora para Finetune Clip en lugar de obtener un buen modelo de clip para el idioma turco. Puede intentar aumentar el rendimiento agregando aumentos y medir el rendimiento con mejores métricas. También puede intentar reemplazar el codificador textual con un modelo previado con datos turcos como Distilbert. (Puedes consultar mi otro repositorio para esto)
Quiero agradecer a las fuentes a continuación que he usado para hacer este proyecto:
Fineting un clasificador de imagen con Lora usando la biblioteca PEFT: https://github.com/huggingface/peft/tree/main/examples/image_classification
Tutorial de la Biblioteca de Peft: https://huggingface.co/docs/transformers/main/en/peft
Papel Lora original: https://arxiv.org/abs/2106.09685
Tasviret (Turkish Flicker8 subtítulos): https://www.kaggle.com/datasets/begum302553/tasviret-flickr8k-turkish
Documento de Tasviret: https://ieeexplore.ieee.org/document/7496155
Papel clip original: https://arxiv.org/abs/2103.00020