BookTranslator
BookTranslator

چگونه اسناد طولانی را با یک LLM محلی ترجمه کنیم: تکه‌بندی و بررسی

ما ۳٬۱۷۹ کلمه را با یک LLM محلی در LM Studio به سه روش ترجمه کردیم و هر روش یک خطای خاموش را پنهان می‌کرد. اندازه تکه، تنظیمات و بررسی‌هایی که آن‌ها را آشکار می‌کنند.

BookTranslator

BookTranslator Team

14 min read

مردم به یک دلیل اسناد را با LLM محلی ترجمه می‌کنند: فایل نمی‌تواند از دستگاهشان خارج شود. یک مدل محلی می‌تواند کار را انجام دهد، اما به شما متن ساده می‌دهد، نه یک فایل ترجمه‌شده، و بدترین اشتباهاتش خاموش هستند. در آزمایش ما، یک درخواست واحد برای گزیده‌ای ۳٬۱۷۹ کلمه‌ای با تعداد درست پاراگراف‌ها و یک سیگنال پایان تمیز بازگشت، با این حال یک پاراگراف بیش از یک‌سوم محتوایش را از دست داده بود و جملاتی به دست آورده بود که در منبع نیستند.

پاسخ کوتاه: متن را در مرزهای پاراگراف به تکه‌های حدوداً ۶۰۰ کلمه‌ای تقسیم کنید، واژه‌نامه‌ای از نام‌ها و اصطلاحات تکرارشونده را در دستور سیستم قرار دهید، حالت تفکر مدل را خاموش کنید، و هر تکه را پاراگراف به پاراگراف با منبعش مقایسه کنید پیش از آنکه به آن اعتماد کنید. هر یک از سه روشی که آزمایش را اجرا کردیم جایی شکست خورد، و هیچ شکستی پیام خطایی تولید نکرد. انتظار داشته باشید یک مدل میان‌رده روی یک لپ‌تاپ برای یک کتاب کامل ساعت‌ها طول بکشد، و برنامه‌ریزی کنید که قالب‌بندی را خودتان بازسازی کنید.

همه چیز در ادامه از یک اجرا در ۲۳ اکتبر ۲۰۲۶ می‌آید: Qwen 3.6 27B (Q4_K_M GGUF) در LM Studio 0.4.8 روی یک Apple M4 Max با ۶۴ گیگابایت حافظه، که آغاز Die Verwandlung کافکا را از آلمانی به انگلیسی ترجمه می‌کند. اسکریپت آزمایش، نتایج و نمونه‌های خام شکست برای دانلود رایگان در دسترس هستند تا بتوانید آن را با مدل خودتان تکرار کنید.

چه زمانی یک LLM محلی ابزار درست است

ترجمه را به‌صورت محلی اجرا کنید وقتی قوانین سند، نه راحتی، تصمیم را می‌گیرند:

  • یک قرارداد مشتری، توافق‌نامه پژوهشی یا سیاست کارفرما آپلود فایل به یک سرویس خارجی را ممنوع می‌کند؛
  • متن شخصی یا محرمانه است و نمی‌توانید ابتدا بخش‌های حساس را حذف کنید؛ یا
  • نیاز دارید بسیاری از فایل‌ها را بدون هزینه به‌ازای هر سند پردازش کنید و از قبل سخت‌افزار مناسب دارید.

اگر هیچ‌یک از این موارد صدق نمی‌کند، یک مدل محلی معمولاً مسیر کندتر به نتیجه‌ای بدتر است. شما سه چیز را که یک سرویس ترجمه سند فراهم می‌کند از دست می‌دهید: یک فایل ترجمه‌شده در قالب اصلی، مدلی بزرگ‌تر از آنچه دستگاهتان می‌تواند نگه دارد، و یک گردش کار ساخته‌شده برای یکدستی در سراسر یک کتاب. پیش از انتخاب هر یک از این دو مسیر، چک‌لیست حریم خصوصی ترجمه سند را مرور کنید. این چک‌لیست اختیار پردازش فایل، نسخه‌های کاری حداقلی، و آنچه یک سرویس با آپلودها انجام می‌دهد را پوشش می‌دهد.

