编码机制

算术编码怎样把秘密消息藏进文本?

从秘密比特到语言模型的词元选择,再从可见文本恢复消息,逐步理解算术编码。

Yuntian Deng 撰写 ·

语言模型提供下一步的选择

生成式语言模型根据已有上下文,为下一个词元分配概率。语言隐写利用这些选择承载另一条消息:可见文本是载体,秘密消息由掌握相同语言模型与编码规则的接收方恢复。

Neural Linguistic Steganography(2019)的作者是 Zachary M. Ziegler*、Yuntian Deng* 和 Alexander M. Rush,前两位作者同等贡献。论文将算术编码与大型预训练语言模型结合,贡献包括编码方法、生成分布分析、容量和文本质量实验,以及把自然语言消息转换为内容无关文本的演示。STEGASURAS 是配套交互演示。

早期方法将比特分配给词表中的组,或为候选词构造 Huffman 码字。算术编码维护一个随生成逐步缩小的区间,使词元选择比粗粒度的固定比特分配更贴近给定概率分布。2019 年论文在共享的 GPT-2 模型上比较这些方法。原论文第 2 至 4 节给出了方法与实验。

一个理想化的小例子

假设下一个词元有 A、B、C、D 四种选择,概率依次为 1/2、1/4、1/8、1/8。将区间 [0,1) 按这些概率划分,把秘密比特流视为该区间内一个数的二进制小数位。

A:[0,0.5);B:[0.5,0.75);C:[0.75,0.875);D:[0.875,1)。这是机制示例,概率不是论文的实测结果。

以 0.101… 开头的二进制小数落在 B 的区间内,因此发送方输出 B。语言模型根据 B 和此前上下文,计算下一步概率;编码器据此继续细分 B 的区间,再选择包含秘密数值的词元。区间不断缩小,秘密消息中越来越多的比特得到确定。

在秘密比特均匀随机的理想构造中,宽度为总区间一半的区域,以一半的概率被选择。这就是消息编码与分布匹配之间的联系。例子中 B 的区间确定了前两位 10,后续词元进一步确定余下比特。实际实现使用有限精度整数运算与重归一化,不会保存无限精度的实数。

接收方为什么能恢复秘密比特

接收方按顺序读取载体词元,复现相同的条件概率与区间划分。每个观察到的词元都选出发送方曾使用的子区间;当区间内所有数具有相同的二进制前缀时,就可以提取这些公共比特。

双方必须对齐完整过程:模型与权重、上下文、分词、候选集合、概率变换、词元顺序、数值精度以及消息长度或结束标记。模型名称相同并不足以保证解码一致。官方实现给出了具体编码与解码程序。

隐写与加密解决不同问题。加密隐藏消息内容;隐写隐藏传递消息这一行为的存在。算术编码本身不提供通用保密性保证,其分布行为也依赖输入比特的假设。

理想区间与实际系统之间

温度和词表截断会改变生成使用的概率分布。限制候选词能改善实验中的人工自然度判断,同时使生成分布偏离原始模型。2019 年论文分别测量这两种变化。后续 SAAC 明确建立在该方法之上,把固定候选集大小改为自适应选择。

另一个问题出现在词元与文本之间:将生成的词元序列转换为字符串,再对字符串分词,所得序列不一定与原序列相同。Yan 和 Murawaki(2025)研究这一不一致,隐写实验全部使用 2019 年的算术编码方法。编码机制和分词可靠性处于不同环节,二者共同决定消息能否成功恢复。

继续阅读容量、可检测性与安全性,了解每词比特数、模型分布偏差、人工评价和一次成功解码各自支持什么结论。