故障词元 Glitch Token 是什么?让大模型“卡壳”的奇怪 token
故障词元(Glitch Token)是指大语言模型词表中的一些特殊 token,它们本应帮助模型正常运行,却会导致模型产生异常的输出。华中科技大学、南洋理工大学等高校的研究团队在 2024 年发表的研究《大语言模型中的故障词元》中,对这一现象进行了系统的分析,表明各种大模型中都普遍存在故障词元。
一个出名的例子
2023 年初,有研究者发现,如果让 GPT-3 等模型重复某些看起来很奇怪的词,比如“SolidGoldMagikarp”(据推测来自某个网络论坛的用户名),模型会表现得非常诡异:它可能完全无法复述这个词,而是说出另一个毫不相关的词;可能声称自己没看到任何内容;可能回复得语无伦次;甚至态度变得奇怪。这类 token 被研究者称为“故障词元”,引起了广泛的好奇和讨论。
它们是怎么产生的
大语言模型的词表是由分词器在一个大规模的语料上统计生成的,而模型本身则在另一个(或经过不同处理的)语料上训练。问题可能出在两者之间的不一致:某些字符串在构建词表的语料中出现得足够频繁,被收进了词表成为一个独立的 token,比如某个网站上反复出现的用户名、代码中的某段特殊字符;但在模型实际的训练数据中,这些 token 几乎从未出现过,比如那些内容在清洗时被过滤掉了。结果是,这些 token 的嵌入向量几乎没有被训练过,模型对它们“一无所知”,处理它们时就会产生不可预测的行为。
研究的发现
研究团队对多个主流的大模型进行了系统的测试,归纳了故障词元导致的多种异常表现:无法正确复述、拼写错误、产生幻觉、答非所问、输出乱码或重复内容等。他们还发现,故障词元在模型内部的嵌入空间中往往呈现出聚集的特点,据此提出了更高效地自动检测故障词元的方法,而不需要逐个测试词表中的所有 token。
为什么值得关注
故障词元不只是一个有趣的现象,它也涉及模型的可靠性和安全性:异常的 token 可能被恶意利用,诱导模型产生不当的输出,或者干扰模型的正常工作。对于开发者来说,检测并处理故障词元,比如在训练时确保词表中的每个 token 都得到足够的学习,或者在构建词表时使用与训练数据一致的语料,是提升模型稳健性的一个方面。较新的模型通过改进分词器和数据处理流程,已经大大减少了这类问题。