«محلی» همچنین به معنای دقیقی نیاز دارد. مدل روی رایانه شما اجرا می‌شود، و در آزمایش ما درخواست‌ها فقط به localhost رفتند. این به شما نمی‌گوید برنامه‌ای که مدل را احاطه کرده چه چیزهایی را ثبت، به‌روزرسانی یا گزارش می‌کند. اگر قوانین شما مدرکی مبنی بر خارج نشدن هیچ چیز از دستگاه می‌خواهند، تنظیمات و سیاست خود زمان اجرا را بررسی کنید، یا آن را روی دستگاهی بدون دسترسی به شبکه اجرا کنید.

آنچه آزمایش کردیم

ما ۱۹ پاراگراف اول Die Verwandlung (۳٬۱۷۹ کلمه آلمانی) را از نسخه پروژه گوتنبرگ که در مالکیت عمومی است ترجمه کردیم. آلمانی ادبی یک آزمون فشار منصفانه است: پاراگراف‌ها طولانی‌اند، جملات تودرتو هستند، و همان شخصیت‌ها و عناوین شغلی تکرار می‌شوند.

هر سه اجرا از مدل و تنظیمات یکسانی استفاده کردند: دما ۰٫۲، حداکثر ۱۲٬۰۰۰ توکن خروجی، و پنجره زمینه ۱۶٬۳۸۴ توکنی. دستور درخواست کرد برای هر پاراگراف آلمانی یک پاراگراف انگلیسی و نه چیز دیگری.

اجراآنچه فرستادیمپاراگراف‌های خروجی (منبع: ۱۹)کلمات خروجیزمان
الف. تکه‌بندی‌شده۶ تکه حدوداً ۶۰۰ کلمه‌ای، فقط دستور193,319۱۰٫۴ دقیقه
ب. تکه‌بندی‌شده + واژه‌نامه + زمینههمان قطعه‌ها، یک واژه‌نامهٔ ۷ اصطلاحی، و پاراگراف مبدأ قبلی که با برچسب «ترجمه نکنید» علامت‌گذاری شده است203,446۱۰٫۵ دقیقه
ج. یک درخواستهمهٔ ۱۹ پاراگراف یک‌جا193,309۹٫۵ دقیقه

هر اجرا با یک سیگنال توقف عادی پایان یافت، و هر اجرا حاوی یک خطای خاموش متفاوت بود. اجرای ج متن را حذف و از خودش ساخت. اجرای ب متنی را ترجمه کرد که به آن گفته شده بود رد کند. اجرای الف، که پاکیزه‌ترین بود، در آخرین قطعه‌اش به یک شخصیت نقش اشتباه داد.

خطای ۱: یک درخواست بزرگ بخشی از یک پاراگراف را حذف کرد

اجرای ج به‌طور عادی پایان یافت و دقیقاً ۱۹ پاراگراف برگرداند. یک بررسی تعداد پاراگراف آن را قبول می‌کرد. اما پاراگراف ۶ با ۲۱۴ کلمه در برابر متن مبدأ ۲۶۰ کلمه‌ای بازگشت.

در متن مبدأ، گرگور به ساعت نگاه می‌کند، می‌فهمد قطارش را از دست داده، و بعد به فکر مرخصی استعلاجی می‌افتد: رئیسش با پزشک بیمهٔ درمانی می‌آمد، کسی که همه را سالم اما کارگریز می‌داند، و گرگور اعتراف می‌کند که در واقع جز خواب‌آلودگی و اشتهای غیرعادی، حالش خوب است. اجرای ج بخش اول را ترجمه کرد، سپس تمام گذر مربوط به مرخصی استعلاجی را حذف کرد، یعنی ۹۸ کلمه از ۲۶۰ کلمهٔ آلمانی آن پاراگراف را. به‌جای آن نوشت که گرگور «همان‌جا اخراج می‌شد»، که منشی دفتر «هر چیزی را که به او گزارش می‌شود فرصتی برای خودنمایی می‌بیند»، و این فکر «لبخندی بر لبش آورد». هیچ‌یک از این‌ها در متن آلمانی نیست.

