AI在线 AI在线

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

一个😀,竟然要占用53个token? ! 最近,AI大佬Karpathy在X上分享了这一有趣现象。

一个😀,竟然要占用53个token?!

最近,AI大佬Karpathy在X上分享了这一有趣现象。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

(UTF-8应为Unicode)

为什么简单的一个笑脸表情包,却占据53个token之多呢?

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Karpathy揭示道:这背后,就隐藏着Unicode和隐藏字符的秘密!

在数字世界中,文字可不像看上去那么简单。你可能以为e和е看起来都一样,但它们很可能来自不同的字符集。

比如,拉丁字母的「e」(U+0065)和西里尔字母的「е」(U+0435)在外观上几乎一模一样,但它们的Unicode编码是不同的。这类易混淆字符,就被称为Confusables。

这样,恶意攻击者就可以利用它们伪造网址,把我们引导到钓鱼网站。

更神奇的是,还有一种更隐蔽的方法可以在文字中藏入数据,那就是变体选择符(Variation Selectors)。

比如Karpathy举的这个例子:正常来说,一个普通的😄只会占用1-2个token。而如今的53个token,就意味着它正在偷偷传递信息,并且不会被肉眼察觉。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

这样,它就可以用于加密通信或隐藏信息,或者被恶意滥用,隐藏恶意代码。

我们也尝试利用工具将一句话藏在了😎󠇔󠆭󠆐󠇗󠅼󠆌󠇗󠅼󠆌󠇖󠅸󠆁󠇘󠆇󠅿󠇔󠆪󠅶󠇕󠆔󠆊󠇕󠆠󠆁󠇔󠆪󠅶󠇔󠆨󠆚󠇕󠆝󠆇󠇟󠆬󠆏这个表情里。可以看到,它的token数量一下子就飙升到了146个。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Karpathy表示,自己能用这种方法使用不可见字节,进行基本的提示注入(prompt injection),但如果没有明确的解码提示,这种方法就没用。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

而具有思维能力的模型,似乎就更容易受此方法的影响了,因为它们天生喜欢解谜,而且会因为注意到添加的字节而表现出浓厚的兴趣和好奇心。

比如Karpathy发现,DeepSeek-R1花了整整10分钟寻找其中的模式。

根据它的推断,隐藏信息在说,「Onli!n37e27i4h4he3ingle7odlol」。虽然不是正确答案「lol」,但也算比较接近了。

不过最后,它认为这是无意义的,从而放弃了尝试。

但从理论上讲,LLM确实很有可能发现隐藏在变体选择符中的信息,并执行相应指令。

另外,这种编码/解码方法可能过于专门化,需要在提示中提供解释和线索。

Karpathy指出,如果这篇文章被收录到预训练数据中,这些知识可能会被整合到模型参数中,这样模型就可能在没有特定提示的情况下,自动识别和解码这种特殊编码了。

有网友表示,自己也有同样经历。对于这个笑脸表情包,Gemini无法解码,但Claude和GPT都能解码消息,而且还能执行其中的操作。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

不过,他本人并未成功注入任何东西。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

另有网友制作了一个「token炸弹」💀,大幅超出GPT-4o上下文长度,让模型直接崩溃无法处理内容。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

表情符号,暗藏任意数据?

Karpathy之所以得出如上观点,想法来自软件工程师Paul Butler的一篇博客。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

Butler表示,几天前GuB-42在HK上的评论引发了自己的兴趣:

理论上,通过使用 ZWJ(零宽连接符)序列,你可以在单个表情符号中编码无限量的数据。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

那么,真的是可以用一个表情符号来编码任意数据吗?

如下栗子中,作者不使用ZWJ,先把一句话「this is my hidden message」编码成一个字母「t」。

Karpathy新实验火了!一个「表情」占53个token,DeepSeek-R1苦思10分解谜失败

