快速结论:这个报错通常出现在使用 WatermarkDetector 并启用 ignore_repeated_ngrams=True 时,检测器仍把重复的 token 窗口计入 num_tokens_scored,导致重复 bigram 被重复统计。优先排查检测器是否对重复 n-gram 做了预期中的去重处理。
适用环境:Transformers 5.19.0.dev0,baseline source commit 469230357aab0f2b303b0d638c1f8d06edb14184;Windows-11-10.0.26100-SP0;Python 3.12.0;PyTorch 2.14.0+cpu,CUDA unavailable;huggingface_hub 1.33.0;Safetensors 0.8.0;未安装 Accelerate、DeepSpeed;单进程 CPU 检测,单输入行;pytest 8.4.2;Ruff 0.14.10。补充 Linux 检查使用 Python 3.12.3 和同一 source baseline。
最快修复方案:暂无确认的一步修复方案。Issue 中维护者已确认这是 bug,报告者随后提交了修复草案 PR #49315,包含本地修复和 24 个回归用例;在 PR 合入前,可优先尝试临时避免依赖 ignore_repeated_ngrams=True 的计数结果,或跟踪 #49315 的合并状态。
注意事项:#49315 在 issue 关闭时是 draft,issue 正文也明确说明本地 checkout 的修复不在 baseline commit 中,因此不能把该草案当作已发布版本行为。该问题只涉及计数逻辑,不要在没有证据的情况下推断其他 watermark 指标也一定受影响。
问题场景
用户在 CPU 上直接调用 Transformers 的公共 WatermarkDetector API,使用 GPT2Config 和 WatermarkingConfig 做检测,不需要模型权重、tokenizer 或模型下载。输入是一个合成 token 序列:10 个 token 3,vocab size 128,BOS/EOS 为 127,context_width=1,greenlist_ratio=0.25,z_threshold=3.0。用户分别以 ignore_repeated_ngrams=True 和 False 运行,并期望重复 bigram 的去重计数分别为 1 和 9。结果启用了去重时,num_tokens_scored 仍然按重复窗口计数,导致 count check 失败。
报错原文
WatermarkDetector counts repeated token windows when deduplication is enabled
ignore_repeated_ngrams=True
num_tokens_scored=[...]
FAIL: expected_count=1, actual_count=...
Failed count checks: 1/2
Issue 正文中给出的断言期望为:
expected_counts = {True: len(set(bigrams)), False: len(bigrams)}
assert expected_counts == {True: 1, False: 9}
原因分析
最可能的原因是:WatermarkDetector 在计算 num_tokens_scored 时,没有在启用 ignore_repeated_ngrams=True 的情况下正确排除或折叠重复的 token 窗口。对于输入 [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],相邻 bigram 共有 9 个,但唯一内容只有 (3, 3) 一个。Issue 中的维护者回复确认这是 bug,因此该行为不是预期结果,而是计数逻辑缺陷。
环境排查
- 确认 Transformers 版本是否为 5.19.0.dev0,或是否处于 commit
469230357aab0f2b303b0d638c1f8d06edb14184的源码状态;若已包含 #49315 的修复,则现象可能不同。 - 确认 Python 版本,Issue 中为 3.12.0,补充 Linux 检查为 3.12.3。
- 确认 PyTorch 版本,Issue 中为 2.14.0+cpu,CUDA unavailable,且为单进程 CPU 检测。
- 确认
WatermarkingConfig参数:seeding_scheme、context_width=1、greenlist_ratio=0.25、z_threshold=3.0。 - 确认
WatermarkDetector参数:ignore_repeated_ngrams分别设为True与False。 - 确认输入
input_ids为[3] * 10、dtype=torch.long、device="cpu"、vocab_size=128、bos_token_id=127、eos_token_id=127。 - 确认 huggingface_hub 1.33.0、Safetensors 0.8.0;Accelerate 与 DeepSpeed 未安装。
解决步骤
- 使用 Issue 中的复现脚本,在未修改的 baseline commit 上运行,确认
ignore_repeated_ngrams=True时num_tokens_scored是否等于 1。 - 同时运行
ignore_repeated_ngrams=False的对照路径,确认其num_tokens_scored是否为 9,以排除环境或输入构造错误。 - 检查本地
transformers/generation/watermarking.py中重复 n-gram 的计数逻辑,确认去重分支是否被正确应用。 - 如需修复,可优先尝试参考或跟踪 #49315 中的本地修复和 24 个回归用例;在 issue 关闭时该 PR 仍为 draft。
- 修复后重新运行复现脚本,并至少覆盖 Issue 中提到的 focused tests、watermark generation integration test 和仓库检查。
- 注意 Issue 中说明完整的 505-file dependency-map selection 尚未运行,如需合并修复,需要按维护者要求补齐剩余测试范围。
验证方法
重新运行 Issue 复现脚本,确认输出中 Failed count checks: 0/2,即 ignore_repeated_ngrams=True 时 num_tokens_scored 等于 1,ignore_repeated_ngrams=False 时等于 9。若使用 #49315 的回归测试,确认对应的 count checks 全部通过,并观察 watermark generation integration test 是否通过。
参考来源
huggingface/transformers #49299
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![PermissionError: [Errno 13] error while attempting to bind on address ('127.0.0.1', 8188)](https://www.chat-gpts.plus/wp-content/uploads/2026/10/3345-3eacb91d-768x403.jpg)