اجرای قطعه‌بندی‌شده همان پاراگراف را به‌طور کامل، با ۲۶۷ کلمه، ترجمه کرد.

یک نمونه ثابت نمی‌کند که درخواست‌های طولانی همیشه شکست می‌خورند. اما نشان می‌دهد چه چیزی را باید بررسی کرد: یک درخواست طولانیِ واحد می‌تواند بی‌صدا متن را فشرده یا از خود بسازد و در همان حال از نظر ساختاری کامل به نظر برسد. خواننده‌ای که آلمانی نمی‌داند هیچ دلیلی برای متوجه شدن نداشت.

خطای ۲: مدل «زمینه‌ای» را که به آن گفته شده بود رد کند، ترجمه کرد

یک نکتهٔ رایج این است که پاراگراف قبلی را همراه هر قطعه بفرستید تا مدل رشتهٔ مطلب را حفظ کند. در اجرای ب، آن را در پیام زیر برچسب «زمینه (قبلاً ترجمه شده، ترجمه نکنید)» اضافه کردیم.

در قطعهٔ ۴ مدل به‌هرحال آن را ترجمه کرد. قطعه برای سه پاراگراف مبدأ چهار پاراگراف برگرداند، و اولی ترجمهٔ دومی از پاراگراف آخر قطعهٔ ۳ بود. اگر به هم می‌پیوستند، کتاب آن پاراگراف را دو بار، با عبارت‌پردازی متفاوت در هر بار، در خود داشت.

قاعدهٔ عملی: اگر زمینه می‌فرستید، آن را بیرون از متنی نگه دارید که از مدل خواسته شده ترجمه کند، کوتاهش نگه دارید، و تعداد پاراگراف هر قطعه را بررسی کنید. اگر نمی‌توانید بررسی کنید، آن را کنار بگذارید.

خطای ۳: یک قطعهٔ تنها به یک شخصیت نقش اشتباه داد

اجرای الف هر قطعه را بدون واژه‌نامه و بدون زمینه فرستاد. برای پنج قطعهٔ اول این خوب کار کرد: Prokurist در تمام ۱۶ جایی که ظاهر شد «رئیس دفتر» شد. قطعهٔ ششم یک پاراگراف تنها بود که در آن رئیس دفتر از پشت در گرگور را سرزنش می‌کند. مدل که آن را تنها دید، der Prokurist را «مسافر فروش» ترجمه کرد، که شغل خود گرگور است. تعداد پاراگراف مطابقت داشت و نسبت طول ۱٫۰۰ بود، بنابراین هیچ‌یک از بررسی‌های ساختاری متوجه نشد.

در اجرای ب، که واژه‌نامه در دستور سیستم و پاراگراف قبلی به‌عنوان زمینه داشت، همان پاراگراف به‌درستی از «رئیس دفتر» استفاده کرد. این آزمون نمی‌تواند بگوید کدام یک از این دو آن را درست کرد. چون زمینه همچنین باعث خطای ۲ شد، واژه‌نامه جای امن‌تری برای حمل نام‌ها و نقش‌ها از قطعه‌ای به قطعهٔ دیگر است: کوتاه است، در دستور قرار دارد، و می‌توانید آن را به‌صورت مکانیکی بررسی کنید.

گردش کاری که دوام آورد

۱. اول متن ساده را از فایل بیرون بیاورید

یک LLM محلی متن را ترجمه می‌کند، نه فایل را. سند را قبل از شروع تبدیل کنید:

  • DOCX یا EPUB: به متن ساده یا Markdown با یک پاراگراف در هر بلوک صادر کنید و سرتیترها را به‌صورت خطوط جداگانه نگه دارید.
  • PDF با لایهٔ متنی: متن را استخراج کنید، سپس خطوط شکسته و خط‌تیره‌گذاری را ترمیم کنید. راهنمای ما برای رفع شکستگی خطوط و خط‌تیره‌گذاری OCR همان پاک‌سازی را پوشش می‌دهد. یک مبدل مانند Docling می‌تواند از PDFها و فایل‌های آفیس Markdown تولید کند.
  • PDF اسکن‌شده: ابتدا OCR را اجرا کنید. اگر مطمئن نیستید که یک PDF متن قابل استفاده دارد، استخراج متن PDF در برابر OCR را ببینید.

