2026-04-01· 约 2 分钟
Edit当 LLM 遇上小众语言:仓颉语言微调实战
如何让 LLM 学会一门训练数据极其稀缺的编程语言?我们以华为仓颉语言为案例,探索低资源语言的有效微调策略。被 EMSE 2026 接收。
当 LLM 遇上小众语言:仓颉语言微调实战
📄 发表于 EMSE 2026 | PDF
作者:Zhihao Lin, Zhaofeng Liu, Mingyi Zhou, Zihan Huang, Chi Chen, Wei Ma, Li Li
一句话概括
LLM 对主流编程语言(Python、Java)表现很好,但遇到仓颉(Cangjie)这种全新语言时会彻底懵圈。我们探索了如何用有限数据让 LLM 快速学会一门新语言。
问题:数据荒漠中的 LLM
现在的 LLM 之所以能写好 Python 代码,是因为训练数据中有海量的 Python 代码。但如果你要支持一门全新的编程语言呢?
华为的仓颉语言(Cangjie)就是这样一个案例:
- 语言刚发布不久,GitHub 上几乎没有开源代码
- 没有 Stack Overflow 上的问答数据
- 现有 LLM 对它一无所知——连语法都不认识
这不只是仓颉的问题。任何新兴语言(Mojo、Zig 的早期阶段)、企业内部 DSL、或者小众领域语言都面临同样的困境。
我们的探索
核心问题
在数据极度稀缺的情况下,什么微调策略最有效?
实验设计
我们系统性地比较了多种策略:
- 直接微调:用少量仓颉代码直接 fine-tune
- 相关语言迁移:先用语法相似的语言(如 Swift、Kotlin)预训练,再用仓颉数据微调
- 合成数据增强:利用仓颉的语法规范自动生成训练数据
- 不同模型规模的影响:小模型和大模型在低资源场景下表现的差异
关键发现
- 少即是多:在数据极少时,精选高质量的数据比堆量更重要
- 跨语言迁移有门槛:相关语言的数据确实有帮助,但存在一个模型容量的门槛——太小的模型反而会被"带偏"
- 语法规范是宝藏:从官方文档和语法定义中提取的结构化知识,是比代码片段更高效的训练信号
实际意义
这项工作不只是关于仓颉语言——它提供了一套可迁移的方法论:
- 当你需要让 LLM 支持一门新语言时,应该从哪里入手?
- 如何最大化利用有限的数据?
- 什么时候跨语言迁移管用,什么时候不管用?
反思
做这个项目让我意识到一个有趣的悖论:LLM 看起来"什么都会",但实际上它的能力严重依赖训练数据的分布。在数据的长尾区域,LLM 和人类新手一样无助。 如何系统性地解决这个问题,是一个值得长期关注的方向。
感谢华为仓颉团队提供的语言规范和测试用例。这是一段有趣的"教 AI 学新语言"的旅程。