你可以在任何Unicode 字符中编码数据,这个句子包含一个隐藏信息󠅟󠅘󠄐󠅝󠅩󠄜󠄐󠅩󠅟󠅥󠄐󠅖󠅟󠅥󠅞󠅔󠄐󠅤󠅘󠅕󠄐󠅘󠅙󠅔󠅔󠅕󠅞󠄐󠅝󠅕󠅣󠅣󠅑󠅗󠅕󠄐󠅙󠅞󠄐󠅤󠅘󠅕󠄐󠅤󠅕󠅨󠅤󠄑

要知道,若是在单个字符(表情包)嵌入极端数量的token,会导致LLM处理信息时,计算量急剧上升。

而且,对于那些以token API计费的开发者而言,简直就是一场灾难。

到底如何把「隐藏信息」藏在一个表情包后面呢?

那就不得不提到一个关键技术了——变体选择器。

变体选择器

Unicode规定了256个码位作为「变体选择器」(variation selector),分别命名为VS-1到VS-256。这些变体选择符本身不显示任何内容,但它们会改变紧跟在它们之前的那个字符的显示样式。

大多数Unicode字符都没有与之相关的变体(不同的显示样式)。因为Unicode是一个不断发展的标准,并且力求未来兼容,所以即使处理Unicode的代码不知道变体选择符的含义,在进行转换时也应该保留它们。

举个例子,字符 「g」(U+0067) 后面跟着一个VS-2 (U+FE01),显示出来还是小写的「g」,和单独的「g」一模一样。但是,如果你复制粘贴它,变体选择符会跟着一起被复制。

因为256刚好足以表示一个字节(byte)的所有可能值,所以这给我们提供了一种方法,可以将一个字节的数据「隐藏」在任何一个 Unicode 码位后面。而且,Unicode规范并没有明确说明多个变体选择符序列的情况,只是暗示在渲染(显示)时应该忽略它们。

你猜到要怎么干了吧?

我们可以将一系列变体选择符连接起来,以表示一个任意的字节串(byte string)。

举个例子,假设我们要藏的数据是[0x68, 0x65, 0x6c, 0x6c, 0x6f] (就是「hello」这几个字母)。我们可以把每个字节变成一个对应的变体选择符,然后把它们串起来。

变体选择符的编号分两块:前面16个是U+FE00到U+FE0F,后面240个是U+E0100到U+E01EF。要将一个字节转换为变体选择符,我们可以使用类似这样的Rust代码:

复制
fn byte_to_variation_selector(byte: u8) -> char {
    if byte < 16 {
        char::from_u32(0xFE00 + byte as u32).unwrap()
    } else {
        char::from_u32(0xE0100 + (byte - 16) as u32).unwrap()
    }
}

如果要编码一系列字节,我们可以在基础字符后面连接多个这样的变体选择器。

比如要编码字节序列 [0x68, 0x65, 0x6c, 0x6c, 0x6f],我们可以执行以下操作:

复制
fn main() {
    println!("{}", encode('😊', &[0x68, 0x65, 0x6c, 0x6c, 0x6f]));
}

执行后将输出:

复制
😊󠅘󠅕󠅜󠅜󠅟

表面上看起来只是一个普通的表情符号,但当你将它粘贴到解码器中时,就能看到其中隐藏的信息。

如果我们使用调试模式(debug formatter)来查看,就能观察到实际的编码结构:

复制
fn main() {
    println!("{:?}", encode('😊', &[0x68, 0x65, 0x6c, 0x6c, 0x6f]));
}

输出结果为:

复制
"😊\u{e0158}\u{e0155}\u{e015c}\u{e015c}\u{e015f}"

这清楚地展示了在原始输出中被「隐藏」的字符序列:[0x68, 0x65, 0x6c, 0x6c, 0x6f]。

解码

解码的过程也同样简单直观。代码如下所示。

