Da GPT a Mistral-7B L’emozionante balzo in avanti nelle conversazioni dell’IA

Da GPT a Mistral-7B L'entusiasmante salto in avanti nelle conversazioni dell'IA

Introduzione

Il campo dell’intelligenza artificiale ha visto notevoli progressi negli ultimi anni, in particolare nell’ambito dei grandi modelli di linguaggio. I GML possono generare testi simili a quelli umani, riassumere documenti e scrivere codice software. Mistral-7B è uno dei recenti grandi modelli di linguaggio che supporta il testo in inglese e la generazione di codice, e può essere utilizzato per varie attività come riassunto di testo, classificazione, completamento del testo e completamento del codice.

Ciò che distingue Mistral-7B-Instruct è la sua capacità di offrire prestazioni eccezionali nonostante abbia meno parametri, rendendolo una soluzione ad alte prestazioni ed economica. Il modello ha recentemente guadagnato popolarità dopo che i risultati dei benchmark hanno mostrato che non solo supera tutti i modelli da 7B su MT-Bench, ma compete anche favorevolmente con modelli di chat da 13B. In questo articolo, esploreremo le caratteristiche e le capacità di Mistral 7B, tra cui i casi d’uso, le prestazioni e una guida pratica per il fine-tuning del modello.

Obiettivi di apprendimento

  • Comprendere come funzionano i grandi modelli di linguaggio e Mistral 7B
  • Architettura di Mistral 7B e benchmark
  • Casi d’uso di Mistral 7B e come si comporta
  • Approfondimento del codice per l’inferenza e il fine-tuning

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa sono i Grandi Modelli di Linguaggio?

I grandi modelli di linguaggio sono architetturati con trasformatori, che utilizzano meccanismi di attenzione per catturare dipendenze a lungo raggio nei dati, dove più strati di blocchi di trasformatori contengono auto-attenzione a più teste e reti neurali feed-forward. Questi modelli vengono pre-allenati su dati di testo, imparando a prevedere la parola successiva in una sequenza, catturando così i pattern nelle lingue. I pesi del pre-training possono essere sintonizzati su specifici compiti. In particolare, analizzeremo l’architettura di Mistral 7B LLM e ciò che la rende eccezionale.

Architettura di Mistral 7B

L’architettura trasformatore del modello Mistral 7B bilancia in modo efficiente alte prestazioni con l’uso della memoria, utilizzando meccanismi di attenzione e strategie di memorizzazione nella cache per superare modelli più grandi in velocità e qualità. Utilizza un’attenzione con finestra scorrevole (SWA) a 4096 finestre, che massimizza l’attenzione su sequenze più lunghe consentendo a ciascun token di prestare attenzione a un sottoinsieme di token precedenti, ottimizzando l’attenzione su sequenze più lunghe.

Uno strato nascosto può accedere a token da strati di input a distanze determinate dalla dimensione della finestra e dalla profondità dello strato. Il modello integra modifiche a Flash Attention e a xFormers, raddoppiando la velocità rispetto ai meccanismi di attenzione tradizionali. Inoltre, un meccanismo di cache a buffer rotante mantiene una dimensione fissa della cache per un utilizzo efficiente della memoria.

Mistral 7B in Google Colab

Approfondiamo il codice e vediamo come eseguire inferenze con il modello Mistral 7B in Google Colab. Utilizzeremo la versione gratuita con una singola GPU T4 e caricheremo il modello da Hugging Face.

1. Installa e importa la libreria ctransformers in Colab.

#intsall ctransformerspip install ctransformers[cuda]#importfrom ctransformers import AutoModelForCausalLM

2. Inizializza l’oggetto modello da Hugging Face e impostare i parametri necessari. Utilizzeremo una versione diversa del modello poiché il modello originale da Mistral AI può avere problemi nel caricare l’intero modello nella memoria su Google Colab.

#caricare il modello da huggingface con 50 livelli gpu
llm = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-GGUF", model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf", model_type = "mistral", gpu_layers = 50)

3. Definire una funzione per stampare i risultati verticalmente su Google Colab. Questo passaggio può essere saltato o modificato se viene eseguito in un ambiente diverso.

#funzione per stampare l'output del modello in modo leggibile su Colabdef colab_print(testo, max_width = 120):  parole = testo.split()  riga = ""  for parola in parole:    if len(riga) + len(parola) + 1 > max_width:      print(riga)      riga = ""    riga += parola + " "  print (riga)

4. Generare del testo utilizzando il modello e vedere i risultati. Modificare i parametri per cambiare la qualità del testo generato.

#generare testocolab_print(llm('''Dammi un paragrafo ben scritto in 5 frasi su un Senior Data Scientist (nome - Suvojit) che scrive blog su LLMs su Analytics Vidhya. Ha studiato Masters in AIML a BITS Pilani e lavora presso AZ Company, con un totale di 4 anni di esperienza. Inizia la frase con - Suvojit è un''', max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, repetition_penalty = 1.2))

