Neste repo, o modelo de clipe do FineTune OpenAI para a linguagem turca usando o método Lora. Para obter mais informações sobre o clipe, você pode conferir meu outro repositório.
O conjunto de dados Flicker8 é usado para treinamento. Para legendas turcas, é usado o conjunto de dados Tasviret, que é um conjunto de dados para legendas de Flicker8 turco.
Os notebooks são pretados para executar no COLAB, embora não seja necessário. As instalações necessárias da biblioteca são feitas nos notebooks para ser executado no Colab.
A adaptação de baixo rank é uma técnica para os modelos Finetune. Em vez de finetuning todas as camadas, algumas camadas são selecionadas e FinetUned. Comparado à Finetuning regular, em vez de alterar os pesos originais, a diferença entre os pesos iniciais e os pesos da Finetuned é armazenada e salva. Além disso, as matrizes que armazenam os pesos são decompostas em duas matrizes que reduzem o tamanho dos pesos do modelo e garantem que o modelo inicial e finonete seja semelhante. Isso significa que o modelo será muito mais protetor contra o esquecimento catastropical. Tudo isso também reduz o tamanho de todo o modelo. Assim, você pode economizar o peso da diferença (ou o peso lora em outras palavras) em vez de salvar os pesos da versão finetunada inteira. Isso oferece a capacidade de ter um único modelo básico grande e vários pequenos pesos LORA, em vez de salvar modelos grandes para cada versão do FinetUned.
Lora_clip_training_tasviret -> Código Finetuning de clipe com Lora
Inferência -> demonstra como carregar e usar o modelo LORA. Compara o desempenho dos modelos de clipes originais e Lora Finetuned, tanto em turco quanto em inglês.
Eu carreguei o modelo para Huggingface. O modelo pode ser usado como o exemplo abaixo:
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 )
Esse objetivo deste repositório é mostrar como usar o Lora para o clipe FineTune, em vez de obter um bom modelo de clipe para a linguagem turca. Você pode tentar aumentar o desempenho adicionando aumentos e medindo o desempenho com melhores métricas. Você também pode tentar substituir o codificador textual por um modelo pré -criado por dados turcos, como o Distilbert. (Você pode verificar meu outro repositório para isso)
Quero agradecer às fontes abaixo das quais usei para fazer este projeto:
Finetuning Um classificador de imagem com Lora usando a PEFT Library: https://github.com/huggingface/peft/tree/main/examples/image_classification
Tutorial da biblioteca PEFT: https://huggingface.co/docs/transformers/main/en/peft
Artigo Lora original: https://arxiv.org/abs/2106.09685
Tasviret (Turkish Flicker8): https://www.kaggle.com/datasets/begum302553/tasviret-flickr8k-turkish
Papel Tasviret: https://ieeexplore.ieee.org/document/7496155
Papel de clipe original: https://arxiv.org/abs/2103.00020