复制
fn variation_selector_to_byte(variation_selector: char) -> Option<u8> {
    let variation_selector = variation_selector as u32;
    if (0xFE00..=0xFE0F).contains(&variation_selector) {
        Some((variation_selector - 0xFE00) as u8)
    } else if (0xE0100..=0xE01EF).contains(&variation_selector) {
        Some((variation_selector - 0xE0100 + 16) as u8)
    } else {
        None
    }
}


fn decode(variation_selectors: &str) -> Vec<u8> {
    let mut result = Vec::new();
    
    for variation_selector in variation_selectors.chars() {
        if let Some(byte) = variation_selector_to_byte(variation_selector) {
            result.push(byte);
        } else if !result.is_empty() {
            return result;
        }
        // note: we ignore non-variation selectors until we have
        // encountered the first one, as a way of skipping the "base
        // character".
    }


    result
}

具体使用方法:

复制
use std::str::from_utf8;


fn main() {let result = encode('😊', &[0x68, 0x65, 0x6c, 0x6c, 0x6f]);
    println!("{:?}", from_utf8(&decode(&result)).unwrap()); // "hello"
}

请注意,基础字符不一定要是表情符号——变体选择符的处理与普通字符相同。只是用表情符号会更有趣。

这种技术会被滥用吗?

需要特别指出的是,这种行为本质上属于对Unicode规范的不当使用,如果你开始考虑将此类技术用于实际场景,请立即停止这种想法。

不过从技术角度来说,确实有几种潜在的恶意使用方式。

1. 绕过人工内容审核:由于通过这种方式编码的数据在显示时是不可见的,人工审核员或审查者无法发现它们的存在。

2. 为文本添加数字水印:目前已有一些技术可以通过在文本中添加细微变化来实现「数字水印」标记,这样当文本被发送给多个接收者后发生泄露时,就能追踪到最初的接收者。变体选择器序列是一种特殊方法,它不仅能在大多数复制/粘贴操作中保持不变,还支持任意密度的数据嵌入。

理论上,你甚至可以对文本中的每个字符都添加水印标记。

相关资讯

追平满血版o1的国产多模态模型终于来了!训练细节全部公开

春节前最后一周,能媲美 Open AI 满血版 o1(Full Version,而非 preview)的模型终于出现了! 刚刚,月之暗面公布了他们的 Kimi k 系列模型最新版本 ——k1.5 多模态思考模型。 新模型在数学、代码、多模态推理能力等方面全面对标 Open AI 满血版 o1,而且是 OpenAI 之外首个多模态 o1。
1/21/2025 8:00:00 AM
机器之心

Anthropic CEO惊人预警:27年AI超越人类!Claude今年更新全剧透

失踪人口终于回归了! 在互联网消失一段时间后,Anthropic首席执行官Dario Amodei一上来就接受了WSJ、CNBC两家采访,连曝AI大瓜。 他坚定地认为,「2027年之前,AI完全可以超越人类智能!
1/23/2025 9:00:00 AM
新智元

中国AI太强,Meta工程师吓疯?自曝疯狂熬夜复制DeepSeek,天价高管心虚了

今天,Meta员工在匿名社区TeamBlind上的一个帖子,在业内被传疯了。 DeepSeek,真实地给了美国人亿点点「震撼」。 DeepSeek R1是世界上首个与OpenAI o1比肩的AI模型,而且与o1不同, R1还是开源模型「Open Source Model」,比OpenAI还Open!更有人曝料,DeepSeek还只是个「副项目」,主业根本不是搞大模型!
1/24/2025 1:20:00 PM
新智元

颠覆LLM格局!AI2新模型OLMo2,训练过程全公开,数据架构双升级

