Protecting Intellectual Property of Large Language Model-Based Code Generation APIs via Watermarks
论文精读|Protecting Intellectual Property of Large Language Model-Based Code Generation APIs via Watermarks
一、先搞懂核心痛点:为什么代码模型这么好偷?
很多人可能疑惑:大模型不是很难训练吗?怎么随便就能被盗版?
这里要区分从零训练和模仿攻击(模型窃取)。目前绝大多数商用代码模型,都是基于CodeBERT、CodeT5这类开源基座,用私有数据微调得到的。
攻击者根本不用从零训练,整套窃取流程特别简单:
-
批量向目标代码API发送各类自然语言、代码补全请求;
-
收集海量「输入prompt-输出代码」配对数据;
-
用这批数据微调同款开源基座,直接得到仿制模型。
论文里做了实测,原模型BLEU分数23.2,攻击者复刻的模型能做到22.6,性能几乎没差。更夸张的是,整套攻击的总成本居然不到20美元,几乎没有技术和资金门槛,这也是为什么代码模型侵权乱象一直难以根治。
二、传统水印为什么完全没用?
在ToSyn之前,学界已经有不少LLM水印方案,但套在代码生成场景里,全部失效,核心原因就是代码和自然语言完全是两套逻辑。
自然语言水印喜欢靠替换近义词、插入特殊字符做标记,但代码有严格的语法、编译规则,容错率极低:
-
强行加特殊token、生造字符,代码直接报错,一眼就能被攻击者识别剔除;
-
通用文本近义词库,在代码场景里几乎用不上,论文实测五万多条代码样本,仅2组词汇能匹配;
-
需要修改模型权重、干预采样逻辑的软水印,属于白盒方案,商用黑盒API完全没法用。
简单说:旧方案要么破坏代码可用性,要么隐蔽性为零,根本没法落地防护代码模型窃取。
三、ToSyn核心创新:不靠改权重,后置语法等价水印
这是整篇论文最亮眼的地方,也是很多人容易误解的关键点:ToSyn全程不修改大模型任何权重、不干预模型训练和推理逻辑。
它的工作模式是外挂式后置处理:模型正常生成原生代码后,ToSyn通过语法树解析,在返回给用户之前,做一轮语义完全无损的等价改写。
我用最通俗的例子讲清楚它的水印逻辑,彻底区别于传统显性水印:
传统水印是「苹果→🍎」,改完之后内容变了、格式异常,一眼就能看出来;
ToSyn水印是「换一种完全等价的写法」,比如:
-
原生代码:
text = "ABC".lower().strip() -
水印改写后:
text = "ABC".strip().lower()
单看这一行,不管是人工还是工具,都看不出任何问题,代码运行结果完全一致。真正的水印,从来不在单条代码的表面改动,而在大批量数据的统计分布偏移。
举个直观逻辑:原本模型生成这两种写法的比例是9:1,ToSyn会强制把比例改成3:7。攻击者批量爬取接口数据训练仿制模型后,新模型会自带这个异常的分布特征。后续只要检测可疑模型的输出分布,就能精准判定它是否盗用了原模型的数据。
四、六大水印规则(34条可落地细则)
论文基于Python语法特性,设计了6类完全无损的改写规则,细化出34条可直接落地的转换逻辑,覆盖代码编写的绝大多数场景,实用性拉满。我整理了每一类的核心用途和真实案例,很好理解:
1. BSR 内置结构替换(14条)
利用Python语法糖,替换等价的内置数据结构、格式化写法。
示例:字典初始化两种等价写法互换、print百分号格式化和format格式化互换。
2. CST 代码风格转换(2条)
仅修改编码风格,不改动任何逻辑。
示例:变量驼峰命名和蛇形命名互换、if条件语句括号增删。
3. PS 参数显式补全(2条)
补全函数默认参数,消除省略写法,运行效果无变化。
示例:sorted(arr) 改写为 sorted(arr, reverse=False)。
4. LA 库别名替换(2条)
切换第三方库的导入别名,适配开发者常规写法。
示例:numpy.array 和 np.array 互相替换。
5. TFR 第三方函数替换(11条)
替换功能完全一致的内置函数、第三方库API。
示例:Python内置abs函数和numpy绝对值函数互换、日志不同级别接口互换。
6. FLR 函数调用重排(2条)
调换无依赖的链式方法调用顺序,结果完全一致。
也就是前面举例的lower和strip顺序调换的核心规则。
另外框架还有一个很巧妙的设计:用户UID专属水印指纹。每个注册用户会被分配唯一ID,对应启用不同的水印规则组合。就算发现侵权模型,不仅能判定被盗,还能精准溯源到具体是哪个恶意用户爬取的数据。
五、检测原理:靠统计检验完成IP确权
水印嵌入是前置后置改写,而侵权检测依靠严谨的统计校验,全程黑盒、不用接触可疑模型权重。
整套检测流程很清晰:
-
用服务商私有验证数据集,批量调用可疑模型API,收集大量生成代码;
-
统计每类同义词写法的实际分布,通过JSD散度,对比预设的水印偏移分布;
-
分布相似度达标、检出水印规则数量超过阈值,即可实锤模型侵权。
论文实验参数下,检测F1分数几乎接近1.0,误判、漏判概率极低,溯源准确率也十分可观。
更多推荐


所有评论(0)