我是如何快速翻译Google DeepMind出品的《How to Scale Your Model》电子书

151 阅读7分钟

去年,我完整翻译了一本英文书《Build a Large Language Model (From Scratch)》。

这是一本实操性极强的教程,能帮我们深入理解 GPT 类大模型的底层原理。在翻译时,我也加入了很多自己的思考和解读。

没想到,这份中文版电子书在 GitHub 上发布后,收获了许多朋友的关注。

项目地址github.com/skindhu/Bui…

前两天,有朋友发来一本 Google DeepMind 近期发布的电子书《How to Scale Your Model》,问能否帮忙快速翻译成中文。

我快速翻了一下,全书共 12 章,干货满满。

它系统地讲解了大语言模型如何做系统级优化。内容涵盖 TPU/GPU 的工作与通信原理,大模型在硬件上的真实运行方式,以及训练和推理中的并行化策略

对于经常需要自己部署和调优开源模型的开发者来说,这本书的价值不言而喻。同时,我想着它也可以衔接《Build a Large Language Model (From Scratch)》,作为进阶的学习资料。

于是,我周末 Vibe Coding 了一下,搭建了一套工作流,快速完成了翻译任务,交付给朋友。接下来,我也会抽时间好好研读一下。

翻译项目地址(开源)github.com/skindhu/How…
中文版本在线阅读地址skindhu.github.io/How-To-Scal…

接下来,花点时间和大家分享一下这次快速翻译的工作流。

我是如何快速翻译的

原书是一个在线网站,为了保证翻译后格式完全一致,我把整个流程拆解为四个步骤:

  • 书籍章节批量获取:这部分比较简单,需要注意的点是原书页面中所有的内容都是动态的,所以要等完全加载结束后再去获取。
  • 核心内容智能翻译:细节点较多,需要有选择性翻译,聚焦于文章内容,像代码、公式、人名等不应该翻译,在不同的章节中,专业术语的翻译需要保障一致性。同时译文和原文格式要完全一致。
  • 链接本地化:翻译后的文章中,诸多的外链需要批量转换为内部相对路径。
  • 版权信息注入:尊重版权,译文中的每个章节必须附带原文链接,以及翻译者的联系方式。

下面,我来逐一拆解。

第一步:批量获取网页内容

这部分我选用了开源框架 crawl4ai

它支持丰富的抓取策略,无论是静态还是动态页面,都能轻松搞定。

原书网站的内容是动态加载的,所以必须等页面完全渲染后才能获取。因此,我设置了一个滚动到底部并等待 3 秒的策略,确保抓取到完整的 HTML。

# 核心代码:滚动到底部,等待3秒,确保动态内容加载完毕
js_code = [
    "window.scrollTo(0, document.body.scrollHeight);",
    f"await new Promise(resolve => setTimeout(resolve, {int(wait_time * 1000)}));"
]

# 执行抓取
result = await crawler.arun(
    url=url,
    bypass_cache=True,
    wait_for="body",
    delay_before_return_html=wait_time,
    js_code=js_code,
    css_selector="body",
    page_timeout=60000  # 60秒超时
)

要抓取全书,只需提前配置好所有章节的链接列表即可。

第二步:书籍的智能翻译

翻译是整个流程中最核心、也最复杂的一环。

我选择Gemini 2.5 Pro来执行翻译。为了确保翻译质量,我面临两个挑战:

  • 准确性:专业术语不同的章节要统一,不能出现偏差。
  • 选择性:只翻译文章内容,像代码、公式、人名、链接等必须保持原样。

我的解决方案是:专业术语表 + 精心设计的 Prompt

你是一个专业的技术文档翻译专家,专门翻译机器学习和深度学习相关的技术文章。

请将以下HTML内容从英文翻译成中文,要求:

1.  **格式保持**:完全保持原HTML结构、标签、属性、CSS类名、ID等不变。
2.  **内容翻译**:只翻译HTML标签内的文本内容,不翻译HTML标签本身。
3.  **术语一致性**:使用以下专业术语对照表保持翻译一致性:
    {terminology_list}