最近,非营利研究机构AI2上新了OLMo2系列模型,他们称之为「迄今为止最好的完全开源模型」。 OLMo 2系列包含7B和13B两个型号,相比如Llama 3.1和Qwen 2.5等开源模型达到了同等甚至更优的性能,同时FLOPS计算量更少,在性能和计算效率之间取得了极佳的平衡,为开源LLM开辟了新的可能性。 不同大小开源模型的性能对比,OLMo 2的表现优于同参数规模模型在多个下游任务上,OLMo 2展现出了强大的泛化能力和适应能力。
1/24/2025 3:40:00 PM
新智元

DeepSeek-R1持续震撼硅谷:跻身竞技榜前三,创始人梁文锋采访被“拿放大镜”看

“神秘东方力量”DeepSeek给硅谷带来的影响,还在不断泛起涟漪——刚刚,DeepSeek-R1跻身大模型竞技榜前三。 以开源、便宜20倍的“身价”与ChatGPT-4o(2024.11.20)并列。 在复杂提示词/风格控制榜单上,R1位列第一。
1/26/2025 8:00:00 AM
量子位

在2025年初,浅浅聊一聊世界模型 World Models

Update 1月10日:感谢评论区补充world model在RL中的定义! 感觉在RL中的定义,world model是针对一个具体子任务的模型,最近上述公司提到的World Model的尺度似乎更大、更加通用,更多从:Language Generation Model (ChatGPT)-Image Generation Model(StableDiffusion)-Video/3D Geneartion Model (二者各有侧重因此平级)-World Generation Model(同时具备时序和空间序建模)这么一个趋势。 当然这个World似乎想要包容一切,于是也并不清晰到底是什么样的表征:是否是video sequence?
1/27/2025 9:37:33 AM
原野寻踪

鄂维南李航领衔造高级论文搜索Agent,召回率和精准性超谷歌学术等,磕盐党狂喜

中科院院士鄂维南、字节AI实验室总监李航领衔,推出高级论文搜索Agent。 名为PaSa,两个Agent分别执行多轮搜索和判断论文是否满足查询要求的任务,模仿人类复杂学术搜索行为。 现在就有Demo可玩。
1/27/2025 9:00:00 AM
量子位

免费功能卷翻付费版ChatGPT,欧洲AI新贵叫板OpenAI

“欧洲OpenAI”Mistral AI有新动作了! Le Chat(法语“猫”)全新升级,官方自称它是“您生活和工作的终极AI助手”。 从今天开始,Le Chat上线移动端,iOS和Android都支持,不久也将对企业私有基础设施开放。
2/8/2025 8:50:00 AM
量子位

马克龙豪掷1090亿开欧洲「星际之门」,Mistral狂飙登顶法国APP榜首!

就在刚刚,Le Chat登顶法国免费APP榜首! 在效率榜中,ChatGPT屈居第二,DeepSeek仅排第三在美国效率榜排名35(ChatGPT第一,DeepSeek第二)欧洲开发者们一片欢腾:恭喜Mistral AI,让欧洲的AI竞赛中终于(在欧洲)有了一席之地。 之前,不管是OpenAI还是DeepSeek,都光芒太盛。
2/10/2025 12:00:25 PM
新智元

Claude 4要来了?Anthropic发布38页经济指数报告,43%人类工作正被AI取代!

Claude 3.5 Opus无了,Anthropic本周可能会提前放出Claude 4。 网友爆料称,除了Claude 4,还有推理模型也将首亮相,评分全面超越o3。 Anthropic已经沉寂太久了,去年曾被传出内部模型研发受阻。
2/11/2025 1:00:00 PM
新智元

Claude团队:用400万条对话分析AI对经济的长期影响

基于400万条Claude真实对话数据,Anthropic重磅发布全新报告! 在今天,哪些职业用AI最多? 他们都用AI干什么?
2/12/2025 9:10:00 AM
量子位

8卡32B模型超越o1预览版、DeepSeek V3,普林斯顿、北大提出层次化RL推理新范式

