BookTranslator
BookTranslator

Jak tłumaczyć długie dokumenty za pomocą lokalnego LLM: fragmenty i kontrole

Przetłumaczyliśmy 3179 słów za pomocą lokalnego LLM w LM Studio na trzy sposoby i każdy z nich ukrywał cichy błąd. Rozmiar fragmentu, ustawienia i kontrole, które je wychwytują.

BookTranslator

BookTranslator Team

12 min read

Ludzie tłumaczą dokumenty za pomocą lokalnego LLM z jednego powodu: plik nie może opuścić ich komputera. Lokalny model może wykonać zadanie, ale daje zwykły tekst, a nie przetłumaczony plik, a jego najgorsze błędy są ciche. W naszym teście pojedyncze żądanie dotyczące 3179-słownego fragmentu zwróciło odpowiednią liczbę akapitów i czysty sygnał zakończenia, a jednak jeden akapit stracił ponad jedną trzecią swojej treści i zyskał zdania, których nie ma w źródle.

Krótka odpowiedź: podziel tekst na granicach akapitów na fragmenty liczące około 600 słów, umieść glosariusz nazw i powtarzających się terminów w instrukcji systemowej, wyłącz tryb myślenia modelu i porównaj każdy fragment ze źródłem akapit po akapicie, zanim mu zaufasz. Każdy z trzech sposobów, w jakich przeprowadziliśmy test, zawiódł w którymś miejscu, a żadna porażka nie wygenerowała komunikatu o błędzie. Licz się z tym, że średniej wielkości model na laptopie będzie potrzebował godzin na całą książkę, i zaplanuj samodzielne odtworzenie formatowania.

Wszystko poniżej pochodzi z jednego przebiegu z 23 października 2026 r.: Qwen 3.6 27B (Q4_K_M GGUF) w LM Studio 0.4.8 na Apple M4 Max z 64 GB pamięci, tłumaczący początek Die Verwandlung Kafki z niemieckiego na angielski. Skrypt testowy, wyniki i surowe przykłady błędów można pobrać bezpłatnie, aby powtórzyć test z własnym modelem.

Kiedy lokalny LLM jest właściwym narzędziem

Uruchom tłumaczenie lokalnie, gdy o wyborze decydują zasady dotyczące dokumentu, a nie wygoda:

  • umowa z klientem, umowa badawcza lub polityka pracodawcy zabrania przesyłania pliku do zewnętrznej usługi;
  • tekst jest osobisty lub poufny i nie możesz najpierw usunąć wrażliwych części; lub
  • musisz przetworzyć wiele plików bez kosztu za dokument, a już posiadasz odpowiedni sprzęt.

Jeśli żaden z tych przypadków nie zachodzi, lokalny model jest zwykle wolniejszą drogą do gorszego wyniku. Rezygnujesz z trzech rzeczy, które zapewnia usługa tłumaczenia dokumentów: przetłumaczonego pliku w oryginalnym formacie, modelu większego niż może pomieścić twoja maszyna oraz przepływu pracy zbudowanego pod spójność w całej książce. Przed wyborem którejkolwiek drogi przejdź przez listę kontrolną prywatności tłumaczenia dokumentów. Obejmuje ona uprawnienia do przetwarzania pliku, minimalne kopie robocze i to, co usługa robi z przesłanymi plikami.

„Lokalny” również wymaga precyzyjnego znaczenia. Model działa na twoim komputerze, a w naszym teście żądania trafiały wyłącznie do localhost. To nie mówi, co aplikacja wokół modelu rejestruje, aktualizuje lub raportuje. Jeśli twoje zasady wymagają dowodu, że nic nie opuszcza urządzenia, sprawdź własne ustawienia i politykę środowiska uruchomieniowego albo uruchom je na maszynie bez dostępu do sieci.

Co testowaliśmy

