Shelpuk & Company
    Torna al blog
    12 febbraio 202418 min di letturaSergii Shelpuk

    Guida per professionisti LLM: modelli multilingui

    Quindi volete fare fine-tuning di un large language model per la vostra lingua. Da quale modello conviene partire?

    Il mondo degli LLM open-access si sta espandendo a ritmi altissimi, e quasi ogni settimana compare un nuovo leader nei benchmark. Al momento della stesura di questo articolo, l’Open LLM Leaderboard di Hugging Face incorona un nuovo campione: Smaug LLM. È un mercato estremamente dinamico, che ricorda per certi versi il vivacissimo ecosistema dei cloni IBM PC tra la fine degli anni Ottanta e l’inizio dei Novanta.

    Nonostante la varietà apparente, molti di questi modelli condividono la stessa base. Smaug, per esempio, deriva da Qwen-72B. Il fine-tuning consente di modificare in profondità il comportamento di un modello, ma c’è un elemento che non potete cambiare: il tokenizer.

    Illustrazione di LLM multilingui

    Abbiamo lavorato direttamente su personalizzazione, fine-tuning e deployment di diversi LLM open-access. In questa serie condividiamo quello che abbiamo imparato sul campo: cosa sanno fare questi modelli, dove si fermano e quali pratiche funzionano davvero nel fine-tuning.

    Guida per professionisti LLM:

    In un articolo precedente abbiamo analizzato il tokenizer di Llama-2 e spiegato perché fatica su alcune lingue. Qui allarghiamo il confronto: testiamo i tokenizer di sei fra gli LLM più popolari su dodici lingue diverse, per capire quali modelli siano davvero più adattabili a seconda della lingua target. Condividiamo anche il codice usato per l’esperimento, così potrete aggiungere facilmente anche le vostre lingue di interesse.

    Tutti i large language model, siano essi proprietari come ChatGPT o open source, elaborano le informazioni sotto forma di numeri. Per interpretare un testo devono prima convertirlo in una rappresentazione numerica. Il problema centrale del NLP è trovare il modo più efficiente per rappresentare una lingua come sequenza di numeri.

    Un approccio molto semplice assegna un numero a ogni lettera o simbolo. Il modello prova poi a prevedere il numero successivo. Ma questo metodo trasforma rapidamente una frase breve in una sequenza molto lunga, e un singolo errore all’inizio può compromettere tutto ciò che segue.

    Per risolvere questo problema si usa la tokenizzazione: le parole vengono suddivise in unità più piccole, o token, ricorrenti in molti contesti. Così il modello non deve più prevedere ogni lettera o ogni parola intera, ma sequenze più corte e gestibili. Riducendo drasticamente il numero di opzioni da considerare, il processo diventa molto più efficiente e più accurato.

    Setup del test: sei modelli, dodici lingue

    Vediamo ora come i tokenizer degli LLM più popolari gestiscono lingue diverse. Testeremo i seguenti modelli:

    • Mixtral-8x7B-Instruct-v0.1
    • Mistral-7B-Instruct-v0.2
    • falcon-7b-instruct
    • Llama-2-7b-chat-hf
    • Smaug-72B-v0.1
    • mt5

    Abbiamo incluso mt5 perché possiede uno dei migliori tokenizer multilingui oggi disponibili. Per questo è un ottimo benchmark con cui confrontare gli altri modelli della lista.

    Per prima cosa importiamo i tokenizer:

    from transformers import AutoTokenizer
    
    tokenizers = {
        'Mixtral-8x7B-Instruct-v0.1': AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-Instruct-v0.1"),
        'Mistral-7B-Instruct-v0.2': AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2"),
        'falcon-7b-instruct': AutoTokenizer.from_pretrained("tiiuae/falcon-7b-instruct"),
        'Llama-2-7b-chat-hf': AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf"),
        'Smaug-72B-v0.1': AutoTokenizer.from_pretrained("abacusai/Smaug-72B-v0.1"),
        'mt5': AutoTokenizer.from_pretrained("google/mt5-small")
    }

    Poi selezioniamo un insieme di lingue e una frase nota per ciascuna. Se volete aggiungere un’altra lingua al test, vi basta inserirla come nuova voce nel dizionario.

    sentences = {
        'English': 'Call me Ishmael. Some years ago...',
        'German': 'Da steh ich nun, ich armer Tor!...',
        'French': "On ne voit bien qu'avec le cœur...",
        'Spanish': "En un lugar de la Mancha...",
        'Polish': 'Litwo, ojczyzno moja!...',
        'Ukrainian': 'Як умру, то поховайте мене...',
        'Greek': 'ἄνδρα μοι ἔννεπε, Μοῦσα...',
        'Hebrew': 'בְּרֵאשִׁית בָּרָא אֱלֹהִים...',
        'Arabic': "حدثني أبي، عن جدي...",
        'Hindi': "कर्मण्येवाधिकारस्ते...",
        'Chinese': "道可道,非常道。名可名,非常名。",
        'Japanese': "私は、その男の写真を三葉..."
    }

    A questo punto definiamo il processo di test:

    def tokenizer_test(sentences):
        results = {}
        for model_name, tokenizer in tokenizers.items():
            results[model_name] = {}
            for language, sentence in sentences.items():
                token_list = tokenizer.tokenize(sentence)
                results[model_name][language] = {
                    'length': len(token_list),
                    'tokens': token_list
                }
        return results
    
    results = tokenizer_test(sentences)

    Risultati: lunghezza dei token per modello e lingua

    In generale, un numero inferiore di token indica un tokenizer più efficiente: a parità di input, una sequenza più corta segnala una rappresentazione migliore del contesto. Per un LLM, inoltre, gestire sequenze più brevi è più semplice e più economico.

    LinguaMixtralMistralFalconLlama-2Smaugmt5
    Inglese545453545259
    Tedesco212121212120
    Francese252521232324
    Spagnolo202017201818
    Polacco484839474239
    Ucraino323279293423
    Greco535360534826
    Ebraico595996597235
    Arabo292933291312
    Hindi8181127857534
    Cinese171718171415
    Giapponese222226241411

    Valori più bassi = tokenizzazione migliore. I valori evidenziati indicano il miglior tokenizer per quella lingua.

    Prestazioni dei tokenizer per Falcon, Mistral, Mixtral, Smaug e altri LLM open source

    Dimensioni del vocabolario

    Ogni tokenizer ha una dimensione di vocabolario diversa, e questo influisce sulla quantità di dati necessaria per il fine-tuning. Confrontiamo quindi anche le dimensioni del vocabolario.

    vocab_sizes = {name: tokenizer.vocab_size for name, tokenizer in tokenizers.items()}
    
    plt.figure(figsize=(10, 6))
    plt.bar(range(len(vocab_sizes)), list(vocab_sizes.values()), tick_label=list(vocab_sizes.keys()))
    plt.ylabel('Vocabulary Size')
    plt.title('Vocabulary Sizes of Various Tokenizers')
    plt.show()
    Dimensioni del vocabolario per Falcon, Mistral, Mixtral, Smaug e altri LLM open source

    Conclusioni

    L’ottima qualità della tokenizzazione di mt5 dipende in larga parte dalla sua ampia dimensione di vocabolario. Ma l’efficacia di un tokenizer non si riduce solo a quello. Per esempio, anche se Smaug ha un vocabolario molto più grande di Llama-2, le prestazioni di tokenizzazione dei due modelli restano piuttosto simili.

    È evidente che nessuno degli LLM più popolari eguaglia l’efficienza del tokenizer di mt5. In media, falcon-7b-instruct risulta particolarmente inefficiente. Per alcune lingue, soprattutto romanze e germaniche, i modelli si comportano in modo simile. Ma quando usciamo da queste famiglie linguistiche, le prestazioni dei modelli più popolari crollano. Con un tokenizer multilingue debole, il fine-tuning su questi casi diventa quasi impraticabile.

    Nei nostri progetti abbiamo provato a fare fine-tuning di Llama-2 per task multilingui usando un dataset molto ampio e accuratamente curato, superiore a un miliardo di token, per poi dover comunque passare a mt5 a metà del lavoro.

    mt5, però, è disponibile solo come base model e richiede un lavoro significativo per imparare a seguire istruzioni. Questo significa che servono dataset grandi e di alta qualità. Alcuni nostri clienti disponevano di una risorsa del genere, ma nel complesso si tratta di un asset raro e quasi mai pubblico.

    Nonostante l’impressionante evoluzione del mercato, manca ancora un modello davvero forte sul piano multilingue. Il design del tokenizer nei migliori LLM open-access limita in modo strutturale l’efficacia su molte lingue, e questo limite non si supera semplicemente con altro training. Oggi, partire da mt5 e addestrarlo dal base model resta probabilmente la strada più promettente verso un vero LLM multilingue.

    Costruire un LLM personalizzato può migliorare sicurezza dei dati, compliance e vantaggio competitivo del prodotto. Negli altri articoli approfondiamo che cos’è l’effetto rete e come l’AI lo abilita, come costruire un vantaggio competitivo AI, quale cultura aiuta, cosa evitare e altro ancora.

    State costruendo soluzioni AI per mercati non anglofoni?

    Il design del tokenizer limita in modo strutturale le capacità multilingui della maggior parte degli LLM. Identifichiamo insieme il modello e la strategia di training più adatti alle vostre lingue target.

    Domande frequenti

    Risposte alle domande più frequenti su questo argomento.

    Quanto sono multilingue, in pratica, Falcon, Mistral, Smaug e LLM simili?

    Test completi di tokenizer su sei LLM popolari in 12 lingue. Quali modelli sono i più adattabili per ogni lingua. Shelpuk AI Technology Consulting applica questi pattern in engagement di engineering e delivery AI orientati alla produzione.

    Di cosa ha bisogno un team per implementare questa soluzione in modo affidabile?

    Uno stack affidabile combina componenti come LLM, Multilingue, Tokenizzatore, NLP e li organizza in un workflow di delivery chiaro. Shelpuk AI Technology Consulting supporta i team con consulenza e implementazione pratica di questo stack.

    Quali guadagni di performance o qualità sono realistici?

    Miglioramenti tecnici concreti vengono collegati a decisioni verificabili di architettura e delivery. Shelpuk AI Technology Consulting aiuta le organizzazioni a trasformare benchmark positivi in performance stabile in produzione.

    Cosa può andare storto per primo in produzione e come prevenirlo?

    I rischi principali sono copertura linguistica insufficiente, set di test distorti e piano di validazione incompleto prima della produzione. Shelpuk AI Technology Consulting introduce controlli di governance e qualità per ridurre errori evitabili di delivery.

    Come avviare un pilota a basso rischio prima di scalare?

    Conviene partire da un workflow ristretto con KPI chiari, validare i risultati e poi ampliare il perimetro in modo progressivo. Shelpuk AI Technology Consulting può guidare il passaggio da pilota validato a hardening e scalabilità.