BookTranslator
BookTranslator

Come tradurre documenti lunghi con un LLM locale: chunk e verifiche

Abbiamo tradotto 3.179 parole con un LLM locale in LM Studio in tre modi, e ognuno nascondeva un errore silenzioso. Le dimensioni dei chunk, le impostazioni e i controlli che li individuano.

Le persone traducono documenti con un LLM locale per un motivo: il file non può lasciare la loro macchina. Un modello locale può fare il lavoro, ma restituisce testo semplice, non un file tradotto, e i suoi errori peggiori sono silenziosi. Nel nostro test, una singola richiesta per un estratto di 3.179 parole è tornata con il numero corretto di paragrafi e un segnale di completamento pulito, eppure un paragrafo aveva perso più di un terzo del suo contenuto e aveva acquisito frasi che non sono nel testo di partenza.

Risposta breve: dividi il testo ai confini dei paragrafi in chunk di circa 600 parole, inserisci un glossario di nomi e termini ricorrenti nelle istruzioni di sistema, disattiva la modalità di pensiero del modello e confronta ogni chunk con il suo paragrafo di origine, paragrafo per paragrafo, prima di fidarti. Ognuno dei tre modi in cui abbiamo eseguito il test ha fallito da qualche parte, e nessun fallimento ha prodotto un messaggio di errore. Aspettati che un modello di medie dimensioni su un laptop impieghi ore per un libro intero, e metti in conto di dover ricostruire la formattazione da solo.

Tutto quanto segue proviene da un'unica esecuzione il 23 ottobre 2026: Qwen 3.6 27B (Q4_K_M GGUF) in LM Studio 0.4.8 su un Apple M4 Max con 64 GB di memoria, che traduce l'inizio della Die Verwandlung di Kafka dal tedesco all'inglese. Lo script di test, i risultati e gli esempi grezzi di fallimento sono scaricabili gratuitamente così puoi ripetere il test con il tuo modello.

Quando un LLM locale è lo strumento giusto

Esegui la traduzione localmente quando sono le regole del documento, non la comodità, a imporlo:

  • un contratto con un cliente, un accordo di ricerca o una policy aziendale vieta di caricare il file su un servizio esterno;
  • il testo è personale o riservato e non puoi rimuovere prima le parti sensibili; oppure
  • devi elaborare molti file senza costi per documento e possiedi già hardware adeguato.

Se nessuno di questi casi si applica, un modello locale è di solito la strada più lenta verso un risultato peggiore. Rinunci a tre cose che un servizio di traduzione documenti offre: un file tradotto nel formato originale, un modello più grande di quanto la tua macchina possa contenere e un flusso di lavoro pensato per la coerenza su un libro intero. Prima di scegliere l'una o l'altra strada, consulta la checklist sulla privacy nella traduzione di documenti. Copre l'autorizzazione a elaborare il file, le copie di lavoro minime e cosa fa un servizio con i file caricati.

Anche "locale" ha bisogno di un significato preciso. Il modello gira sul tuo computer e, nel nostro test, le richieste andavano solo a localhost. Questo non ti dice cosa registra, aggiorna o segnala l'applicazione attorno al modello. Se le tue regole richiedono la prova che nulla lascia il dispositivo, controlla le impostazioni e la policy del runtime stesso, oppure eseguilo su una macchina senza accesso alla rete.

Cosa abbiamo testato

Abbiamo tradotto i primi 19 paragrafi della Die Verwandlung (3.179 parole tedesche) dall'edizione Project Gutenberg di pubblico dominio. Il tedesco letterario è un buon test di stress: i paragrafi sono lunghi, le frasi si annidano e gli stessi personaggi e titoli professionali ricorrono.

Tutte e tre le esecuzioni hanno usato lo stesso modello e le stesse impostazioni: temperatura 0,2, un massimo di 12.000 token in output e una finestra di contesto di 16.384 token. L'istruzione richiedeva un paragrafo inglese per ogni paragrafo tedesco e nient'altro.

EsecuzioneCosa abbiamo inviatoParagrafi in output (origine: 19)Parole in outputTempo
A. A chunk6 chunk di circa 600 parole, solo istruzione193,31910,4 min
B. A chunk + glossario + contestoGli stessi blocchi, un glossario di 7 termini e il paragrafo di origine precedente contrassegnato con "NON tradurre"203,44610,5 min
C. Una sola richiestaTutti e 19 i paragrafi in una volta193,3099,5 min