Przetłumaczyliśmy pierwsze 19 akapitów Die Verwandlung (3179 niemieckich słów) z wydania Project Gutenberg należącego do domeny publicznej. Literacki niemiecki to uczciwy test obciążeniowy: akapity są długie, zdania się zagnieżdżają, a te same postacie i nazwy stanowisk się powtarzają.

Wszystkie trzy przebiegi używały tego samego modelu i ustawień: temperatura 0,2, maksymalnie 12 000 tokenów wyjściowych i okno kontekstu 16 384 tokenów. Instrukcja wymagała jednego akapitu angielskiego na każdy akapit niemiecki i niczego więcej.

PrzebiegCo wysłaliśmyLiczba akapitów wyjściowych (źródło: 19)Liczba słów wyjściowychCzas
A. Dzielone na fragmenty6 fragmentów po około 600 słów, tylko instrukcja193,31910,4 min
B. Dzielone na fragmenty + glosariusz + kontekstTe same fragmenty, 7-terminowy glosariusz i poprzedni akapit źródłowy oznaczony jako „NIE tłumacz”203,44610,5 min
C. Jedno żądanieWszystkie 19 akapitów naraz193,3099,5 min

Każde uruchomienie zakończyło się normalnym sygnałem zatrzymania, a każde zawierało inny cichy błąd. Uruchomienie C zgubiło i wymyśliło tekst. Uruchomienie B przetłumaczyło tekst, który miało pominąć. Uruchomienie A, najczystsze, przypisało jednej postaci niewłaściwą rolę w ostatnim fragmencie.

Błąd 1: Jedno duże żądanie zgubiło część akapitu

Uruchomienie C zakończyło się normalnie i zwróciło dokładnie 19 akapitów. Kontrola liczby akapitów by je przepuściła. Akapit 6 wrócił jednak z 214 słowami przy 260 słowach źródła.

W źródle Gregor patrzy na zegar, uświadamia sobie, że spóźnił się na pociąg, a potem rozważa zwolnienie lekarskie: jego szef przyjdzie z lekarzem od ubezpieczenia zdrowotnego, który uważa wszystkich za zdrowych, ale niechętnych do pracy, a Gregor przyznaje, że właściwie czuje się dobrze, poza sennością i nietypowym apetytem. Uruchomienie C przetłumaczyło pierwszą część, a potem zgubiło cały fragment o zwolnieniu, 98 z 260 niemieckich słów akapitu. W jego miejsce napisało, że Gregor „zostałby natychmiast zwolniony”, że urzędnik biurowy ma skłonność „widzieć we wszystkim, co mu się donosi, okazję do popisania się”, a ta myśl „wywołała uśmiech na jego ustach”. Niczego z tego nie ma w niemieckim tekście.

Uruchomienie z podziałem na fragmenty przetłumaczyło ten sam akapit w całości, na 267 słów.

Jedna próbka nie dowodzi, że długie żądania zawsze zawodzą. Pokazuje jednak, czego szukać: długie pojedyncze żądanie może po cichu skrócić lub wymyślić tekst, a mimo to wyglądać na strukturalnie kompletne. Czytelnik nieznający niemieckiego nie miałby powodu tego zauważyć.

Błąd 2: Model przetłumaczył „kontekst”, który miał pominąć

Częsta wskazówka to dołączanie poprzedniego akapitu do każdego fragmentu, aby model zachował wątek. W uruchomieniu B dodaliśmy go do wiadomości pod etykietą „Kontekst (już przetłumaczony, NIE tłumacz)”.

W fragmencie 4 model i tak go przetłumaczył. Fragment zwrócił cztery akapity zamiast trzech akapitów źródłowych, a pierwszy był drugim tłumaczeniem ostatniego akapitu fragmentu 3. Po połączeniu książka zawierałaby ten akapit dwa razy, za każdym razem inaczej sformułowany.

