首页
学习
活动
专区
圈层
工具
发布

为什么DeepSeek V3.1 模型输出 Token 会被随机替换为「极」

最近这个事情直接上了热搜了,大部分网友在用DeepSeek V3.1版本的时候,发现它会在模型回复中经常出现一个“极”这个字。

比如有人在用DeepSeek整理物理试卷的时候,就发现它会在回复中出现“极”这个字。

而有的网友在Trae国内版中调用V3.1模型,也会出现同样的“极”这个字

那么为什么新版本的DeepSeek会出现这个明显的Bug呢?我总结了目前网友的一些猜测

1

Token词表中的连续性问题

有网友打印出了DeepSeek V3.1版本的分词表,发现“极”这个词的token id为2577,而下一个token id 2578为“......”

但这可不能说明"极"和省略号有啥相似之处啊,因为token embed说白了就是个映射表,ID挨着的两个token,它们的embedding可能完全不一样。但这个巧合又特别难解释——为啥"极"总在重复段落后面冒出来,而省略号正好也能用来打断重复呢?

所以目前猜测,会不会是当初有程序员想写个功能:检测到重复内容就自动加个省略号。结果因为数数的方式不一样(有人从0开始数,有人从1开始数),一不小心给写成"极"了。然后这个带bug的数据又混进了训练集,训练出来的模型带着bug,这有bug的模型又生成更多脏数据......

2

训练数据被污染

训练数据被污染是最多人进行猜测的。

网友“黄哲威”一开始就说了,这事儿可不是个例。他之前用小模型和开源数据做蒸馏,还有测试早期R1模型的时候,就碰到过类似的bug。

黄哲威觉得,这跟大模型编程出题时可能出现的"恶意模式"有关。他举了个例子,比如让模型列举素数,正常来说应该一直列下去,像"素数表2,3,5,7..."这样。

但他发现之前一个代号R1-0528的模型会有个怪毛病:列到一半突然自己停了,变成个有限列表,比如"素数表2,3,5,7...997,极长"。

这个"极长"的用法,跟现在讨论的"极"字问题特别像,经常是在一堆重复内容后突然冒出来,像是想把推理拉回正轨。有时候模型甚至会输出"90000000...0000极大的数字"这种东西。

他还详细说了这个bug是怎么触发的。当模型卡在"thinking"的死循环里出不来时,有千分之一的概率会突然蹦出个"极"字,然后就停止思考了——这好像是个特别的终止符号。

通过分析R1模型的大量输出,黄哲威发现了好多问题:超长的回复、大段空白字符、不停重复的短句,连thinking结尾的英文字符都变得支离破碎。

基于这些观察,他提出了一个主要猜想:问题可能出在数据清洗不够彻底。他认为在做SFT(监督微调)数据合成,甚至构建预训练数据时,可能没把一组叫"'极长'的数组"的脏数据清理干净。

最后黄哲威总结说,如果R1迭代时的数据没清理干净,模型自己蒸馏时"污染"到正常输出过程,是完全有可能的。这也给理解DeepSeekV3.1模型出现"极"字问题提供了一个可能的解释方向。

3

MTP预测问题

有网友猜测是该问题可能会被 MTP(多 token 预测)掩盖,并且当推理堆栈不支持 MTP 时就会变得更加明显,比如 llama.cpp 就还不支持 MTP。这个猜想的合理之处在于支持 MTP 的 DeepSeek 官方 API 更不容易遇到这种情况,而第三方部署的同款模型则更容易出现这个问题。

4

写在最后

这个bug的出现,更像是训练/后训练数据模式 + 解码/推理堆栈交互引发的系统性瑕疵,而非单一部署事故;由于已广泛被社区复现、且影响到“代码/结构化输出”核心场景,优先级应为 P0。短期用工程手段兜底可控,长期仍需官方在数据清洗、分词表与推理栈一致性、思考流约束等层面做根因修复。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ObxoixzqkMo1LbAF38vifplQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券