ساختار پاراگراف را دست‌نخورده نگه دارید. هر بررسی بعدی به تطابق یک‌به‌یک بین پاراگراف‌های مبدأ و ترجمه‌شده وابسته است.

۲. حالت تفکر را خاموش کنید و آن را تأیید کنید

بسیاری از مدل‌های باز کنونی پیش از پاسخ دادن استدلال می‌کنند. برای ترجمه، این کار وقت و توکن‌های خروجی را هدر می‌دهد. در تنظیمات ما، یک درخواست آزمایشی ۲۰۰ توکنی، ۱۹۹ توکن را صرف استدلال کرد و پاسخ خالی برگرداند.

سه روش رایج را امتحان کردیم. افزودن /no_think به پرامپت هیچ اثری نداشت، و chat_template_kwargs با enable_thinking: false هم بی‌اثر بود. ارسال "reasoning_effort": "none" در درخواست، استدلال را خاموش کرد: پاسخ ۰ توکن استدلال گزارش داد و ترجمه را مستقیماً برگرداند. این پارامتر در صفحه تکمیل‌های چت LM Studio فهرست نشده است، پس آن را به‌عنوان رفتاری که در نسخه ۰.۴.۸ با این مدل مشاهده کردیم در نظر بگیرید. به‌جای اعتماد به هر کلید، تعداد reasoning_tokens را در پاسخ‌های خودتان بررسی کنید.

۳. پنجره زمینه را پیش از تکه‌ها اندازه‌گیری کنید

پنجره زمینه باید دستورالعمل، تکه و ترجمه کامل را در خود جای دهد. در اجراهای تکه‌تکه ما، یک تکه آلمانی ۵۰۰ تا ۶۷۰ کلمه‌ای حدود ۸۰۰ تا ۱٫۵۰۰ توکن ورودی، بسته به واژه‌نامه و زمینه، و ۶۴۰ تا ۸۷۰ توکن خروجی مصرف کرد، بنابراین چند هزار توکن کافی است. درخواست واحد ۳٫۱۷۹ کلمه‌ای به ۴٫۹۵۳ توکن ورودی و ۳٫۹۳۰ توکن خروجی نیاز داشت.

Ollama طول زمینه پیش‌فرض خود را بر اساس حافظه موجود تنظیم می‌کند: ۴ هزار توکن زیر ۲۴ گیبی‌بایت VRAM، ۳۲ هزار از ۲۴ تا ۴۸ گیبی‌بایت، و ۲۵۶ هزار در ۴۸ گیبی‌بایت یا بیشتر، بر اساس مستندات طول زمینه که در ۲۳ اکتبر ۲۰۲۶ بررسی شد. می‌توانید آن را با OLLAMA_CONTEXT_LENGTH افزایش دهید. در LM Studio، طول زمینه را هنگام بارگذاری مدل تنظیم کنید. اگر یک تکه به‌همراه ترجمه‌اش جا نشود، خروجی می‌تواند قطع شود.

۴. تکه‌بندی در مرزهای پاراگراف، حدود ۶۰۰ کلمه

هرگز داخل یک پاراگراف یا جمله تقسیم نکنید. تکه‌های ما هدف ۷۰۰ کلمه را داشتند و در نزدیک‌ترین مرز پاراگراف پایان می‌یافتند، که شش تکه ۲۴۳ تا ۶۶۷ کلمه‌ای تولید کرد. تکه‌های کوچک‌تر هزینه کمی دارند: اجرای A ۱۰٫۴ دقیقه طول کشید در مقابل ۹٫۵ دقیقه برای درخواست واحد، و اجرای مجدد یک تکه ناموفق ارزان است.