Praktyczna zasada: jeśli wysyłasz kontekst, trzymaj go poza tekstem, który model ma tłumaczyć, niech będzie krótki, i sprawdzaj liczbę akapitów w każdym fragmencie. Jeśli nie możesz sprawdzić, zrezygnuj z niego.

Błąd 3: Fragment wysłany samodzielnie przypisał postaci niewłaściwą rolę

Uruchomienie A wysyłało każdy fragment bez glosariusza i bez kontekstu. W pierwszych pięciu fragmentach działało to dobrze: Prokurist stał się „starszym urzędnikiem” we wszystkich 16 miejscach, w których się pojawił. Szósty fragment to pojedynczy akapit, w którym starszy urzędnik beszta Gregora przez drzwi. Widziany samodzielnie, model przetłumaczył der Prokurist jako „przedstawiciela handlowego”, czyli własne zajęcie Gregora. Liczba akapitów się zgadzała, a stosunek długości wynosił 1,00, więc żadna kontrola strukturalna tego nie zauważyła.

W uruchomieniu B, które miało glosariusz w instrukcji systemowej i poprzedni akapit jako kontekst, ten sam akapit poprawnie użył „starszego urzędnika”. Ten test nie może powiedzieć, które z dwóch to naprawiło. Ponieważ kontekst spowodował też błąd 2, glosariusz jest bezpieczniejszym miejscem do przenoszenia nazw i ról z fragmentu do fragmentu: jest krótki, znajduje się w instrukcji i można go sprawdzić mechanicznie.

Przepływ pracy, który się sprawdził

1. Najpierw wydobądź z pliku czysty tekst

Lokalny LLM tłumaczy tekst, nie pliki. Przekonwertuj dokument, zanim zaczniesz:

  • DOCX lub EPUB: wyeksportuj do czystego tekstu lub Markdown z jednym akapitem na blok, zachowując nagłówki jako osobne wiersze.
  • PDF z warstwą tekstową: wyodrębnij tekst, a następnie napraw połamane wiersze i dzielenie wyrazów. Nasz przewodnik po naprawianiu złamań wierszy i dzielenia wyrazów w OCR omawia to samo czyszczenie. Konwerter taki jak Docling może wygenerować Markdown z plików PDF i Office.
  • Zeskanowany PDF: najpierw uruchom OCR. Jeśli nie masz pewności, czy PDF ma użyteczny tekst, zobacz Ekstrakcja tekstu z PDF a OCR.

Zachowaj strukturę akapitów. Każda późniejsza kontrola opiera się na jednoznacznym dopasowaniu akapitów źródłowych i przetłumaczonych.

2. Wyłącz tryb myślenia i potwierdź to

Wiele obecnych otwartych modeli rozumuje przed udzieleniem odpowiedzi. W tłumaczeniu marnuje to czas i tokeny wyjściowe. W naszym ustawieniu testowe zapytanie o 200 tokenów zużyło 199 tokenów na rozumowanie i zwróciło pustą odpowiedź.

Wypróbowaliśmy trzy popularne przełączniki. Dodanie /no_think do promptu nic nie dało, a chat_template_kwargs z enable_thinking: false również nic nie dało. Wysłanie "reasoning_effort": "none" w zapytaniu wyłączyło rozumowanie: odpowiedź zgłosiła 0 tokenów rozumowania i zwróciła tłumaczenie bezpośrednio. Ten parametr nie jest wymieniony na stronie LM Studio chat completions, więc traktuj go jako zachowanie zaobserwowane przez nas w wersji 0.4.8 z tym modelem. Sprawdzaj liczbę reasoning_tokens we własnych odpowiedziach, zamiast ufać jakiemukolwiek przełącznikowi.

3. Dopasuj rozmiar okna kontekstu do fragmentów

Okno kontekstu musi pomieścić instrukcję, fragment i pełne tłumaczenie. W naszych uruchomieniach z fragmentacją niemiecki fragment o długości 500–670 słów zużywał około 800–1500 tokenów wejściowych, w zależności od glosariusza i kontekstu, oraz 640–870 tokenów wyjściowych, więc kilka tysięcy tokenów wystarczy. Pojedyncze zapytanie o 3179 słów wymagało 4953 tokenów wejściowych i 3930 tokenów wyjściowych.

