स्थानीय LLM से लंबे दस्तावेज़ों का अनुवाद कैसे करें: खंड और जाँच
हमने LM Studio में एक स्थानीय LLM से 3,179 शब्दों का अनुवाद तीन तरीकों से किया, और हर तरीके में एक छिपी हुई गलती थी। वे खंड आकार, सेटिंग्स और जाँचें जो उन्हें पकड़ती हैं।

लोग स्थानीय LLM से दस्तावेज़ों का अनुवाद एक ही कारण से करते हैं: फ़ाइल उनकी मशीन से बाहर नहीं जा सकती। एक स्थानीय मॉडल यह काम कर सकता है, लेकिन यह आपको सादा टेक्स्ट देता है, अनुवादित फ़ाइल नहीं, और इसकी सबसे बुरी गलतियाँ चुपचाप होती हैं। हमारे परीक्षण में, 3,179 शब्दों के अंश के लिए एक ही अनुरोध सही संख्या में पैराग्राफ और एक साफ़ समाप्ति संकेत के साथ लौटा, फिर भी एक पैराग्राफ ने अपनी एक-तिहाई से अधिक सामग्री खो दी थी और ऐसे वाक्य जोड़ लिए थे जो स्रोत में नहीं हैं।
संक्षिप्त उत्तर: टेक्स्ट को पैराग्राफ सीमाओं पर लगभग 600 शब्दों के खंडों में विभाजित करें, नामों और बार-बार आने वाले शब्दों की एक शब्दावली सिस्टम निर्देश में डालें, मॉडल का थिंकिंग मोड बंद करें, और भरोसा करने से पहले हर खंड की उसके स्रोत पैराग्राफ से पैराग्राफ-दर-पैराग्राफ तुलना करें। हमने परीक्षण चलाने के तीनों तरीकों में से प्रत्येक कहीं न कहीं विफल रहा, और किसी भी विफलता ने त्रुटि संदेश उत्पन्न नहीं किया। एक लैपटॉप पर मध्यम आकार के मॉडल से पूरी किताब के लिए घंटों लगने की अपेक्षा करें, और स्वयं फ़ॉर्मेटिंग फिर से बनाने की योजना बनाएं।
नीचे सब कुछ 23 अक्टूबर, 2026 को एक रन से आया है: Apple M4 Max पर 64 GB मेमोरी के साथ LM Studio 0.4.8 में Qwen 3.6 27B (Q4_K_M GGUF), काफ्का की Die Verwandlung की शुरुआत जर्मन से अंग्रेज़ी में अनुवाद करते हुए। परीक्षण स्क्रिप्ट, परिणाम, और कच्चे विफलता उदाहरण मुफ़्त डाउनलोड के लिए उपलब्ध हैं ताकि आप इसे अपने मॉडल के साथ दोहरा सकें।
जब स्थानीय LLM सही उपकरण होता है
स्थानीय रूप से अनुवाद तब चलाएँ जब दस्तावेज़ के नियम, सुविधा नहीं, निर्णय लेते हैं:
- क्लाइंट अनुबंध, शोध समझौता, या नियोक्ता नीति फ़ाइल को बाहरी सेवा पर अपलोड करने से मना करती है;
- पाठ व्यक्तिगत या गोपनीय है और आप संवेदनशील हिस्सों को पहले नहीं हटा सकते; या
- आपको प्रति-दस्तावेज़ लागत के बिना कई फ़ाइलों को संसाधित करना है और आपके पास पहले से उपयुक्त हार्डवेयर है।
यदि इनमें से कोई भी लागू नहीं होता है, तो स्थानीय मॉडल आमतौर पर बदतर परिणाम के लिए धीमा रास्ता है। आप तीन चीज़ें छोड़ देते हैं जो एक दस्तावेज़ अनुवाद सेवा प्रदान करती है: मूल प्रारूप में अनुवादित फ़ाइल, आपकी मशीन की क्षमता से बड़ा मॉडल, और पूरी किताब में निरंतरता के लिए बनाया गया वर्कफ़्लो। किसी भी मार्ग को चुनने से पहले, दस्तावेज़ अनुवाद गोपनीयता चेकलिस्ट पर काम करें। यह फ़ाइल को संसाधित करने के अधिकार, न्यूनतम कार्यशील प्रतियाँ, और एक सेवा अपलोड के साथ क्या करती है, को कवर करती है।
"स्थानीय" का भी एक सटीक अर्थ होना चाहिए। मॉडल आपके कंप्यूटर पर चलता है, और हमारे परीक्षण में अनुरोध केवल localhost पर गए। यह आपको नहीं बताता कि मॉडल के आसपास का ऐप क्या लॉग करता है, अपडेट करता है, या रिपोर्ट करता है। यदि आपके नियमों के लिए इस बात का प्रमाण आवश्यक है कि कुछ भी डिवाइस से बाहर नहीं जाता है, तो रनटाइम की अपनी सेटिंग्स और नीति की जाँच करें, या इसे बिना नेटवर्क पहुँच वाली मशीन पर चलाएँ।
हमने क्या परीक्षण किया
हमने सार्वजनिक डोमेन प्रोजेक्ट गुटेनबर्ग संस्करण से Die Verwandlung के पहले 19 पैराग्राफ (3,179 जर्मन शब्द) का अनुवाद किया। साहित्यिक जर्मन एक उचित तनाव परीक्षण है: पैराग्राफ लंबे हैं, वाक्य नेस्टेड हैं, और वही पात्र और नौकरी के शीर्षक बार-बार आते हैं।
सभी तीन रनों ने एक ही मॉडल और सेटिंग्स का उपयोग किया: तापमान 0.2, अधिकतम 12,000 आउटपुट टोकन, और 16,384-टोकन संदर्भ विंडो। निर्देश में प्रत्येक जर्मन पैराग्राफ के लिए एक अंग्रेज़ी पैराग्राफ और कुछ नहीं मांगा गया था।
| रन | हमने क्या भेजा | पैराग्राफ आउट (स्रोत: 19) | शब्द आउट | समय |
|---|---|---|---|---|
| A. खंडित | लगभग 600 शब्दों के 6 खंड, केवल निर्देश | 19 | 3,319 | 10.4 मिनट |
| B. खंडित + शब्दावली + संदर्भ | वही खंड, 7-शब्दों की शब्दावली, और पिछला स्रोत पैराग्राफ "अनुवाद न करें" के रूप में चिह्नित | 20 | 3,446 | 10.5 मिनट |
| C. एक अनुरोध | एक साथ सभी 19 पैराग्राफ | 19 | 3,309 | 9.5 मिनट |
प्रत्येक रन सामान्य स्टॉप सिग्नल के साथ समाप्त हुआ, और प्रत्येक रन में एक अलग मौन त्रुटि थी। रन C ने पाठ छोड़ा और मनगढ़ंत पाठ जोड़ा। रन B ने उस पाठ का अनुवाद किया जिसे छोड़ने के लिए कहा गया था। रन A, जो सबसे साफ़ था, ने अपने अंतिम खंड में एक पात्र को गलत भूमिका दी।
विफलता 1: एक बड़े अनुरोध ने पैराग्राफ का हिस्सा छोड़ दिया
रन C सामान्य रूप से समाप्त हुआ और ठीक 19 पैराग्राफ लौटाए। पैराग्राफ-गणना जाँच इसे पास कर देती। हालाँकि, पैराग्राफ 6, 260-शब्दों के स्रोत के लिए 214 शब्दों के साथ वापस आया।
स्रोत में, ग्रेगोर घड़ी देखता है, महसूस करता है कि उसकी ट्रेन छूट गई है, और फिर बीमारी की छुट्टी लेने के बारे में सोचता है: उसका बॉस स्वास्थ्य-बीमा डॉक्टर के साथ आएगा, जो सभी को स्वस्थ लेकिन काम से जी चुराने वाला मानता है, और ग्रेगोर स्वीकार करता है कि नींद और असामान्य भूख के अलावा वह वास्तव में ठीक महसूस करता है। रन C ने पहला भाग अनुवादित किया, फिर पूरा बीमारी-की-छुट्टी वाला अंश छोड़ दिया, जो पैराग्राफ के 260 जर्मन शब्दों में से 98 शब्द थे। उसके स्थान पर उसने लिखा कि ग्रेगोर "तुरंत बर्खास्त कर दिया जाता," कि कार्यालय सहायक "उसे रिपोर्ट की गई हर बात को खुद को दिखाने का अवसर मानता है," और उस विचार ने "उसके होंठों पर मुस्कान ला दी।" इनमें से कुछ भी जर्मन में नहीं है।
खंडित रन ने उसी पैराग्राफ का पूरा अनुवाद किया, 267 शब्दों में।
एक नमूना यह साबित नहीं करता कि लंबे अनुरोध हमेशा विफल होते हैं। यह दिखाता है कि क्या जाँचना है: एक लंबा एकल अनुरोध चुपचाप पाठ को संक्षिप्त या मनगढ़ंत कर सकता है जबकि संरचनात्मक रूप से पूर्ण दिखता रहता है। जर्मन न जानने वाले पाठक के पास ध्यान देने का कोई कारण नहीं होता।
विफलता 2: मॉडल ने "संदर्भ" का अनुवाद किया जिसे छोड़ने के लिए कहा गया था
एक सामान्य सुझाव है कि प्रत्येक खंड के साथ पिछला पैराग्राफ भेजें ताकि मॉडल सूत्र बनाए रखे। रन B में, हमने इसे संदेश में "संदर्भ (पहले से अनुवादित, अनुवाद न करें)" लेबल के तहत जोड़ा।
खंड 4 में मॉडल ने फिर भी इसका अनुवाद किया। खंड ने तीन स्रोत पैराग्राफों के लिए चार पैराग्राफ लौटाए, और पहला खंड 3 के अंतिम पैराग्राफ का दूसरा अनुवाद था। एक साथ जोड़ने पर, पुस्तक में वह पैराग्राफ दो बार होता, हर बार अलग शब्दों में।
व्यावहारिक नियम: यदि आप संदर्भ भेजते हैं, तो उसे उस पाठ से बाहर रखें जिसका अनुवाद मॉडल से करने को कहा गया है, उसे छोटा रखें, और प्रत्येक खंड की पैराग्राफ-गणना जाँचें। यदि आप जाँच नहीं कर सकते, तो उसे छोड़ दें।
विफलता 3: अकेले भेजे गए खंड ने एक पात्र को गलत भूमिका दी
रन A ने प्रत्येक खंड बिना शब्दावली और बिना संदर्भ के भेजा। पहले पाँच खंडों के लिए यह अच्छी तरह काम किया: Prokurist जहाँ भी 16 बार आया, वहाँ "मुख्य क्लर्क" बन गया। छठा खंड एक ही पैराग्राफ था जिसमें मुख्य क्लर्क दरवाज़े से ग्रेगोर को डाँटता है। अकेले देखे जाने पर, मॉडल ने der Prokurist का अनुवाद "यात्रा विक्रेता" के रूप में किया, जो ग्रेगोर की अपनी नौकरी है। पैराग्राफ-गणना मेल खा गई और लंबाई अनुपात 1.00 था, इसलिए किसी भी संरचनात्मक जाँच ने ध्यान नहीं दिया।
रन B में, जिसमें सिस्टम निर्देश में शब्दावली और संदर्भ के रूप में पिछला पैराग्राफ था, उसी पैराग्राफ ने सही ढंग से "मुख्य क्लर्क" का उपयोग किया। यह परीक्षण यह नहीं बता सकता कि दोनों में से किसने इसे ठीक किया। चूँकि संदर्भ ने विफलता 2 भी पैदा की, शब्दावली खंड से खंड तक नाम और भूमिकाएँ ले जाने के लिए अधिक सुरक्षित जगह है: यह छोटी है, यह निर्देश में बैठती है, और आप इसे यांत्रिक रूप से जाँच सकते हैं।
जो कार्यप्रवाह टिका रहा
1. पहले फ़ाइल से सादा पाठ निकालें
एक स्थानीय LLM पाठ का अनुवाद करता है, फ़ाइलों का नहीं। शुरू करने से पहले दस्तावेज़ को रूपांतरित करें:
- DOCX या EPUB: प्रत्येक ब्लॉक में एक पैराग्राफ के साथ सादे पाठ या Markdown में निर्यात करें, शीर्षकों को अलग पंक्तियों के रूप में रखें।
- पाठ परत वाला PDF: पाठ निकालें, फिर टूटी पंक्तियों और हाइफ़नेशन को ठीक करें। OCR पंक्ति विराम और हाइफ़नेशन ठीक करने पर हमारी मार्गदर्शिका वही सफ़ाई कवर करती है। Docling जैसा कनवर्टर PDF और Office फ़ाइलों से Markdown बना सकता है।
- स्कैन किया गया PDF: पहले OCR चलाएँ। यदि आप अनिश्चित हैं कि PDF में उपयोगी पाठ है या नहीं, तो PDF पाठ निष्कर्षण बनाम OCR देखें।
पैराग्राफ संरचना को बनाए रखें। आगे के प्रत्येक जाँच स्रोत और अनुवादित पैराग्राफ के बीच एक-से-एक मिलान पर निर्भर करती है।
2. थिंकिंग मोड बंद करें और इसकी पुष्टि करें
कई वर्तमान ओपन मॉडल उत्तर देने से पहले सोचते हैं। अनुवाद के लिए, यह समय और आउटपुट टोकन बर्बाद करता है। हमारे सेटअप में, 200-टोकन के परीक्षण अनुरोध ने तर्क पर 199 टोकन खर्च किए और खाली उत्तर लौटाया।
हमने तीन सामान्य स्विच आज़माए। प्रॉम्प्ट में /no_think जोड़ने से कुछ नहीं हुआ, और enable_thinking: false के साथ chat_template_kwargs से कुछ नहीं हुआ। अनुरोध में "reasoning_effort": "none" भेजने से तर्क बंद हो गया: प्रतिक्रिया ने 0 तर्क टोकन की सूचना दी और सीधे अनुवाद लौटाया। यह पैरामीटर LM Studio के चैट कम्प्लीशन पेज पर सूचीबद्ध नहीं है, इसलिए इसे उस व्यवहार के रूप में लें जो हमने संस्करण 0.4.8 में इस मॉडल के साथ देखा। किसी भी स्विच पर भरोसा करने के बजाय अपनी प्रतिक्रियाओं में reasoning_tokens की गिनती जाँचें।
3. चंक्स से पहले संदर्भ विंडो का आकार निर्धारित करें
संदर्भ विंडो में निर्देश, चंक और पूरा अनुवाद समाना चाहिए। हमारे चंक्ड रन में, 500- से 670-शब्द के जर्मन चंक ने शब्दावली और संदर्भ के आधार पर लगभग 800 से 1,500 इनपुट टोकन और 640 से 870 आउटपुट टोकन का उपयोग किया, इसलिए कुछ हज़ार टोकन पर्याप्त हैं। एकल 3,179-शब्द अनुरोध को 4,953 इनपुट टोकन और 3,930 आउटपुट टोकन की आवश्यकता थी।
Ollama अपनी डिफ़ॉल्ट संदर्भ लंबाई उपलब्ध मेमोरी के आधार पर सेट करता है: 24 GiB VRAM से कम पर 4k टोकन, 24 से 48 GiB पर 32k, और 48 GiB या अधिक पर 256k, 23 अक्टूबर, 2026 को जाँचे गए इसके संदर्भ लंबाई दस्तावेज़ के अनुसार। आप इसे OLLAMA_CONTEXT_LENGTH से बढ़ा सकते हैं। LM Studio में, मॉडल लोड करते समय संदर्भ लंबाई सेट करें। यदि कोई चंक और उसका अनुवाद फिट नहीं होता है, तो आउटपुट कट सकता है।
4. पैराग्राफ सीमाओं पर, लगभग 600 शब्दों पर चंक करें
किसी पैराग्राफ या वाक्य के अंदर कभी विभाजित न करें। हमारे चंक्स का लक्ष्य 700 शब्द था और वे निकटतम पैराग्राफ सीमा पर समाप्त हुए, जिससे 243 से 667 शब्दों के छह चंक बने। छोटे चंक्स की लागत कम होती है: रन A ने एकल अनुरोध के 9.5 मिनट की तुलना में 10.4 मिनट लिए, और विफल चंक को फिर से चलाना सस्ता है।
निर्देश को छोटा और प्रत्येक चंक के लिए समान रखें। हमारा निर्देश था: अंग्रेज़ी में अनुवाद करें, प्रत्येक इनपुट पैराग्राफ के लिए एक खाली पंक्ति से अलग किए गए ठीक एक आउटपुट पैराग्राफ रखें, और केवल अनुवाद आउटपुट करें। उसी निर्देश में एक शब्दावली जोड़ें: प्रत्येक नाम, शीर्षक, या आवर्ती शब्द के लिए एक पंक्ति, Prokurist = chief clerk के रूप में। अनुवाद शब्दावली बनाने पर हमारी मार्गदर्शिका में बताया गया है कि क्या शामिल करना है। छोटे चंक्स आसपास की कहानी खो देते हैं, और शब्दावली ही उसे आगे बढ़ाती है।
5. उन्हें जोड़ने से पहले प्रत्येक चंक की जाँच करें
प्रत्येक चंक पर तीन जाँचें चलाएँ:
- पैराग्राफ गिनती। आउटपुट में इनपुट के समान पैराग्राफ होने चाहिए। इसने विफलता 2 को पकड़ा।
- प्रति पैराग्राफ लंबाई अनुपात। प्रत्येक अनुवादित पैराग्राफ के शब्दों की गिनती की तुलना उसके स्रोत से करें। इसने विफलता 1 को पकड़ा, जिसे पैराग्राफ गिनती ने नहीं पकड़ा।
- प्रति पैराग्राफ शब्दावली शब्द। जहाँ स्रोत शब्द आता है, वहाँ उसका आवश्यक अनुवाद समान संख्या में आना चाहिए। इसने विफलता 3 को पकड़ा, जिसे दोनों अन्य जाँचों ने नहीं पकड़ा। विभक्त भाषाओं में यहाँ कुछ निर्णय की आवश्यकता होगी, क्योंकि जर्मन या रूसी शब्द का रूप बदलता है।
जर्मन से अंग्रेज़ी गद्य के लिए, रन A के पैराग्राफ प्रति इनपुट शब्द 0.98 से 1.17 आउटपुट शब्दों के बीच रहे। रन C का क्षतिग्रस्त पैराग्राफ 0.82 था। अपनी भाषा जोड़ी में कुछ भरोसेमंद पैराग्राफ जाँचकर अपनी सीमा निर्धारित करें; हमारी स्क्रिप्ट में डिफ़ॉल्ट एक शुरुआती बिंदु हैं, मानक नहीं।
चिह्नित पैराग्राफ पहले पढ़ने की जगह है, त्रुटि का प्रमाण नहीं। फिर अनुवाद को स्वयं पढ़ें, विशेष रूप से नाम, संख्याएँ, नकारात्मकताएँ, और कोई भी चीज़ जिस पर पाठक कार्रवाई करेगा। पुस्तक अनुवाद QA चेकलिस्ट उस समीक्षा को कवर करती है।
6. दस्तावेज़ का पुनर्निर्माण करें
मॉडल टेक्स्ट लौटाता है। शीर्षक, फ़ुटनोट, तालिकाएँ, चित्र, पृष्ठ लेआउट, और शैलियाँ हाथ से या किसी रूपांतरण उपकरण द्वारा वापस डालनी होंगी। एक छोटी रिपोर्ट के लिए यह मामूली है। फ़ुटनोट और तालिकाओं वाली पुस्तक के लिए यह अनुवाद से अधिक समय ले सकता है।
पूरी पुस्तक में कितना समय लगता है
हमारे चंक्ड रन ने 3,179 शब्दों का अनुवाद 10.4 मिनट में किया, इस मशीन पर लगभग 300 शब्द प्रति मिनट। उस दर पर 90,000-शब्द के उपन्यास को जाँच और पुनः रन से पहले लगभग पाँच घंटे का जनरेशन लगेगा। यह एक रन से सरल अंकगणित है, बेंचमार्क नहीं। गति मॉडल आकार, क्वांटाइज़ेशन, हार्डवेयर, भाषा जोड़ी, और मशीन कितना अन्य काम कर रही है, के साथ बदलती है।
मॉडल फ़ाइल डिस्क पर 17.5 GB थी, और संदर्भ कैश और रनटाइम बफ़र्स को उसके अतिरिक्त मेमोरी चाहिए, इसलिए एक मशीन को फ़ाइल आकार से काफ़ी अधिक मुक्त मेमोरी चाहिए। छोटा मॉडल तेज़ी से और कम मेमोरी पर चलेगा, आमतौर पर गुणवत्ता में कुछ लागत पर। पूरी पुस्तक के लिए प्रतिबद्ध होने से पहले इसे एक प्रतिनिधि नमूने पर परखें। अनुवाद के लिए सर्वश्रेष्ठ LLM पर हमारी मार्गदर्शिका बताती है कि वह नमूना कैसे बनाएँ और मॉडलों की निष्पक्ष तुलना कैसे करें।
स्थानीय LLM या दस्तावेज़ अनुवाद सेवा
| प्रश्न | स्थानीय LLM | दस्तावेज़ अनुवाद सेवा |
|---|---|---|
| क्या फ़ाइल आपकी मशीन से बाहर जा सकती है? | आवश्यक नहीं | आवश्यक |
| क्या वापस आता है | सादा टेक्स्ट जिसे आप फिर से जोड़ते हैं | एक अनुवादित फ़ाइल |
| मॉडल का आकार | आपकी मेमोरी द्वारा सीमित | प्रदाता द्वारा सीमित |
| पूरी पुस्तक में एकरूपता | आपका काम: शब्दावली, चंकिंग, जाँच | कुछ सेवाओं में अंतर्निहित |
| प्रति दस्तावेज़ लागत | आपका हार्डवेयर और समय | प्रति-दस्तावेज़ या प्रति-शब्द मूल्य |
यदि आपके नियम फ़ाइल अपलोड करने की अनुमति देते हैं, तो एक दस्तावेज़ सेवा ऊपर दिए गए अधिकांश काम को हटा देती है। BookTranslator पूर्ण PDF, EPUB, और DOCX फ़ाइलों का अनुवाद करता है और एक अनुवादित फ़ाइल लौटाता है, और इसके FAQ में कहा गया है कि अपलोड की गई फ़ाइलें और अनुवाद आउटपुट AI मॉडल को प्रशिक्षित करने के लिए उपयोग नहीं किए जाते हैं। यह एक क्लाउड सेवा है, इसलिए यह तब विकल्प नहीं है जब फ़ाइल आपकी मशीन पर ही रहनी चाहिए। यदि आप स्वयं मॉडल चलाने और सेवा के लिए भुगतान करने के बीच निर्णय ले रहे हैं, तो LLM अनुवाद की वास्तविक लागत दिखाता है कि टोकन पक्ष को कैसे बजट करें।
परीक्षण फ़ाइलें प्राप्त करें
सभी फ़ाइलें /files/blog/translate-with-local-llm/ फ़ोल्डर में हैं:
local_llm_translation_test.py: LM Studio के स्थानीय API के विरुद्ध पूर्ण परीक्षण, सभी तीन रन के साथ। परीक्षण दोहराने के लिए इसे किसी अन्य मॉडल या स्रोत पाठ पर इंगित करें।check_translation.py: एक स्रोत पाठ और अनुवाद की अनुच्छेद-दर-अनुच्छेद तुलना करता है और अनुच्छेद-गणना बेमेल, सीमा से बाहर लंबाई अनुपात, और अनुपलब्ध शब्दावली शब्दों (--term "Prokurist=chief clerk"के साथ) को प्रिंट करता है। यह किसी भी टूल के आउटपुट के साथ काम करता है।results.csv: प्रत्येक अनुरोध उसके अनुच्छेद गणना, शब्द गणना, टोकन गणना, और समय के साथ।failure-examples.txt: सभी तीन विफलताओं के लिए जर्मन स्रोत और कच्चा मॉडल आउटपुट।
किसी भी लंबे अनुवाद पर भरोसा करने से पहले अपने शब्दावली शब्दों के साथ check_translation.py चलाएँ। इसमें कुछ ही सेकंड लगते हैं, और इसने इस परीक्षण में तीनों विफलताओं को चिह्नित किया। यह आपको यह नहीं बता सकता कि कोई प्रवाहमय वाक्य गलत है, इसलिए चिह्नित अनुच्छेद वहीं से शुरू होते हैं जहाँ से आपका पठन आरंभ होता है, वहाँ से नहीं जहाँ वह समाप्त होता है।
संबंधित लेख