Ogni esecuzione si è conclusa con un normale segnale di arresto e ognuna conteneva un diverso errore silenzioso. L'esecuzione C ha omesso e inventato testo. L'esecuzione B ha tradotto testo che le era stato detto di saltare. L'esecuzione A, la più pulita, ha assegnato a un personaggio il ruolo sbagliato nel suo ultimo blocco.

Errore 1: una grande richiesta ha omesso parte di un paragrafo

L'esecuzione C si è conclusa normalmente e ha restituito esattamente 19 paragrafi. Un controllo del numero di paragrafi l'avrebbe superato. Il paragrafo 6, però, è tornato con 214 parole per un originale di 260.

Nell'originale, Gregor guarda l'orologio, si rende conto di aver perso il treno e poi considera l'idea di mettersi in malattia: il suo capo sarebbe arrivato con il medico dell'assicurazione sanitaria, che considera tutti sani ma pigri al lavoro, e Gregor ammette di sentirsi in realtà bene, a parte la sonnolenza e un appetito insolito. L'esecuzione C ha tradotto la prima parte, poi ha omesso l'intero passaggio sulla malattia, 98 delle 260 parole tedesche del paragrafo. Al suo posto ha scritto che Gregor "sarebbe stato licenziato su due piedi", che l'assistente dell'ufficio tende "a vedere tutto ciò che gli viene riferito come un'opportunità per mettersi in mostra" e che quel pensiero "gli aveva fatto spuntare un sorriso sulle labbra". Niente di tutto ciò è nel testo tedesco.

L'esecuzione a blocchi ha tradotto lo stesso paragrafo per intero, con 267 parole.

Un solo campione non dimostra che le richieste lunghe falliscano sempre. Dimostra però cosa controllare: una lunga richiesta singola può comprimere o inventare testo in modo silenzioso pur sembrando strutturalmente completa. Un lettore che non conosce il tedesco non avrebbe alcun motivo di accorgersene.

Errore 2: il modello ha tradotto il "contesto" che gli era stato detto di saltare

Un consiglio comune è inviare il paragrafo precedente con ogni blocco, così il modello mantiene il filo. Nell'esecuzione B, lo abbiamo aggiunto al messaggio con l'etichetta "Contesto (già tradotto, NON tradurre)".

Nel blocco 4 il modello lo ha tradotto comunque. Il blocco ha restituito quattro paragrafi per tre paragrafi di origine, e il primo era una seconda traduzione dell'ultimo paragrafo del blocco 3. Uniti insieme, il libro avrebbe contenuto quel paragrafo due volte, con parole diverse ogni volta.

La regola pratica: se invii il contesto, tienilo fuori dal testo che il modello deve tradurre, mantienilo breve e controlla il numero di paragrafi di ogni blocco. Se non puoi controllare, lascialo fuori.

Errore 3: un blocco inviato da solo ha assegnato a un personaggio il ruolo sbagliato

L'esecuzione A inviava ogni blocco senza glossario e senza contesto. Per i primi cinque blocchi ha funzionato bene: Prokurist è diventato "capo commesso" in tutti i 16 punti in cui compariva. Il sesto blocco era un singolo paragrafo in cui il capo commesso rimprovera Gregor attraverso la porta. Visto da solo, il modello ha tradotto der Prokurist come "il commesso viaggiatore", che è il lavoro di Gregor. Il numero di paragrafi corrispondeva e il rapporto di lunghezza era 1,00, quindi nessuno dei due controlli strutturali se n'è accorto.

Nell'esecuzione B, che aveva il glossario nell'istruzione di sistema e il paragrafo precedente come contesto, lo stesso paragrafo ha usato correttamente "capo commesso". Questo test non può dire quale dei due lo abbia risolto. Poiché il contesto ha anche causato l'errore 2, il glossario è il posto più sicuro per trasportare nomi e ruoli da un blocco all'altro: è breve, si trova nell'istruzione e puoi verificarlo meccanicamente.

Il flusso di lavoro che ha retto

1. Estrai prima il testo semplice dal file