Ollama ustawia domyślną długość kontekstu na podstawie dostępnej pamięci: 4 tys. tokenów poniżej 24 GiB VRAM, 32 tys. od 24 do 48 GiB i 256 tys. przy 48 GiB lub więcej, zgodnie z jej dokumentacją długości kontekstu sprawdzoną 23 października 2026 r. Możesz ją zwiększyć za pomocą OLLAMA_CONTEXT_LENGTH. W LM Studio ustaw długość kontekstu podczas ładowania modelu. Jeśli fragment wraz z tłumaczeniem się nie mieści, dane wyjściowe mogą zostać obcięte.

4. Dziel na fragmenty na granicach akapitów, około 600 słów

Nigdy nie dziel wewnątrz akapitu ani zdania. Nasze fragmenty docelowo miały 700 słów i kończyły się na najbliższej granicy akapitu, co dało sześć fragmentów o długości od 243 do 667 słów. Mniejsze fragmenty niewiele kosztują: uruchomienie A zajęło 10,4 minuty w porównaniu z 9,5 minuty dla pojedynczego zapytania, a nieudany fragment można tanio powtórzyć.

Instrukcja powinna być krótka i identyczna dla każdego fragmentu. Nasza brzmiała: przetłumacz na angielski, zachowaj dokładnie jeden akapit wyjściowy na każdy akapit wejściowy oddzielony pustą linią i wypisz tylko tłumaczenie. Dodaj glosariusz do tej samej instrukcji: jedna linia na nazwę, tytuł lub powtarzający się termin, w formacie Prokurist = chief clerk. Nasz przewodnik po tworzeniu glosariusza tłumaczeniowego opisuje, co uwzględnić. Krótkie fragmenty tracą otaczającą historię, a to glosariusz ją przenosi.

5. Sprawdź każdy fragment przed ich połączeniem

Przeprowadź trzy kontrole dla każdego fragmentu:

  1. Liczba akapitów. Dane wyjściowe muszą mieć tyle samo akapitów co dane wejściowe. To wykryło błąd 2.
  2. Stosunek długości na akapit. Porównaj liczbę słów każdego przetłumaczonego akapitu z jego źródłem. To wykryło błąd 1, który umknął kontroli liczby akapitów.
  3. Terminy z glosariusza na akapit. Tam, gdzie występuje termin źródłowy, jego wymagane tłumaczenie powinno pojawić się tyle samo razy. To wykryło błąd 3, który umknął obu pozostałym kontrolom. Języki fleksyjne będą tu wymagać pewnego osądu, ponieważ termin niemiecki lub rosyjski zmienia formę.

Dla prozy niemieckiej na angielską akapity z uruchomienia A mieściły się między 0,98 a 1,17 słowa wyjściowego na słowo wejściowe. Uszkodzony akapit z uruchomienia C miał 0,82. Ustal własny zakres, sprawdzając kilka akapitów, którym ufasz w swojej parze językowej; wartości domyślne w naszym skrypcie są punktem wyjścia, a nie standardem.

Oznaczony akapit to miejsce, od którego należy zacząć czytanie, a nie dowód błędu. Następnie przeczytaj samo tłumaczenie, zwłaszcza nazwy, liczby, przeczenia i wszystko, na czym czytelnik mógłby się opierać. Lista kontrolna QA tłumaczenia książki obejmuje tę weryfikację.

6. Odbuduj dokument

Model zwraca tekst. Nagłówki, przypisy, tabele, obrazy, układ stron i style trzeba przywrócić ręcznie lub za pomocą narzędzia do konwersji. W przypadku krótkiego raportu to drobiazg. W przypadku książki z przypisami i tabelami może to zająć więcej czasu niż tłumaczenie.

