[阅读清单](https://steganography.live/reading-list/zh/) / 方法指南 编码机制 # 算术编码怎样把秘密消息藏进文本? 从秘密比特到语言模型的词元选择,再从可见文本恢复消息,逐步理解算术编码。 Yuntian Deng 撰写 · 2026年11月11日 [问题设置](https://steganography.live/reading-list/zh/guides/arithmetic-coding/#setting) · [区间示例](https://steganography.live/reading-list/zh/guides/arithmetic-coding/#intervals) · [消息恢复](https://steganography.live/reading-list/zh/guides/arithmetic-coding/#decoding) · [实现细节](https://steganography.live/reading-list/zh/guides/arithmetic-coding/#practical) ## 语言模型提供下一步的选择 生成式语言模型根据已有上下文,为下一个词元分配概率。语言隐写利用这些选择承载另一条消息:可见文本是载体,秘密消息由掌握相同语言模型与编码规则的接收方恢复。 [Neural Linguistic Steganography](https://steganography.live/reading-list/zh/papers/neural-linguistic-steganography/)(2019)的作者是 Zachary M. Ziegler*、Yuntian Deng* 和 Alexander M. Rush,前两位作者同等贡献。论文将算术编码与大型预训练语言模型结合,贡献包括编码方法、生成分布分析、容量和文本质量实验,以及把自然语言消息转换为内容无关文本的演示。[STEGASURAS](https://steganography.live/) 是配套交互演示。 早期方法将比特分配给词表中的组,或为候选词构造 Huffman 码字。算术编码维护一个随生成逐步缩小的区间,使词元选择比粗粒度的固定比特分配更贴近给定概率分布。2019 年论文在共享的 GPT-2 模型上比较这些方法。[原论文第 2 至 4 节给出了方法与实验。](https://aclanthology.org/D19-1115.pdf) ## 一个理想化的小例子 假设下一个词元有 A、B、C、D 四种选择,概率依次为 1/2、1/4、1/8、1/8。将区间 [0,1) 按这些概率划分,把秘密比特流视为该区间内一个数的二进制小数位。 A · 1/2 B · 1/4 C · 1/8 D · 1/8 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`,后续词元进一步确定余下比特。实际实现使用有限精度整数运算与重归一化,不会保存无限精度的实数。 ## 接收方为什么能恢复秘密比特 接收方按顺序读取载体词元,复现相同的条件概率与区间划分。每个观察到的词元都选出发送方曾使用的子区间;当区间内所有数具有相同的二进制前缀时,就可以提取这些公共比特。 双方必须对齐完整过程:模型与权重、上下文、分词、候选集合、概率变换、词元顺序、数值精度以及消息长度或结束标记。模型名称相同并不足以保证解码一致。[官方实现](https://github.com/harvardnlp/NeuralSteganography)给出了具体编码与解码程序。 **隐写与加密解决不同问题。**加密隐藏消息内容;隐写隐藏传递消息这一行为的存在。算术编码本身不提供通用保密性保证,其分布行为也依赖输入比特的假设。 ## 理想区间与实际系统之间 温度和词表截断会改变生成使用的概率分布。限制候选词能改善实验中的人工自然度判断,同时使生成分布偏离原始模型。2019 年论文分别测量这两种变化。后续 [SAAC](https://steganography.live/reading-list/zh/papers/saac/) 明确建立在该方法之上,把固定候选集大小改为自适应选择。 另一个问题出现在词元与文本之间:将生成的词元序列转换为字符串,再对字符串分词,所得序列不一定与原序列相同。[Yan 和 Murawaki(2025)](https://steganography.live/reading-list/zh/papers/tokenization/)研究这一不一致,隐写实验全部使用 2019 年的算术编码方法。编码机制和分词可靠性处于不同环节,二者共同决定消息能否成功恢复。 继续阅读[容量、可检测性与安全性](https://steganography.live/reading-list/zh/guides/capacity-and-security/),了解每词比特数、模型分布偏差、人工评价和一次成功解码各自支持什么结论。 [阅读中文 Markdown](https://steganography.live/reading-list/zh/guides/arithmetic-coding/index.md) · [浏览参考文献](https://steganography.live/reading-list/zh/papers/)