Cum să traduci documente lungi cu un LLM local: fragmente și verificări
Am tradus 3.179 de cuvinte cu un LLM local în LM Studio în trei moduri, iar fiecare a ascuns o eroare tăcută. Dimensiunea fragmentului, setările și verificările care le prind.

Oamenii traduc documente cu un LLM local dintr-un singur motiv: fișierul nu poate părăsi calculatorul lor. Un model local poate face treaba, dar îți dă text simplu, nu un fișier tradus, iar cele mai grave greșeli ale sale sunt tăcute. În testul nostru, o singură cerere pentru un extras de 3.179 de cuvinte a revenit cu numărul corect de paragrafe și cu un semnal de finalizare curat, totuși un paragraf pierduse mai mult de o treime din conținut și câștigase propoziții care nu există în sursă.
Răspuns scurt: împarte textul la granițele paragrafelor în fragmente de aproximativ 600 de cuvinte, pune un glosar cu nume și termeni recurenți în instrucțiunea de sistem, dezactivează modul de gândire al modelului și compară fiecare fragment cu sursa paragraf cu paragraf înainte de a te încrede în el. Fiecare dintre cele trei moduri în care am rulat testul a eșuat undeva, iar nicio eșuare nu a produs un mesaj de eroare. Așteaptă-te ca un model de dimensiuni medii pe un laptop să dureze ore pentru o carte întreagă și planifică să reconstruiești singur formatarea.
Tot ce urmează provine dintr-o singură rulare pe 23 octombrie 2026: Qwen 3.6 27B (Q4_K_M GGUF) în LM Studio 0.4.8 pe un Apple M4 Max cu 64 GB de memorie, traducând începutul lui Die Verwandlung de Kafka din germană în engleză. Scriptul de test, rezultatele și exemplele brute de eșec sunt disponibile gratuit pentru descărcare, astfel încât să poți repeta testul cu propriul model.
Când un LLM local este instrumentul potrivit
Rulează traducerea local când regulile documentului, nu comoditatea, impun decizia:
- un contract cu un client, un acord de cercetare sau o politică a angajatorului interzice încărcarea fișierului către un serviciu extern;
- textul este personal sau confidențial și nu poți elimina mai întâi părțile sensibile; sau
- trebuie să procesezi multe fișiere fără cost pe document și deții deja hardware adecvat.
Dacă niciuna dintre aceste situații nu se aplică, un model local este de obicei calea mai lentă către un rezultat mai slab. Renunți la trei lucruri pe care le oferă un serviciu de traducere a documentelor: un fișier tradus în formatul original, un model mai mare decât poate ține mașina ta și un flux de lucru conceput pentru consecvență pe parcursul unei cărți întregi. Înainte de a alege oricare dintre variante, parcurge lista de verificare pentru confidențialitatea traducerii documentelor. Acoperă autoritatea de a procesa fișierul, copiile de lucru minime și ce face un serviciu cu fișierele încărcate.
„Local” are nevoie și de un sens precis. Modelul rulează pe calculatorul tău, iar în testul nostru cererile au mers doar către localhost. Asta nu îți spune ce înregistrează, actualizează sau raportează aplicația din jurul modelului. Dacă regulile tale cer dovada că nimic nu părăsește dispozitivul, verifică setările și politica proprii ale mediului de rulare sau rulează-l pe o mașină fără acces la rețea.
Ce am testat
Am tradus primele 19 paragrafe din Die Verwandlung (3.179 de cuvinte germane) din ediția Project Gutenberg, aflată în domeniul public. Germana literară este un test de stres corect: paragrafele sunt lungi, propozițiile se imbrică, iar aceleași personaje și titluri de funcție se repetă.
Toate cele trei rulări au folosit același model și aceleași setări: temperatură 0,2, maximum 12.000 de tokeni de ieșire și o fereastră de context de 16.384 de tokeni. Instrucțiunea cerea un paragraf în engleză pentru fiecare paragraf german și nimic altceva.
| Rulare | Ce am trimis | Paragrafe ieșite (sursă: 19) | Cuvinte ieșite | Timp |
|---|---|---|---|---|
| A. În fragmente | 6 fragmente de aproximativ 600 de cuvinte, doar instrucțiunea | 19 | 3,319 | 10,4 min |
| B. În fragmente + glosar + context | Aceleași fragmente, un glosar de 7 termeni și paragraful sursă anterior marcat „NU traduceți” | 20 | 3,446 | 10,5 min |
| C. O singură cerere | Toate cele 19 paragrafe deodată | 19 | 3,309 | 9,5 min |
Fiecare rulare s-a încheiat cu un semnal normal de oprire, iar fiecare rulare a conținut o eroare silențioasă diferită. Rularea C a omis și a inventat text. Rularea B a tradus text care ar fi trebuit să fie omis. Rularea A, cea mai curată, a atribuit unui personaj rolul greșit în ultimul său fragment.
Eșecul 1: O singură cerere mare a omis o parte dintr-un paragraf
Rularea C s-a încheiat normal și a returnat exact 19 paragrafe. O verificare a numărului de paragrafe ar fi trecut-o. Paragraful 6, însă, a revenit cu 214 cuvinte pentru o sursă de 260 de cuvinte.
În sursă, Gregor se uită la ceas, își dă seama că a pierdut trenul și apoi se gândește să anunțe că este bolnav: șeful său ar veni cu medicul asigurării de sănătate, care îi consideră pe toți sănătoși, dar leneși la muncă, iar Gregor recunoaște că de fapt se simte bine, în afară de somnolență și o poftă de mâncare neobișnuită. Rularea C a tradus prima parte, apoi a omis întregul pasaj despre ziua de boală, 98 din cele 260 de cuvinte germane ale paragrafului. În locul lui a scris că Gregor „ar fi fost concediat pe loc”, că funcționarul de birou tinde „să vadă tot ce i se raportează ca pe o oportunitate de a se da în spectacol” și că gândul „i-a adus un zâmbet pe buze”. Nimic din toate acestea nu apare în textul german.
Rularea pe fragmente a tradus complet același paragraf, cu 267 de cuvinte.
Un singur eșantion nu dovedește că cererile lungi eșuează întotdeauna. Dar arată ce trebuie verificat: o cerere lungă unică poate comprima sau inventa text în mod silențios, părând totuși completă din punct de vedere structural. Un cititor care nu știe germană nu ar avea niciun motiv să observe.
Eșecul 2: Modelul a tradus „contextul” care ar fi trebuit omis
Un sfat comun este să trimiți paragraful anterior împreună cu fiecare fragment, pentru ca modelul să păstreze firul. În rularea B, l-am adăugat la mesaj sub eticheta „Context (deja tradus, NU traduceți).”
În fragmentul 4, modelul l-a tradus totuși. Fragmentul a returnat patru paragrafe pentru trei paragrafe sursă, iar primul era o a doua traducere a ultimului paragraf din fragmentul 3. Odată unite, cartea ar fi conținut acel paragraf de două ori, cu formulări diferite de fiecare dată.
Regula practică: dacă trimiți context, ține-l în afara textului pe care modelul este rugat să îl traducă, păstrează-l scurt și verifică numărul de paragrafe al fiecărui fragment. Dacă nu poți verifica, renunță la el.
Eșecul 3: Un fragment trimis singur a atribuit unui personaj rolul greșit
Rularea A a trimis fiecare fragment fără glosar și fără context. Pentru primele cinci fragmente, acest lucru a funcționat bine: Prokurist a devenit „chief clerk” în toate cele 16 locuri în care apărea. Al șaselea fragment era un singur paragraf în care chief clerk-ul îl mustră pe Gregor prin ușă. Privit singur, modelul l-a tradus pe der Prokurist ca „the traveling salesman”, ceea ce este meseria lui Gregor. Numărul de paragrafe se potrivea, iar raportul de lungime era 1,00, așa că niciuna dintre verificările structurale nu a observat.
În rularea B, care avea glosarul în instrucțiunea de sistem și paragraful anterior ca context, același paragraf a folosit corect „chief clerk”. Acest test nu poate spune care dintre cele două a remediat problema. Deoarece contextul a cauzat și eșecul 2, glosarul este locul mai sigur pentru a transporta nume și roluri dintr-un fragment în altul: este scurt, se află în instrucțiune și poate fi verificat mecanic.
Fluxul de lucru care a rezistat
1. Extrage mai întâi textul simplu din fișier
Un LLM local traduce text, nu fișiere. Convertește documentul înainte de a începe:
- DOCX sau EPUB: exportă în text simplu sau Markdown cu un paragraf pe bloc, păstrând titlurile ca linii separate.
- PDF cu strat de text: extrage textul, apoi repară liniile rupte și despărțirea în silabe. Ghidul nostru despre repararea întreruperilor de linie și a despărțirii în silabe din OCR acoperă aceeași curățare. Un convertor precum Docling poate produce Markdown din PDF-uri și fișiere Office.
- PDF scanat: rulează mai întâi OCR. Dacă nu ești sigur dacă un PDF are text utilizabil, vezi Extragerea textului din PDF vs OCR.
Păstrează structura paragrafelor intactă. Fiecare verificare ulterioară depinde de o corespondență unu-la-unu între paragrafele sursă și cele traduse.
2. Dezactivează modul de gândire și confirmă
Multe modele deschise actuale raționează înainte de a răspunde. Pentru traducere, acest lucru irosește timp și tokeni de ieșire. În configurația noastră, o cerere de test de 200 de tokeni a consumat 199 de tokeni pentru raționament și a returnat un răspuns gol.
Am încercat trei comutatoare comune. Adăugarea /no_think la prompt nu a avut niciun efect, iar chat_template_kwargs cu enable_thinking: false nu a avut niciun efect. Trimiterea "reasoning_effort": "none" în cerere a dezactivat raționamentul: răspunsul a raportat 0 tokeni de raționament și a returnat traducerea direct. Acest parametru nu este listat pe pagina de completări chat a LM Studio, așa că tratează-l ca pe un comportament pe care l-am observat în versiunea 0.4.8 cu acest model. Verifică numărul de reasoning_tokens în propriile răspunsuri în loc să ai încredere în orice comutator.
3. Dimensionează fereastra de context înainte de fragmente
Fereastra de context trebuie să conțină instrucțiunea, fragmentul și traducerea completă. În rulările noastre pe fragmente, un fragment german de 500 până la 670 de cuvinte a folosit aproximativ 800 până la 1.500 de tokeni de intrare, în funcție de glosar și context, și 640 până la 870 de tokeni de ieșire, așa că câteva mii de tokeni sunt suficienți. Cererea unică de 3.179 cuvinte a necesitat 4.953 de tokeni de intrare și 3.930 de tokeni de ieșire.
Ollama își stabilește lungimea implicită a contextului în funcție de memoria disponibilă: 4k tokeni sub 24 GiB de VRAM, 32k de la 24 la 48 GiB și 256k la 48 GiB sau mai mult, conform documentației sale privind lungimea contextului verificată pe 23 octombrie 2026. O poți mări cu OLLAMA_CONTEXT_LENGTH. În LM Studio, setează lungimea contextului când încarci modelul. Dacă un fragment plus traducerea sa nu încape, ieșirea poate fi trunchiată.
4. Împarte în fragmente la limitele paragrafelor, aproximativ 600 de cuvinte
Nu împărți niciodată în interiorul unui paragraf sau al unei propoziții. Fragmentele noastre au vizat 700 de cuvinte și s-au încheiat la cea mai apropiată limită de paragraf, ceea ce a produs șase fragmente de la 243 la 667 de cuvinte. Fragmentele mai mici costă puțin: rularea A a durat 10,4 minute față de 9,5 minute pentru cererea unică, iar un fragment eșuat este ieftin de rerulat.
Păstrează instrucțiunea scurtă și identică pentru fiecare fragment. A noastră a fost: traduce în engleză, păstrează exact un paragraf de ieșire pentru fiecare paragraf de intrare separat printr-o linie goală și produce doar traducerea. Adaugă un glosar la aceeași instrucțiune: o linie pentru fiecare nume, titlu sau termen recurent, în forma Prokurist = chief clerk. Ghidul nostru despre crearea unui glosar de traducere acoperă ce trebuie inclus. Fragmentele scurte pierd povestea din jur, iar glosarul este cel care o transportă.
5. Verifică fiecare fragment înainte de a le uni
Rulează trei verificări pe fiecare fragment:
- Numărul de paragrafe. Ieșirea trebuie să aibă același număr de paragrafe ca intrarea. Aceasta a prins eșecul 2.
- Raportul de lungime pe paragraf. Compară numărul de cuvinte al fiecărui paragraf tradus cu sursa sa. Aceasta a prins eșecul 1, pe care numărul de paragrafe l-a ratat.
- Termenii din glosar pe paragraf. Acolo unde apare un termen sursă, traducerea sa cerută ar trebui să apară de același număr de ori. Aceasta a prins eșecul 3, pe care ambele celelalte verificări l-au ratat. Limbile cu flexiune vor necesita o oarecare judecată aici, deoarece un termen german sau rus își schimbă forma.
Pentru proză germană în engleză, paragrafele rulării A s-au menținut între 0,98 și 1,17 cuvinte ieșite per cuvânt intrat. Paragraful deteriorat al rulării C a fost 0,82. Stabilește-ți propriul interval verificând câteva paragrafe în care ai încredere în perechea ta de limbi; valorile implicite din scriptul nostru sunt un punct de plecare, nu un standard.
Un paragraf semnalat este locul unde să citești mai întâi, nu dovada unei erori. Apoi citește traducerea în sine, în special numele, numerele, negațiile și orice lucru pe care un cititor ar acționa. Lista de verificare pentru controlul calității traducerilor de cărți acoperă această revizuire.
6. Reconstruiește documentul
Modelul returnează text. Titlurile, notele de subsol, tabelele, imaginile, aspectul paginii și stilurile trebuie puse la loc manual sau cu un instrument de conversie. Pentru un raport scurt, acest lucru este minor. Pentru o carte cu note de subsol și tabele, poate dura mai mult decât traducerea.
Cât durează o carte întreagă
Rularea noastră pe fragmente a tradus 3.179 cuvinte în 10,4 minute, aproximativ 300 de cuvinte pe minut pe această mașină. La acest ritm, un roman de 90.000 de cuvinte ar dura aproximativ cinci ore de generare, înainte de verificări și rerulări. Aceasta este aritmetică simplă dintr-o singură rulare, nu un benchmark. Viteza se schimbă cu dimensiunea modelului, cuantizarea, hardware-ul, perechea de limbi și cât de ocupată este mașina cu altceva.
Fișierul modelului avea 17,5 GB pe disc, iar cache-ul de context și bufferele de runtime necesită memorie în plus, așa că o mașină are nevoie de vizibil mai multă memorie liberă decât dimensiunea fișierului. Un model mai mic va rula mai repede și cu mai puțină memorie, de obicei cu un anumit cost în calitate. Testează-l pe un eșantion reprezentativ înainte de a angaja o carte întreagă. Ghidul nostru despre cel mai bun LLM pentru traducere explică cum să construiești acel eșantion și să compari modelele în mod echitabil.
LLM local sau serviciu de traducere de documente
| Întrebare | LLM local | Serviciu de traducere documente |
|---|---|---|
| Poate fișierul să părăsească calculatorul tău? | Nu este necesar | Necesar |
| Ce primești înapoi | Text simplu pe care îl reasamblezi | Un fișier tradus |
| Dimensiunea modelului | Limitată de memoria ta | Limitată de furnizor |
| Consecvența pe parcursul unei cărți întregi | Treaba ta: glosar, segmentare, verificări | Inclusă în unele servicii |
| Costul pe document | Hardware-ul și timpul tău | Preț pe document sau pe cuvânt |
Dacă regulile tale permit încărcarea fișierului, un serviciu de documente elimină cea mai mare parte a muncii de mai sus. BookTranslator traduce fișiere PDF, EPUB și DOCX complete și returnează un fișier tradus, iar întrebările frecvente ale acestuia spun că fișierele încărcate și rezultatul traducerii nu sunt folosite pentru antrenarea modelelor AI. Este un serviciu cloud, deci nu este o opțiune atunci când fișierul trebuie să rămână pe calculatorul tău. Dacă te decizi între a rula modele pe cont propriu și a plăti pentru un serviciu, cât costă de fapt traducerea cu LLM arată cum să bugetezi partea de tokeni.
Obține fișierele de test
Toate fișierele sunt în folderul /files/blog/translate-with-local-llm/:
local_llm_translation_test.py: testul complet împotriva API-ului local al LM Studio, cu toate cele trei rulări. Îndreaptă-l către alt model sau alt text sursă pentru a repeta testul.check_translation.py: compară un text sursă și o traducere paragraf cu paragraf și afișează nepotrivirile de număr de paragrafe, raporturile de lungime în afara intervalului și termenii lipsă din glosar (cu--term "Prokurist=chief clerk"). Funcționează cu rezultatele din orice instrument.results.csv: fiecare cerere cu numărul de paragrafe, numărul de cuvinte, numărul de tokeni și timpul.failure-examples.txt: sursa germană și rezultatul brut al modelului pentru toate cele trei eșecuri.
Rulați check_translation.py cu termenii din glosar pe orice traducere lungă înainte de a vă baza pe ea. Durează câteva secunde și a semnalat toate cele trei eșecuri din acest test. Nu vă poate spune dacă o propoziție fluentă este greșită, așa că paragrafele semnalate sunt locul de unde începeți citirea, nu unde o terminați.
Articole asociate