Ile czasu zajmuje cała książka

Nasze uruchomienie z fragmentacją przetłumaczyło 3179 słów w 10,4 minuty, około 300 słów na minutę na tej maszynie. W tym tempie powieść o długości 90 000 słów zajęłaby około pięciu godzin generowania, nie licząc kontroli i ponownych uruchomień. To prosta arytmetyka z jednego uruchomienia, a nie benchmark. Szybkość zmienia się wraz z rozmiarem modelu, kwantyzacją, sprzętem, parą językową i tym, ile jeszcze robi maszyna.

Plik modelu miał 17,5 GB na dysku, a pamięć podręczna kontekstu i bufory środowiska uruchomieniowego wymagają dodatkowej pamięci, więc maszyna potrzebuje zauważalnie więcej wolnej pamięci niż rozmiar pliku. Mniejszy model będzie działał szybciej i na mniejszej pamięci, zwykle kosztem pewnej utraty jakości. Przetestuj go na reprezentatywnej próbce, zanim poświęcisz całą książkę. Nasz przewodnik po najlepszym LLM do tłumaczenia wyjaśnia, jak zbudować taką próbkę i uczciwie porównać modele.

Lokalny LLM czy usługa tłumaczenia dokumentów

PytanieLokalny LLMUsługa tłumaczenia dokumentów
Czy plik może opuścić Twoje urządzenie?NiewymaganeWymagane
Co otrzymujesz z powrotemZwykły tekst do samodzielnego złożeniaPrzetłumaczony plik
Rozmiar modeluOgraniczony przez Twoją pamięćOgraniczony przez dostawcę
Spójność w całej książceTwoje zadanie: glosariusz, dzielenie na fragmenty, kontroleWbudowana w niektóre usługi
Koszt na dokumentTwój sprzęt i czasCena za dokument lub za słowo

Jeśli Twoje zasady pozwalają na przesłanie pliku, usługa dokumentowa zdejmuje z Ciebie większość powyższej pracy. BookTranslator tłumaczy kompletne pliki PDF, EPUB i DOCX i zwraca przetłumaczony plik, a jego FAQ mówi, że przesłane pliki i wyniki tłumaczenia nie są wykorzystywane do trenowania modeli AI. To usługa chmurowa, więc nie jest opcją, gdy plik musi pozostać na Twoim urządzeniu. Jeśli zastanawiasz się między samodzielnym uruchamianiem modeli a płaceniem za usługę, ile faktycznie kosztuje tłumaczenie LLM pokazuje, jak zaplanować budżet po stronie tokenów.

Pobierz pliki testowe

Wszystkie pliki znajdują się w folderze /files/blog/translate-with-local-llm/:

  • local_llm_translation_test.py: pełny test przeciwko lokalnemu API LM Studio, ze wszystkimi trzema uruchomieniami. Wskaż mu inny model lub tekst źródłowy, aby powtórzyć test.
  • check_translation.py: porównuje tekst źródłowy i tłumaczenie akapit po akapicie i wypisuje niezgodności liczby akapitów, współczynniki długości poza zakresem oraz brakujące terminy z glosariusza (z --term "Prokurist=chief clerk"). Działa z wynikami dowolnego narzędzia.
  • results.csv: każde żądanie z liczbą akapitów, liczbą słów, liczbą tokenów i czasem.
  • failure-examples.txt: niemiecki tekst źródłowy i surowe wyniki modelu dla wszystkich trzech niepowodzeń.

Uruchom check_translation.py z terminami ze swojego glosariusza na dowolnym długim tłumaczeniu, zanim na nim polegniesz. Zajmuje to kilka sekund i w tym teście wychwyciło wszystkie trzy błędy. Nie powie ci, czy płynne zdanie jest błędne, więc oznaczone akapity to miejsce, od którego zaczynasz czytanie, a nie kończysz.

Powiązane wpisy