دستورالعمل را کوتاه و برای هر تکه یکسان نگه دارید. دستور ما این بود: به انگلیسی ترجمه کن، دقیقاً یک پاراگراف خروجی به ازای هر پاراگراف ورودی با یک خط خالی جدا شده نگه دار، و فقط ترجمه را خروجی بده. یک واژه‌نامه به همان دستورالعمل اضافه کنید: یک خط برای هر نام، عنوان، یا اصطلاح تکرارشونده، به شکل Prokurist = chief clerk. راهنمای ما برای ساخت واژه‌نامه ترجمه پوشش می‌دهد که چه چیزی را شامل شود. تکه‌های کوتاه داستان اطراف را از دست می‌دهند، و واژه‌نامه همان چیزی است که آن را حمل می‌کند.

۵. هر تکه را پیش از پیوند دادن آن‌ها بررسی کنید

سه بررسی روی هر تکه انجام دهید:

  1. تعداد پاراگراف. خروجی باید همان تعداد پاراگراف ورودی را داشته باشد. این بررسی شکست ۲ را گرفت.
  2. نسبت طول هر پاراگراف. تعداد کلمات هر پاراگراف ترجمه‌شده را با مبدأ آن مقایسه کنید. این بررسی شکست ۱ را گرفت که شمارش پاراگراف آن را از دست داد.
  3. اصطلاحات واژه‌نامه در هر پاراگراف. جایی که یک اصطلاح مبدأ ظاهر می‌شود، ترجمه مورد نیاز آن باید همان تعداد بار ظاهر شود. این بررسی شکست ۳ را گرفت که هر دو بررسی دیگر آن را از دست دادند. زبان‌های صرفی در اینجا به کمی قضاوت نیاز دارند، زیرا یک اصطلاح آلمانی یا روسی شکل خود را تغییر می‌دهد.

برای نثر آلمانی به انگلیسی، پاراگراف‌های اجرای A بین ۰٫۹۸ و ۱٫۱۷ کلمه خروجی به ازای هر کلمه ورودی ماندند. پاراگراف آسیب‌دیده اجرای C ۰٫۸۲ بود. محدوده خود را با بررسی چند پاراگراف که در جفت زبان خود به آن‌ها اعتماد دارید تنظیم کنید؛ پیش‌فرض‌های اسکریپت ما یک نقطه شروع هستند، نه یک استاندارد.

یک پاراگراف علامت‌خورده جایی است که اول باید بخوانید، نه مدرکی بر خطا. سپس خود ترجمه را بخوانید، به‌ویژه نام‌ها، اعداد، نفی‌ها، و هر چیزی که خواننده بر اساس آن اقدام می‌کند. چک‌لیست تضمین کیفیت ترجمه کتاب آن بازبینی را پوشش می‌دهد.

۶. سند را بازسازی کنید

مدل متن برمی‌گرداند. عنوان‌ها، پانویس‌ها، جدول‌ها، تصاویر، چیدمان صفحه، و سبک‌ها باید به‌صورت دستی یا با یک ابزار تبدیل بازگردانده شوند. برای یک گزارش کوتاه این جزئی است. برای یک کتاب با پانویس و جدول می‌تواند بیشتر از خود ترجمه طول بکشد.

ترجمه یک کتاب کامل چقدر طول می‌کشد

اجرای تکه‌تکه ما ۳٫۱۷۹ کلمه را در ۱۰٫۴ دقیقه ترجمه کرد، حدود ۳۰۰ کلمه در دقیقه روی این دستگاه. با این نرخ، یک رمان ۹۰٫۰۰۰ کلمه‌ای تقریباً پنج ساعت تولید طول می‌کشد، پیش از بررسی‌ها و اجراهای مجدد. این حساب ساده از یک اجرا است، نه یک بنچمارک. سرعت با اندازه مدل، کوانتیزه‌سازی، سخت‌افزار، جفت زبان، و میزان کارهای دیگر دستگاه تغییر می‌کند.

