返回博客
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、或者小众领域语言都面临同样的困境。

我们的探索

核心问题

在数据极度稀缺的情况下,什么微调策略最有效?

实验设计

我们系统性地比较了多种策略:

  1. 直接微调:用少量仓颉代码直接 fine-tune
  2. 相关语言迁移:先用语法相似的语言(如 Swift、Kotlin)预训练,再用仓颉数据微调
  3. 合成数据增强:利用仓颉的语法规范自动生成训练数据
  4. 不同模型规模的影响:小模型和大模型在低资源场景下表现的差异

关键发现

  • 少即是多:在数据极少时,精选高质量的数据比堆量更重要
  • 跨语言迁移有门槛:相关语言的数据确实有帮助,但存在一个模型容量的门槛——太小的模型反而会被"带偏"
  • 语法规范是宝藏:从官方文档和语法定义中提取的结构化知识,是比代码片段更高效的训练信号

实际意义

这项工作不只是关于仓颉语言——它提供了一套可迁移的方法论

  • 当你需要让 LLM 支持一门新语言时,应该从哪里入手?
  • 如何最大化利用有限的数据?
  • 什么时候跨语言迁移管用,什么时候不管用?

反思

做这个项目让我意识到一个有趣的悖论:LLM 看起来"什么都会",但实际上它的能力严重依赖训练数据的分布。在数据的长尾区域,LLM 和人类新手一样无助。 如何系统性地解决这个问题,是一个值得长期关注的方向。


感谢华为仓颉团队提供的语言规范和测试用例。这是一段有趣的"教 AI 学新语言"的旅程。

我的音乐