Presentazione di IDEFICS una riproduzione aperta di un modello di linguaggio visivo all’avanguardia.

Presentazione di IDEFICS, un modello di linguaggio visivo all'avanguardia.

Siamo entusiasti di presentare IDEFICS (Image-aware Decoder Enhanced à la Flamingo with Interleaved Cross-attentionS), un modello di linguaggio visuale in open-access. IDEFICS si basa su Flamingo, un modello di linguaggio visuale all’avanguardia sviluppato inizialmente da DeepMind, che non è stato reso pubblico. Similmente a GPT-4, il modello accetta sequenze arbitrarie di immagini e testo in input e produce output di testo. IDEFICS è costruito unicamente su dati e modelli disponibili pubblicamente (LLaMA v1 e OpenCLIP) ed è disponibile in due varianti: la versione base e la versione istruita. Ogni variante è disponibile con una dimensione di 9 miliardi e 80 miliardi di parametri.

Lo sviluppo di modelli di intelligenza artificiale all’avanguardia dovrebbe essere più trasparente. Il nostro obiettivo con IDEFICS è riprodurre e fornire alla comunità dell’IA sistemi che corrispondano alle capacità dei grandi modelli proprietari come Flamingo. A tal fine, abbiamo compiuto importanti passi contribuendo a portare trasparenza a questi sistemi di intelligenza artificiale: abbiamo utilizzato solo dati disponibili pubblicamente, abbiamo fornito strumenti per esplorare i set di dati di addestramento, abbiamo condiviso lezioni tecniche e errori di costruzione di tali artefatti e abbiamo valutato la nocività del modello proponendogli input avversari prima di rilasciarlo. Siamo fiduciosi che IDEFICS possa servire come solida base per una ricerca più aperta nei sistemi di intelligenza artificiale multimodali, insieme a modelli come OpenFlamingo, un’altra riproduzione aperta di Flamingo con una scala di 9 miliardi di parametri.

Prova la demo e i modelli sull’Hub!

Cos’è IDEFICS?

IDEFICS è un modello multimodale con 80 miliardi di parametri che accetta sequenze di immagini e testi in input e genera testo coerente in output. Può rispondere a domande su immagini, descrivere contenuti visivi, creare storie basate su più immagini, ecc.

IDEFICS è una riproduzione in open-access di Flamingo e ha una performance comparabile con il modello originale a sorgente chiusa su vari benchmark di comprensione immagine-testo. Viene fornito in due varianti: 80 miliardi di parametri e 9 miliardi di parametri.

Forniamo anche versioni ottimizzate idefics-80B-instruct e idefics-9B-instruct adattate per casi d’uso conversazionali.

Dati di addestramento

IDEFICS è stato addestrato su una miscela di set di dati disponibili pubblicamente: Wikipedia, Public Multimodal Dataset e LAION, oltre a un nuovo set di dati chiamato OBELICS composto da 115 miliardi di token che abbiamo creato. OBELICS è costituito da 141 milioni di documenti immagine-testo intercalati recuperati dal web e contiene 353 milioni di immagini.

Forniamo una visualizzazione interattiva di OBELICS che consente di esplorare il contenuto del set di dati con Nomic AI.

I dettagli dell’architettura di IDEFICS, della metodologia di addestramento e delle valutazioni, così come informazioni sul set di dati, sono disponibili nella scheda del modello e nel nostro articolo di ricerca. Inoltre, abbiamo documentato dettagli tecnici e apprendimenti dall’addestramento del modello, offrendo una prospettiva preziosa sullo sviluppo di IDEFICS.

Valutazione etica

All’inizio di questo progetto, attraverso una serie di discussioni, abbiamo elaborato una carta etica che avrebbe aiutato a guidare le decisioni prese durante il progetto. Questa carta stabilisce dei valori, tra cui l’autocritica, la trasparenza e l’equità, che abbiamo cercato di perseguire nel modo in cui abbiamo affrontato il progetto e il rilascio dei modelli.

Come parte del processo di rilascio, abbiamo valutato internamente il modello per potenziali pregiudizi interrogandolo in modo avversario con immagini e testo che potrebbero suscitare risposte indesiderate da parte del modello (un processo noto come red teaming).

Prova IDEFICS con la demo, consulta le schede del modello e del set di dati corrispondenti e facci sapere il tuo feedback utilizzando la scheda della comunità! Ci impegniamo a migliorare questi modelli e rendere i grandi modelli di intelligenza artificiale multimodali accessibili alla comunità di apprendimento automatico.

Licenza

Il modello è costruito su due modelli pre-addestrati: laion/CLIP-ViT-H-14-laion2B-s32B-b79K e huggyllama/llama-65b. Il primo è stato rilasciato con una licenza MIT, mentre il secondo è stato rilasciato con una specifica licenza non commerciale focalizzata sulla ricerca. Pertanto, gli utenti devono conformarsi a tale licenza facendo domanda direttamente al modulo di Meta.

I due modelli preaddestrati sono collegati tra loro con parametri appena inizializzati che addestriamo. Questi non si basano su nessuno dei due modelli di base congelati che formano il modello composito. Rilasciamo i pesi aggiuntivi che abbiamo addestrato con licenza MIT.

Iniziare con IDEFICS

I modelli IDEFICS sono disponibili nell’Hugging Face Hub e supportati nell’ultima versione di transformers. Ecco un esempio di codice per provarlo:

import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor

device = "cuda" if torch.cuda.is_available() else "cpu"

checkpoint = "HuggingFaceM4/idefics-9b-instruct"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)

# Al modello vengono fornite una sequenza arbitraria di stringhe di testo e immagini. Le immagini possono essere URL o immagini PIL.
prompts = [
    [
        "Utente: Cosa c'è in questa immagine?",
        "https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
        "<end_of_utterance>",

        "\nAssistente: Questa immagine raffigura Idefix, il cane di Obelix in Asterix e Obelix. Idefix sta correndo a terra.<end_of_utterance>",

        "\nUtente:",
        "https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052",
        "E chi è quel personaggio?<end_of_utterance>",

        "\nAssistente:",
    ],
]

# --modalità batch
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --modalità singolo campione
# inputs = processor(prompts[0], return_tensors="pt").to(device)

# Argomenti di generazione
exit_condition = processor.tokenizer("<end_of_utterance>", add_special_tokens=False).input_ids
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids

generated_ids = model.generate(**inputs, eos_token_id=exit_condition, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
    print(f"{i}:\n{t}\n")