فایل مدل ۱۷٫۵ گیگابایت روی دیسک بود، و حافظه نهان زمینه و بافرهای زمان اجرا به حافظه‌ای روی آن نیاز دارند، بنابراین یک دستگاه به حافظه آزاد قابل‌توجهی بیشتر از اندازه فایل نیاز دارد. یک مدل کوچک‌تر سریع‌تر و با حافظه کمتر اجرا می‌شود، معمولاً با مقداری هزینه در کیفیت. آن را روی یک نمونه معرف آزمایش کنید پیش از اینکه کل یک کتاب را متعهد شوید. راهنمای ما برای بهترین LLM برای ترجمه توضیح می‌دهد که چگونه آن نمونه را بسازید و مدل‌ها را منصفانه مقایسه کنید.

LLM محلی یا سرویس ترجمه سند

پرسشLLM محلیسرویس ترجمه اسناد
آیا فایل می‌تواند از دستگاه شما خارج شود؟لازم نیستلازم است
چه چیزی بازگردانده می‌شودمتن ساده‌ای که خودتان دوباره سرهم می‌کنیدیک فایل ترجمه‌شده
اندازه مدلمحدود به حافظه شمامحدود به ارائه‌دهنده
یکدستی در کل کتابکار شما: واژه‌نامه، تکه‌بندی، بررسی‌هادر برخی سرویس‌ها از پیش تعبیه شده
هزینه هر سندسخت‌افزار و زمان شماقیمت به ازای هر سند یا هر واژه

اگر قوانین شما اجازه بارگذاری فایل را می‌دهد، یک سرویس اسناد بیشتر کارهای بالا را حذف می‌کند. BookTranslator فایل‌های کامل PDF، EPUB و DOCX را ترجمه می‌کند و یک فایل ترجمه‌شده بازمی‌گرداند، و پرسش‌های متداول آن می‌گوید فایل‌های بارگذاری‌شده و خروجی ترجمه برای آموزش مدل‌های هوش مصنوعی استفاده نمی‌شوند. این یک سرویس ابری است، بنابراین وقتی فایل باید روی دستگاه شما بماند گزینه‌ای نیست. اگر بین اجرای مدل‌ها به‌صورت خودتان و پرداخت پول برای یک سرویس تصمیم می‌گیرید، هزینه واقعی ترجمه با LLM نشان می‌دهد چگونه بودجه سمت توکن را برنامه‌ریزی کنید.

دریافت فایل‌های آزمایشی

همه فایل‌ها در پوشه /files/blog/translate-with-local-llm/ قرار دارند:

  • local_llm_translation_test.py: آزمایش کامل در برابر API محلی LM Studio، با هر سه اجرا. آن را به مدل یا متن مبدأ دیگری اشاره دهید تا آزمایش را تکرار کنید.
  • check_translation.py: یک متن مبدأ و یک ترجمه را پاراگراف به پاراگراف مقایسه می‌کند و ناهماهنگی تعداد پاراگراف‌ها، نسبت‌های طول خارج از محدوده، و اصطلاحات واژه‌نامه گم‌شده را چاپ می‌کند (با --term "Prokurist=chief clerk"). با خروجی هر ابزاری کار می‌کند.
  • results.csv: هر درخواست با تعداد پاراگراف‌ها، تعداد واژه‌ها، تعداد توکن‌ها و زمان آن.
  • failure-examples.txt: متن مبدأ آلمانی و خروجی خام مدل برای هر سه شکست.

پیش از آنکه به ترجمه‌ای طولانی اتکا کنید، اسکریپت check_translation.py را همراه با واژه‌های واژه‌نامه‌تان روی آن اجرا کنید. این کار چند ثانیه بیشتر طول نمی‌کشد و در این آزمون هر سه خطا را نشان داد. این اسکریپت نمی‌تواند بگوید آیا جمله‌ای روان و درست، نادرست است یا نه؛ پس پاراگراف‌های علامت‌خورده نقطهٔ آغاز خواندن شما هستند، نه پایان آن.

مطالب مرتبط