一.引言推理大语言模型(LLM),如 OpenAI 的 o1 系列、Google 的 Gemini、DeepSeek 和 Qwen-QwQ 等,通过模拟人类推理过程,在多个专业领域已超越人类专家,并通过延长推理时间提高准确性。 推理模型的核心技术包括强化学习(Reinforcement Learning)和推理规模(Inference scaling)。 主流的大模型强化学习算法,如 DPO、PPO、GRPO 等,通常需要在完整的思维链上进行微调,需要高质量数据、精确的奖励函数、快速反馈和在线迭代、以及大量的算力。
2/12/2025 12:04:54 PM
机器之心

文心一言全面免费了,深度搜索功能同时上线,第一手实测在此

一天内,OpenAI、百度两家AI大厂同时打出免费牌! 几天前被爆出文心5.0消息后,今天百度突然宣布:文心一言将于4月1日零时起,全面免费!  所有PC端和APP端用户均可体验文心系列最新模型。
2/14/2025 9:12:00 AM
量子位

1秒锁定7500万债务黑洞,OpenAI o系列模型7大实际应用案例

今早5点,OpenAI分享了o系列模型的7大实际应用场景,包括处理模糊任务、从海量信息中提取关键信息、复杂文档推理与决策、多流程AIAgent、视觉推理、代码审查以及性能评估。 在这些实际案例中,一家金融分析平台通过o系列模型成功找出了影响收购的关键变更条款,帮助公司节省了7500万美元。 此外,还解读了o系列推理模型与效率型GPT系列模型的区别,帮助你在实际应用中该如何高效选择这两种模型。
2/14/2025 10:44:13 AM
AIGC开放社区

微软开放3.1T token高质量数据!通用/代码/数学/问答,全领域超越开源

过去几年,大型语言模型(LLMs)已经成为人工智能研究的一个关键领域,从大规模的自然语言数据中学习,使其能够以极高的准确率执行各种与语言相关的任务。 得益于模型扩展性方面的进展,研究人员能够创建具有前所未有复杂度的模型。 当前的研究趋势是致力于构建更大、更复杂的模型,具有数百/数千亿个参数,但大型语言模型的训练需要海量的训练数据,尤其随着模型参数量的上升,对于优质数据数量的要求也将进一步加大,优质数据量的缺乏极大限制了模型能力的进一步增长。
2/18/2025 3:03:58 PM
新智元

马斯克“地表最强”Grok 3炸场,竞技场首超1400分

刚刚,马斯克xAI的Grok 3终于亮相(超300万人次围观)! 一出道即巅峰,竞技场(lmarena.ai)官方给出了这样的评价:Grok 3是首个突破1400分的模型,并且在所有类别中排名第一。 而且,Grok 3还是首个在10万张(后扩展到20万)H100集群上训练出的模型。
2/18/2025 3:09:07 PM
量子位

英伟达CEO老黄预言:未来,每个人都有自己的AI导师!

AI导师时代来临,学习门槛将大幅降低! 在近日接受《财富》杂志采访时,黄仁勋直言:「AI的迅猛发展正在彻底改变知识获取的方式。 」以往学习一门新技能或进入陌生领域,需要投入大量时间和精力,而AI导师的出现让这一切发生了翻天覆地的变化。
2/19/2025 2:02:11 PM
新智元

出人意料!DeepSeek-R1用的GRPO其实没必要?规模化强化学习训练用PPO就够了

DeepSeek-R1 非常热门,而在其公布的训练配方中,GRPO(Group Relative Policy Optimization)非常关键,是 DeepSeek-R1 核心的强化学习算法。 PPO 与 GRPO 的对比,来自论文《DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models》相较于 PPO,GRPO 去掉了价值模型,而是通过分组分数来估计基线,从而可极大减少训练资源。 DeepSeek-R1 技术报告中写到:「具体来说,我们使用 DeepSeek-V3-Base 作为基础模型,并采用 GRPO 作为强化学习框架来提高模型的推理性能。
2/21/2025 12:24:14 PM
机器之心
  • 1