代码混用(Code-Switching)指在同一段话语里交替使用两种或多种语言。它原本是社会语言学的概念,用来描述双语者说话时自然“跳台”;放到大模型身上,就是提示词或回答里中英夹杂。
打个比方:代码混用像开车时不停换车道。老司机换得顺,但在需要精确走线的路段——格式要求、多步推理——频繁变道就是额外的认知负担。模型也一样,代价不在“看不懂”,而在它得不停判断你究竟要哪种口径。
要理解代价,得看模型内部大致分三层处理语言。最外层是分词器(tokenizer),把文本切成子词;同一句里换语种,切分粒度会剧烈变化——中文常是一两个字一个 token,英文一个词可能只占一两个 token,夹杂后序列长度和边界都变得不规整。往里是嵌入层(embedding),多语言模型把各语言压进一个共享语义空间,但坐标只是相近、并非重合。再往上是中间层,多数观察显示中层更偏概念级处理,语言标签被“淡化”,而“用哪种语言输出”要到靠近输出端才被重新决定。所以混用真正破坏的,是指令语言和内容语言之间的一致性。
具体拉低效果的地方:
- 回答语言漂移:用中文提问、中间插一句英文要求,模型可能连回答语言、格式一起漂。
- 术语不一致:同一个概念一会儿中文一会儿英文,容易被当成两个对象。
- 格式遵循变弱:训练语料里中英混杂的文本多为口语和社交媒体,模型易把“混杂”和“随意”关联起来。
- 分词碎片:跨语言边界处更容易切碎,稀有搭配最吃亏。
和相邻概念的区别:翻译(translation)是整体换一种语言;借词是词汇层面的固化;语种识别只判断“这是哪种语言”。代码混用强调的是同一上下文内的即时切换。
| 场景 | 混用发生在 | 常见后果 |
|---|---|---|
| 中文指令 + 中文术语 | 无 | 语言一致,格式最稳 |
| 中文指令 + 英文术语,全文统一 | 词汇层 | 通常可接受,术语更准 |
| 中文指令里夹英文句式 | 句法层 | 输出语言、格式易漂 |
| 一句里来回切换 | 每句都切 | 最不稳定 |
实用建议:一条提示词只保留一种“指令语言”;专有名词可保留英文原词,但全文统一、首次出现给出中文;格式要求用指令语言写;引用的原文材料语言不同没关系,但别让指令句本身来回跳。各家模型的多语言表现以官方文档为准。