Risposta del Modello: Suvojit è un Senior Data Scientist che lavora da 4 anni presso AZ company come parte del loro team specializzato nella progettazione, implementazione e miglioramento di modelli predittivi sul comportamento del consumatore nei marchi e nelle linee di business dei loro clienti utilizzando tecniche di machine learning a memoria limitata. Scrive su LLMs su Analytics Vidhya, il che gli aiuta a rimanere aggiornato sulle ultime tendenze in Data Science. Ha una laurea magistrale in AIML da BITS Pilani, dove ha studiato algoritmi di machine learning e le loro applicazioni. Suvojit è appassionato di utilizzare la sua conoscenza della data science per aiutare le aziende a prendere decisioni migliori e migliorare le loro performance.

Casi d’uso

Andiamo a esaminare alcuni dei casi d’uso di Mistral 7B in maggior dettaglio.

Traduzione

Mistral 7B supporta diverse lingue per la traduzione. Esaminiamo le traduzioni dall’inglese al francese e allo spagnolo e controlliamo l’accuratezza.

#tradurre dall'inglese al francesecolab_print(llm('''Traduci questo testo dall'inglese al francese: "Suvojit è un Senior Data Scientist che scrive blog su Analytics Vidhya."''',                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

Risposta del Modello: La traduzione sarebbe: “Suvojit est un scientifique des données sénior qui écrit des blogues sur Analytics Vidhya.”

#tradurre dall'inglese allo spagnolocolab_print(llm('''Traduci questo testo dall'inglese allo spagnolo: "Suvojit è un Senior Data Scientist che scrive blog su Analytics Vidhya."''',                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

Risposta del Modello: La traduzione sarebbe: “Suvojit es un Senior Data Científico que escribe blogs en Analytics Vidhya.”

Sommario

Utilizzare Mistral 7B per riassumere documenti in una versione più breve utilizzando le istruzioni di riassunto appropriate.

#Definire il prompt con le istruzioniprompt = '''[INST] Sei un assistente di codice disponibile. Il tuo compito è quello di riassumere il testo in esattamente due brevi frasi: I transformers hanno rivoluzionato il campo dei grandi modelli di linguaggio con la loro capacità di catturare dipendenze a lungo raggio e modelli complessi nel testo. Originariamente presentati nell'articolo "Attention Is All You Need" di Vaswani et al. nel 2017, i transformers hanno introdotto il meccanismo di auto-attenzione, che pesa diversamente i token di input in base alla loro rilevanza rispetto a un dato token. Questo meccanismo consente ai transformers di elaborare informazioni in modo più flessibile rispetto alle tradizionali RNN o LSTM. Di conseguenza, modelli come GPT, BERT e le loro successive iterazioni sono stati costruiti sull'architettura del transformer, portando a risultati innovativi in numerosi compiti di elaborazione del linguaggio naturale. Le loro capacità di elaborazione parallela li rendono inoltre adatti all'addestramento su grandi quantità di dati. Tuttavia, all'aumentare delle dimensioni di questi modelli, emergono anche preoccupazioni per l'impatto ambientale e le richieste computazionali. Nonostante queste sfide, il potere trasformativo dei transformers nei modelli di linguaggio rimane innegabile.Riassumi semplicemente il testo in esattamente 2 brevi frasi senza spiegazioni:[/INST]'''#Riassumerecolab_print(llm(prompt,                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

Risposta del modello: I transformers hanno rivoluzionato i grandi modelli di linguaggio catturando le dipendenze a lungo raggio e i pattern complessi, introducendo un meccanismo di autosomiglianza che li rende in grado di elaborare informazioni in modo flessibile e le implementazioni successive includono scoperte come GPT & BERT. Tuttavia, all’aumentare delle dimensioni di questi modelli sorgono preoccupazioni riguardo al loro impatto ambientale e alle richieste computazionali, nonostante queste sfide rimangono indiscutibilmente trasformative nel modellare il linguaggio.

Istruzioni personalizzate

Possiamo utilizzare il tag [INST] per modificare l’input dell’utente al fine di ottenere una risposta particolare dal modello. Ad esempio, possiamo generare un JSON basato su una descrizione testuale.

prompt = '''[INST] Sei un assistente di codice utile. Il tuo compito è generare un oggetto JSON valido in base alle informazioni fornite: Mi chiamo Suvojit Hore, lavoro presso l'azienda AB e il mio indirizzo è AZ Street NY. Genera semplicemente l'oggetto JSON senza spiegazioni:[/INST]'''colab_print(llm(prompt, max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, repetition_penalty = 1.2))

Risposta del modello: ”`json { “name”: “Suvojit Hore”, “company”: “AB”, “address”: “AZ Street NY” } “`

Raffinare la Mistral 7B