Un LLM locale traduce testo, non file. Converti il documento prima di iniziare:

  • DOCX o EPUB: esporta in testo semplice o Markdown con un paragrafo per blocco, mantenendo le intestazioni come righe separate.
  • PDF con livello di testo: estrai il testo, poi ripara le righe spezzate e la sillabazione. La nostra guida per correggere le interruzioni di riga e la sillabazione OCR copre la stessa pulizia. Un convertitore come Docling può produrre Markdown da PDF e file Office.
  • PDF scansionato: esegui prima l'OCR. Se non sei sicuro che un PDF abbia testo utilizzabile, vedi Estrazione del testo da PDF vs OCR.

Mantieni intatta la struttura dei paragrafi. Ogni controllo successivo dipende da una corrispondenza uno a uno tra i paragrafi di origine e quelli tradotti.

2. Disattiva la modalità di ragionamento e confermalo

Molti modelli aperti attuali ragionano prima di rispondere. Per la traduzione, questo spreca tempo e token di output. Nella nostra configurazione, una richiesta di test da 200 token ha impiegato 199 token per il ragionamento e ha restituito una risposta vuota.

Abbiamo provato tre interruttori comuni. Aggiungere /no_think al prompt non ha prodotto alcun effetto, e chat_template_kwargs con enable_thinking: false non ha prodotto alcun effetto. Inviare "reasoning_effort": "none" nella richiesta ha disattivato il ragionamento: la risposta riportava 0 token di ragionamento e restituiva direttamente la traduzione. Questo parametro non è elencato nella pagina delle chat completions di LM Studio, quindi trattalo come un comportamento che abbiamo osservato nella versione 0.4.8 con questo modello. Controlla il conteggio reasoning_tokens nelle tue risposte invece di fidarti di qualsiasi interruttore.

3. Dimensiona la finestra di contesto prima dei chunk

La finestra di contesto deve contenere l'istruzione, il chunk e la traduzione completa. Nelle nostre esecuzioni a chunk, un chunk tedesco di 500–670 parole ha utilizzato circa 800–1.500 token di input, a seconda del glossario e del contesto, e 640–870 token di output, quindi qualche migliaio di token è sufficiente. La singola richiesta di 3.179 parole ha richiesto 4.953 token di input e 3.930 token di output.

Ollama imposta la lunghezza predefinita del contesto in base alla memoria disponibile: 4k token sotto i 24 GiB di VRAM, 32k da 24 a 48 GiB e 256k a 48 GiB o più, secondo la sua documentazione sulla lunghezza del contesto consultata il 23 ottobre 2026. Puoi aumentarla con OLLAMA_CONTEXT_LENGTH. In LM Studio, imposta la lunghezza del contesto quando carichi il modello. Se un chunk più la sua traduzione non entra, l'output può essere troncato.

4. Suddividi ai confini dei paragrafi, circa 600 parole

Non dividere mai all'interno di un paragrafo o di una frase. I nostri chunk miravano a 700 parole e terminavano al confine di paragrafo più vicino, producendo sei chunk da 243 a 667 parole. Chunk più piccoli costano poco: l'esecuzione A ha impiegato 10,4 minuti contro i 9,5 minuti della singola richiesta, e un chunk fallito è economico da rieseguire.

Mantieni l'istruzione breve e identica per ogni chunk. La nostra era: traduci in inglese, mantieni esattamente un paragrafo di output per ogni paragrafo di input separato da una riga vuota, e restituisci solo la traduzione. Aggiungi un glossario alla stessa istruzione: una riga per nome, titolo o termine ricorrente, nella forma Prokurist = chief clerk. La nostra guida su come creare un glossario di traduzione spiega cosa includere. I chunk brevi perdono la storia circostante, e il glossario è ciò che la trasporta.

5. Controlla ogni chunk prima di unirli

Esegui tre controlli su ogni chunk:

  1. Conteggio dei paragrafi. L'output deve avere lo stesso numero di paragrafi dell'input. Questo ha individuato il fallimento 2.
  2. Rapporto di lunghezza per paragrafo. Confronta il conteggio delle parole di ogni paragrafo tradotto con il suo originale. Questo ha individuato il fallimento 1, che il conteggio dei paragrafi aveva mancato.
  3. Termini del glossario per paragrafo. Dove appare un termine originale, la sua traduzione richiesta dovrebbe apparire lo stesso numero di volte. Questo ha individuato il fallimento 3, che entrambi gli altri controlli avevano mancato. Le lingue con flessione richiederanno un po' di giudizio qui, perché un termine tedesco o russo cambia forma.

