Prompt中「像输出」的部分(示例、语气示范、源文档引用)必须用目标语言本地书写,「像指令」的部分(任务描述、约束、输出schema、角色声明)可保留模型最熟悉的语言;因为模型是基于全量token做延续,非特权通道。
这个问题通常被非此即彼地提出:要么把英文提示词翻译过来,要么让母语者重新写一个。这两种答案都不对,因为提示词并非一种文本。有些部分模型是作为指令来读的,有些部分模型是作为待生成内容的样本来看的,而只有后者才必须是母语级的。
提示词中任何类似输出的部分都必须用母语撰写。任何属于机制性的内容可以留在模型最能遵循的那种语言里。示例、参考答案、语气示范、术语表、源文档和引用文字属于前者。任务描述、约束条件、输出模式、角色声明和拒绝规则属于后者。
这不是两种立场之间的妥协,而是源于模型的实际工作方式:续写序列。上下文中看起来像被续写内容的那些部分,对续写表面形式的影响远比描述性的部分要大得多。
语言模型没有特权通道来接收指令。上下文中的所有内容都是 token,下一个 token 是以所有 token 为条件的。指令之所以有效,是因为指令遵循行为是在训练中植入的,但它要与一种更古老、更强大的压力竞争:以先前内容的风格继续生成。
所以当你的提示词是一段翻译后的英文时,你就在上下文中放入了一段翻译腔文本,并要求输出目标语言。在训练分布中,"语言 X 的翻译自英文文本"最接近的区域是语言 X 中大量真实的翻译自英文的文本:本地化软件字符串、配音字幕、机器翻译的网页、通过供应商处理的企业文案。续写内容会继承这种语域。输出读起来是翻译腔的,因为输入就是翻译腔,而提示词中的任何指令都没有说不要这样。
读者无需任何特殊工具即可验证:把同一任务写两遍,一次作为翻译,一次由母语者从头写,然后并排阅读两份输出而非两份提示词。提示词看起来差不多。输出通常则不然。
翻译研究对这种残留有一个名称——干扰——而且具体会带过来的东西相当一致,可以列出。
目标语言会省略的显性主语。英语需要"你";日语不需要,而"あなた"在日语指令中是一个强烈的翻译腔标记。西班牙语、意大利语、波兰语和土耳其语都会省略主语代词,而直译会保留这些代词。
逐字翻译的复合词。"A 500-word blog post"直译成德语会变成一个德语作家绝不会产生的连字符构造;自然的形式会将它重新组织为后置修饰短语。
礼貌用语放错了位置。英语在指令中到处散布"please"。在西班牙语、德语或日语中,每个小句都重复它读起来要么像机器输出,要么像讽刺,而在日语中 plain 和 polite 动词形式之间的选择是一个语域决定,翻译是意外做出的,没有人决定过。
句子节奏。英语指令写作偏爱短小的祈使句列表。德语技术写作容忍长得多的句子;日语把操作性动词放在最后。翻译后的列表保留了英语的信息顺序,输出也会随之如此。
不是该领域实际使用的术语。通用翻译者会将"customer support ticket"直译;而该语言行业中可能已经习惯用英语借词或一个完全不同的本土词汇。模型然后会一致地产生翻译者的词汇,而它一致地不是从业者实际说的话。
有些约束条件不仅仅是翻译起来别扭——它们会变得毫无意义,这是论点最有说服力的部分,因为它无法通过更好地翻译来修复。
"写 500 词"假设了一种用空格分隔单词的语言。日语、汉语和泰语不是这样,本地单位是字符;日语的简报要求的是文字数,即字符数。翻译英文指令给模型的是一个其目标语言不使用的单位规格,它要么猜一个换算关系,要么忽略这个约束。德语有相反的问题:复合词意味着传达相同内容的德语文本单词数更少而字符数更多,所以一个未做调整的单词预算会悄悄地要求更多内容。
"使用项目符号"、"使用句首大写"和"使用标题大写"同样是英语特有的形式。标题大写在德语、西班牙语或俄语的标题惯例中不存在。句首大写是没有大小写区分的文字中唯一的大写形式。关于引号风格的指令必须指定目标语言的标记——德语的半书名号对、法语带间距规则的引号符号、法语的尖括号——否则模型就会使用提示词中的那些。长度限制还与分词相关,这是另一个话题:参见日语在 token 上的成本。
如果一篇文章只论证一方面,那在这里是不诚实的,因为有些情况下翻译后的提示词是正确的工程答案,还有一种情况是英语本身就更好。
结构化输出。如果模型必须根据 schema 输出 JSON,这个 schema 不是散文,没人读它。把键名和枚举值保持在英语——它们是标识符——只让字符串值是母语的。翻译字段名会破坏你的解析器,毫无收益。
一个模板,四十个本地化版本。维护四十份手工编写的母语提示词意味着任务变化时需要更新四十份,其中三十八份会漂移。一个带有语言变量的单一英语指令块,加上每个本地化版本的母语示例,才是可维护的形态——把语言视为模板变量。
资源较少的目标语言。指令遵循行为集中在主导了指令微调数据的语言中。对于覆盖薄弱的一种语言,英语指令往往比母语指令被更可靠地遵循,尽管输出必须是母语的。这与系统提示词语言是否改变输出质量以及在低资源语言中提示的这个不对称性是同一个问题。
当任务本身就是翻译时。这时英语就是内容,指令的母语措辞对源文本毫无影响。
这条规则产生了一个有接缝的提示词,而这个接缝是刻意为之的。英语机制,母语文本:
system:
You write product release notes. Output the language named in
TARGET_LANGUAGE. Follow the typographic conventions of that
language, including its quotation marks and its list punctuation.
Length: match the example, measured in the unit the example uses.
Return only the release note.
TARGET_LANGUAGE: Japanese (ja-JP)
--- EXAMPLE (written by a native speaker, do not translate) ---
<one real Japanese release note, in the register you want,
with 「」 quotation marks and 、。 punctuation>
--- END EXAMPLE ---
user:
<the changelog, in whatever language it arrives in>
注意母语者需要动的是哪一半。不是指令块,它写一次就被所有本地化版本共享。只有示例需要动,它是每语言一份的,很短,而且输出实际上会与之相似。这是一份可管理的母语写作量,而且所有杠杆都在这里——用目标语言编写少样本示例这一论点将继续展开。
Writing Few-Shot Examples in the Target Language
Why Translating a Prompt Word for Word Produces Worse Output
Should You Translate First or Prompt Natively for a Non-English Task