Vediamo come possiamo raffinare il modello utilizzando una singola GPU su Google Colab. Utilizzeremo un set di dati che converte brevi descrizioni delle immagini in testi dettagliati e altamente descrittivi. Questi risultati possono essere utilizzati in Midjourney per generare l’immagine specifica. L’obiettivo è addestrare il LLM per agire come un prompt engineer per la generazione di immagini.

Configura l’ambiente ed importa le librerie necessarie su Google Colab:

# Installa le librerie necessarie!pip install pandas autotrain-advanced -q!autotrain setup --update-torch!pip install -q peft  accelerate bitsandbytes safetensors#importa le librerie necessarieimport pandas as pdimport torchfrom peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizerimport transformersfrom huggingface_hub import notebook_login

Esegui il login a Hugging Face da un browser e copia il token di accesso. Utilizza questo token per effettuare il login a Hugging Face nel notebook.

notebook_login()
Hugging Face Notebook Login

Carica il set di dati nello storage della sessione Colab. Utilizzeremo il dataset Midjourney.

df = pd.read_csv("prompt_engineering.csv")df.head(5)
Prompt Engineering Dataset

Addestra il modello utilizzando Autotrain con i parametri appropriati. Modifica il comando di seguito per eseguirlo nel tuo repository Huggin Face e per l’accesso dell’utente al token.

!autotrain llm --train --project_name mistral-7b-sh-finetuned --model username/Mistral-7B-Instruct-v0.1-sharded --token hf_yiguyfTFtufTFYUTUfuytfuys --data_path . --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 12 --num_train_epochs 3 --trainer sft --target_modules q_proj,v_proj --push_to_hub --repo_id username/mistral-7b-sh-finetuned

Ora utilizziamo il modello raffinato per eseguire l’engine di inferenza e generare alcune descrizioni dettagliate delle immagini.

# adapter e modeladapters_name = "suvz47/mistral-7b-sh-finetuned"model_name = "bn22/Mistral-7B-Instruct-v0.1-sharded" device = "cuda"# setta la configurazionebnb_config = transformers.BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_use_double_quant=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.bfloat16)# inizializza il modelmodel = AutoModelForCausalLM.from_pretrained(    model_name,    load_in_4bit=True,    torch_dtype=torch.bfloat16,    quantization_config=bnb_config,    device_map='auto')

Carica il modello e il tokenizer ottimizzato.

#carica il modello e il tokenizermodel = PeftModel.from_pretrained(model, adapters_name)tokenizer = AutoTokenizer.from_pretrained(model_name)tokenizer.bos_token_id = 1stop_token_ids = [0]

Genera un promemoria di viaggio dettagliato e descrittivo con poche parole.

#prompttext = "[INST] genera un promemoria di viaggio di metà percorso in meno di 20 parole per Un computer con un chip emotivo [/INST]"#codifica e decodificaencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

Risposta del modello: Mentre il computer con un chip emotivo inizia a elaborare le sue emozioni, comincia a mettere in discussione la propria esistenza e il suo scopo, conducente a un viaggio di autodiscoperta e auto-miglioramento.

#prompttext = "[INST] genera un promemoria di viaggio di metà percorso in meno di 20 parole per Un arcobaleno che corre dietro i suoi colori [/INST]"#codifica e decodificaencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

Risposta del modello: Un arcobaleno che corre dietro i suoi colori si trova in un deserto dove il cielo è un mare di infinito blu e i colori dell’arcobaleno sono sparsi nella sabbia.

Conclusioni

Mistral 7B si è rivelato un significativo avanzamento nel campo dei Grandi Modelli Linguistici. La sua efficiente architettura, combinata alle sue prestazioni superiori, ne dimostra il potenziale per diventare uno strumento fondamentale per vari compiti di Elaborazione del Linguaggio Naturale in futuro. Questo articolo fornisce approfondimenti sull’architettura del modello, la sua applicazione e su come si può sfruttare la sua potenza per compiti specifici come la traduzione, la sintesi e il raffinamento per altre applicazioni. Con la giusta guida e sperimentazione, Mistral 7B potrebbe ridefinire i confini di ciò che è possibile con i Grandi Modelli Linguistici.

Punti Chiave

  • Mistral-7B-Instruct eccelle nelle prestazioni nonostante meno parametri.
  • Utilizza Sliding Window Attention per l’ottimizzazione delle sequenze lunghe.
  • Funzionalità come Flash Attention e xFormers raddoppiano la sua velocità.
  • Rolling Buffer Cache garantisce una gestione efficiente della memoria.
  • Versatile: Gestisce traduzione, sintesi, generazione di dati strutturati, generazione di testo e completamento di testo.
  • Ingegnerizzazione del Promemoria per aggiungere istruzioni personalizzate può aiutare il modello a comprendere meglio la richiesta e a svolgere diverse complesse attività linguistiche.
  • Ottimizza Mistral 7B per compiti linguistici specifici come l’ingegnere dei promemoria.

Domande Frequenti

Riferimenti

  • Miniatura – Generata utilizzando Stable Diffusion
  • Architettura – Articolo

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.