4.  **翻译质量**:
    - 准确传达原文技术含义
    - 保持中文表达的流畅性和自然性
    - 数学公式、代码片段、URL链接保持不变

5.  **特殊处理**:
    - 不翻译HTML注释、JavaScript代码、CSS样式
    - 不翻译属性值(如class名、id等)
    - 不翻译锚点链接(#开头)
    - 不翻译数学公式占位符(MATH_PLACEHOLDER_XXX)

请只返回翻译后的完整HTML内容,不要添加任何解释或额外信息。

原HTML内容:
{html_content}

其中terminology_list就是专业术语表,我从这12章中提取了大概50多个专业术语,由于内容较多,就不贴在这里,感兴趣的读者可以去开源项目中查看。

本以为这样就万事大吉了,但很快就遇到了新问题:Token 数量超限。

Gemini 2.5 Pro的输入Token很长(1,048,576个),但输出却有8192个Token的限制。对于内容较多的章节,翻译结果会直接被截断。

我第一时间想到的方案就是分块处理

为了设计合理的分块策略,我分析了下网页结构,大致如下:

<html>
<head>
<title>...</title>
<meta content="..." name ="description" />
/* 各种样式和脚本 */
</head>
<body>...</body>
</html>

可以看到,我们需要翻译的是head标签中titledescription,以及body标签中的内容,中间大段的样式和脚本代码完全不用发送给大模型。

于是,我使用python的BeautifulSoup库对HTML页面进行了解析,单独提取出了上述需要翻译的标签内容,分成两部分分别发送给Gemini进行翻译。

问题有缓解,但有些章节的<body>部分依然太长,还是会超出Token限制。我继续分析,发现里面包含了大量由<mjx-container>标签包裹的数学公式,这些是不需要翻译的。

最终我的解决方案是:提取 → 占位 → 翻译 → 还原。

  1. 提取:在翻译<body>前,先用脚本将所有数学公式(<mjx-container>)提取出来。
  2. 占位:在原文中,用MATH_PLACEHOLDER_XXX这样的占位符替换掉公式。
  3. 翻译:将处理过的、不含公式的<body>内容发给大模型翻译。
  4. 还原:翻译完成后,再将占位符替换回原来的数学公式。
# 核心思路:提取 → 占位 → 翻译 → 还原

# 遍历所有 <mjx-container> 数学公式标签
mjx_containers = soup.find_all('mjx-container')
for i, container in enumerate(mjx_containers):
    # 创建一个唯一的占位符
    placeholder = f"MATH_PLACEHOLDER_{i:03d}"
    # 将原始公式存起来
    self.math_content_store[placeholder] = str(container)
    # 在HTML中用占位符替换公式
    container.replace_with(placeholder)

通过这套“分块 + 占位”的精细化操作,比较好的解决了 Token 限制问题。最后,再将翻译好的各部分拼接成一个完整的HTML文件,这样,既准确地翻译了所有核心的内容,又保障了格式的完全一致性。

第三、四步:链接本地化与版权保障

这两部分工作比较简单,本质上是文件内容的批量查找和替换,用一个脚本就能快速搞定。

最终,每个翻译章节的顶部都会附上原文链接和译者信息,确保对原作者的尊重。

将以上所有模块组合起来,就构成了一套自动化翻译流水线。加上大模型API的调用耗时,整个流程可以在半小时内完成一整本书的翻译。

结语

这次全书翻译工作尽管很快,其实属于粗翻,因为我还没有完整的看完全书,也不知道翻译得是否准确。

尽管现在大模型的能力越来越强,但好的翻译往往需要在深刻理解的基础上,才能做到通俗易懂且精准无误(正如我在翻译《Build a Large Language Model (From Scratch)》时所付出的努力)。

接下来,我会在研读原文的过程中,逐步去校正初版译文中的各种细节。欢迎Star。

翻译项目地址(开源)github.com/skindhu/How…