Per la prosa dal tedesco all'inglese, i paragrafi dell'esecuzione A sono rimasti tra 0,98 e 1,17 parole in uscita per parola in entrata. Il paragrafo danneggiato dell'esecuzione C era 0,82. Imposta il tuo intervallo controllando alcuni paragrafi di cui ti fidi nella tua coppia linguistica; i valori predefiniti nel nostro script sono un punto di partenza, non uno standard.

Un paragrafo segnalato è il punto da cui iniziare a leggere, non la prova di un errore. Poi leggi la traduzione stessa, specialmente nomi, numeri, negazioni e qualsiasi cosa su cui un lettore potrebbe agire. La checklist di controllo qualità per la traduzione di libri copre quella revisione.

6. Ricostruisci il documento

Il modello restituisce testo. Titoli, note a piè di pagina, tabelle, immagini, impaginazione e stili devono essere reinseriti a mano o con uno strumento di conversione. Per un breve rapporto è un problema minore. Per un libro con note a piè di pagina e tabelle può richiedere più tempo della traduzione.

Quanto tempo richiede un intero libro

La nostra esecuzione a chunk ha tradotto 3.179 parole in 10,4 minuti, circa 300 parole al minuto su questa macchina. A quel ritmo un romanzo di 90.000 parole richiederebbe circa cinque ore di generazione, prima dei controlli e delle riesecuzioni. È semplice aritmetica da una singola esecuzione, non un benchmark. La velocità cambia con la dimensione del modello, la quantizzazione, l'hardware, la coppia linguistica e quanto altro sta facendo la macchina.

Il file del modello era di 17,5 GB su disco, e la cache del contesto e i buffer di runtime richiedono memoria in aggiunta, quindi una macchina necessita di molta più memoria libera della dimensione del file. Un modello più piccolo funzionerà più velocemente e con meno memoria, di solito a scapito della qualità. Provalo su un campione rappresentativo prima di impegnarti su un intero libro. La nostra guida al miglior LLM per la traduzione spiega come costruire quel campione e confrontare i modelli in modo equo.

LLM locale o servizio di traduzione documenti

DomandaLLM localeServizio di traduzione documenti
Il file può lasciare la tua macchina?Non necessarioNecessario
Cosa restituisceTesto semplice da riassemblareUn file tradotto
Dimensione del modelloLimitata dalla tua memoriaLimitata dal fornitore
Coerenza su un intero libroIl tuo compito: glossario, suddivisione in blocchi, controlliIntegrata in alcuni servizi
Costo per documentoIl tuo hardware e il tuo tempoPrezzo per documento o per parola

Se le tue regole consentono di caricare il file, un servizio documenti elimina gran parte del lavoro descritto sopra. BookTranslator traduce file PDF, EPUB e DOCX completi e restituisce un file tradotto, e le sue FAQ affermano che i file caricati e l'output della traduzione non vengono utilizzati per addestrare modelli di IA. È un servizio cloud, quindi non è un'opzione quando il file deve rimanere sulla tua macchina. Se stai decidendo tra eseguire i modelli da solo e pagare un servizio, quanto costa davvero la traduzione con LLM mostra come pianificare il lato token.

Ottieni i file di test

Tutti i file sono nella cartella /files/blog/translate-with-local-llm/:

  • local_llm_translation_test.py: il test completo contro l'API locale di LM Studio, con tutte e tre le esecuzioni. Puntalo su un altro modello o testo di origine per ripetere il test.
  • check_translation.py: confronta un testo di origine e una traduzione paragrafo per paragrafo e segnala discrepanze nel conteggio dei paragrafi, rapporti di lunghezza fuori intervallo e termini del glossario mancanti (con --term "Prokurist=chief clerk"). Funziona con l'output di qualsiasi strumento.
  • results.csv: ogni richiesta con i relativi conteggi di paragrafi, parole, token e tempo.
  • failure-examples.txt: il testo di origine tedesco e l'output grezzo del modello per tutti e tre i fallimenti.

Esegui check_translation.py con i termini del tuo glossario su qualsiasi traduzione lunga prima di considerarla affidabile. Bastano pochi secondi, e ha segnalato tutti e tre gli errori di questo test. Non può dirti se una frase scorrevole è sbagliata, quindi i paragrafi segnalati sono il punto da cui iniziare a leggere, non dove finire.

Post Correlati