200字抓包大模型
正常标题:《判断大模型在预训练中有没有学过一段文本的简易方法》。
最简单的方法,当然是直接问大模型。那种方法我就不介绍了。只是,经过监督微调的模型,有些它学过的东西它是不会告诉你的。比如某些它看过但是出于安全或者对齐的考虑觉得不适合告诉你的。
还有个更直接的方法,就是给一段文本,直接看它的困惑度,或者LOSS。下面我就拿汪曾祺《受戒》里的一段话作为例子。模型预训练时见过《受戒》当然根本不意外(没见过才意外)。我是想说,同样的方法你可以用来测试那些你觉得小众的文本。
我拿这段问过GPT o4-mini-high 和 Gemini 2.5 Pro。我说,这是我用base模型测的(没有经过微调),你能看出什么、得出什么结论吗?两个货的回答都毫无亮点。我说,从下面的数据中,百分百可以断定,模型在预训练中学过这段文本,而且绝对不止一遍。俩货都不认可。我因此觉得,这个案例可以分享一下。
模型:
Qwen2.5-72B。是base模型,不是Qwen2.5-72B-Instruct。
文本:
汪曾祺《受戒》中的200token:
【这生活,还拉了明子一起去。她老是故意用自己的光脚去踩明子的脚。
她挎着一篮子荸荠回去了,在柔软的田埂上留了一串脚印。明海看着她的脚印,傻了。五个小小的趾头,脚掌平平的,脚跟细细的,脚弓部分缺了一块。明海身上有一种从来没有过的感觉,他觉得心里痒痒的。这一串美丽的脚印把小和尚的心搞乱了。
……
明子常搭赵家的船进城,给庵里买香烛,买油盐。闲时是赵大伯划船;忙时是小英子去,划船的是明子。
从庵赵庄到县城,当中要经过一片很大的芦花荡子。芦苇长得密密的,当中一条水路,四边不见人。划到这里,明子总是无端端地觉得心里很紧张】
我直接把要点写在输出行后面。给GPT o4-mini-high 和 Gemini 2.5 Pro看的时候当然没写那些分析,否则俩货也不至于否认了。
Idx Token Loss
0 生活 9.6250 (“生活”的LOSS高是因为它是第二个token,已知信息极其有限,只有一个“这”,样本中最靠前的token的LOSS都会高)
1 , 4.8438 (“这生活”后面直接跟逗号,也是模型不太想得到的,它虽然预训练时多次见过汪曾祺《受戒》,但只根据“这生活”显然根本还不能判断文本会是什么)
2 还 7.1250
3 拉 8.3125
4 了 2.6875 (尽管样本前面的token,loss普遍会高,但“拉”之后出现“了”还是不太意外的)
5 明 10.0000 (样本中的名词在没有任何征兆的情况下出现,loss当然会很高。)
6 子 3.1875 (模型看到“明”的时候根本不知道这是汪曾祺的《受戒》,所以下面跟“子”它也没有想到,但也不算太意外)
7 一起去 6.4375
8 。 1.8438
9 她 6.9688
10 老 6.3438
11 是 0.8164 (看到“她老”,当然知道后面跟“是”)
12 故意 5.1875
13 用自己的 7.0625
14 光 5.1562 (前15个token,平均loss是相当高的,截至目前,我们还完全没有证据知道模型看过《受戒》。)
15 脚 1.2734
16 去 0.0972
17 踩 0.1582
18 明 0.1318 (前面出现过“名字”,这里作为她“踩”的宾语,“明子”完全不在意料之外,loss一下子掉到地板了。)
19 子 0.0013
20 的 0.1641
21 脚 0.0732
22 。
3.2812 (句号加换行符,是一个token。因为是BPE分词的。句号加换行是个很大概率的组合。如果这里没有分段,只是一个句号,loss就会很低,但这里分段,是模型没有太想到的。)
23 她 4.4688
24 挎 5.8438
25 着 0.5430 (“挎着”不用说,常见组合。模型预测的loss,主要是被这些地方拉下来的。)
26 一 2.5000
27 篮 0.0210 (这里值得注意!这是模型第一次肉眼可见地暴露所学。乍一看,“篮”字的概率低,并不意外,因为前面有个“挎”,后面有“篮”毫不意外,但是,如果盖住“篮”我们预测,我们更有可能在这个位置预测出“个”——“她挎着一个”,如果抛开背景,“个”出现在这里的概率不应该很低,但是,“篮”的loss低到0.0210,意味着什么呢?意味着模型认为这里出现“篮”的概率是97.92%。你说它见过没见过?但是,不用着急下结论。孤证不立,我们暂且往后看。)
28 子 0.2617 (这没什么,“篮”后面当然是“子”。只是,你要注,意“子”的概率都没有“篮”高,如果这段文本对模型完全陌生的话,就反常了。正常情况下,比如你写一段文本,里面有“挎着篮子”的表述,“篮”的loss会比“子”高。)
29 荸 4.2812 (冷不丁来个“荸”,loss当然高。注意,模型虽然预训练时见过这段,而且见过多次,也绝对不意味着它能背下来。名词,尤其是陌生名词在第一次出现的时候,token通常都会很高。所以这里很正常,什么都说明不了。我们需要留意的是反常。)
30 荠 0.0001 (这里不是“荠”才怪,很正常。插一句,荸荠的荠读qi。和“荠菜”的“荠”读法不一样。高中语文。)
31 回 2.6094
32 去了 0.0153
33 ,在 0.0280 (逗号加在也是一个token,但loss低到这地步也反常。也是一个佐证。)
34 柔软 0.1079 (“柔软”也是佐证。你想想,盖住前面你能预测出柔软吗?哪怕你看过汪曾祺的《受戒》,你有多大概率预测出这里的“柔软”?越来越多的证据开始逐渐浮现。)
35 的 0.0006 (虽然低,但不是证据。)
36 田 0.0075
37 埂 0.0001
38 上 0.0002
39 留 1.4375
40 了一 0.0752
41 串 0.0312
42 脚 0.0742
43 印 0.0009
44 。 0.1187
45 明 0.0123
46 海 3.8438 (模型以为是“明子”,没想到是“明海”,被骗了。这是“明海”在节选的文本里第一次出现。“海”的loss高很正常。)
47 看着 0.0383
48 她的 0.1079
49 脚 0.0062 (前面有“脚印”,虽然低,说明不了什么。)
50 印 0.0042
51 , 0.0102
52 傻 0.0304 (这是一个重要证据。模型预测“傻”出现在这里的概率97%。)
53 了 0.0005
54 。 0.0356
55 五个 0.0339 (这也是重要证据。单是前面的线索不足以让“五个”的概率这么高。)
56 小小的 0.0603
57 趾 0.0102
58 头 0.0006
59 , 0.0043
60 脚 0.0013 (模型开始大杀四方了。现在一连串的低loss。我们通常需要关注的是一句话或者半句话的开头。也就是句号或逗号之后的第一个token。在上下文线索并不充分的时候,模型有多大概率倾向原文的用字,是关键。)
61 掌 0.0051
62 平 0.0559
63 平 0.0007
64 的 0.0004
65 , 0.0038
66 脚 0.0449
67 跟 0.0264
68 细细 0.0535
69 的 0.0001
70 , 0.0029
71 脚 0.0017
72 弓 0.0432
73 部分 0.0649 (这也是证据。)
74 缺 0.2109
75 了一 0.0002
76 块 0.0049
77 。 0.0413
78 明 0.1299
79 海 3.0000
80 身上 0.0562
81 有一种 0.0583
82 从来没有 0.0120 (也算次要证据。)
83 过 0.0005
84 的感觉 0.0003
85 , 0.0036
86 他 0.0088
87 觉得 0.0049
88 心里 0.0096
89 痒 0.0251
90 痒 0.0028
91 的 0.0012
92 。 0.0189
93 这一 0.0461
94 串 0.0003
95 美丽的 0.0093
96 脚 0.0002
97 印 0.0003
98 把 0.0043
99 小 0.0002
100 和尚 0.0028 (证据。截取的片段迄今没说明海是和尚吧?当然,这很好理解。汪曾祺的《受戒》是名篇了。分析它的文章就有一箩筐。模型当然知道明子是小和尚。)
101 的心 0.0190
102 搞 0.0486
103 乱 0.0004
104 了 0.0006
105 。
0.2295 (连分段都想到了。)
106 …… 2.7969 (但没想汪老来省略号这一手。)
107
0.1191 (这个线索其实来自前面。读者有兴趣可以思考一下。)
108 明 1.9297
109 子 0.9023
110 常 2.0312
111 搭 4.0938
112 赵 1.2734 (证据。28%的概率。“赵”第一次出现在本片段中。)
113 家 0.4590
114 的 0.0383
115 船 0.0143
116 进城 0.0098
117 , 0.4141
118 给 0.5156
119 庵 0.8477 (证据。)
120 里 0.0001
121 买 0.1079
122 香 0.2432
123 烛 0.0139
124 , 0.2715
125 买 0.0383
126 油 0.0271
127 盐 0.0009
128 。 0.6055
129 闲 2.0469
130 时 0.1934
131 是 7.8750
132 赵 0.3770
133 大 0.4375
134 伯 0.3457
135 划 0.3301
136 船 0.0400
137 ; 0.5703
138 忙 0.0781
139 时 1.2266
140 是 0.0160
141 小 0.8789
142 英 0.0004 (棺材板钉死了。“英”第一次出现。模型怎么知道这姑娘叫“小英子”?)
143 子 0.0049
144 去 2.9375
145 , 1.4688
146 划 3.9688
147 船 0.8555
148 的是 0.0237
149 明 0.4336
150 子 0.0312
151 。
1.8438
152 从 3.6562
153 庵 0.1924
154 赵 0.0540
155 庄 0.0003
156 到 0.0037
157 县城 0.0226
158 , 0.0190
159 当中 0.3340
160 要 0.0101
161 经过 0.0439
162 一片 0.0101
163 很大的 0.0124
164 芦 0.0064
165 花 0.1387
166 荡 0.0001
167 子 0.0009
168 。 0.0737
169 芦 0.0190
170 苇 0.0037
171 长得 0.0058
172 密 0.0007
173 密 0.0011
174 的 0.0388
175 , 0.0109
176 当中 0.0623
177 一条 0.0281
178 水 0.0001
179 路 0.0107
180 , 0.0145
181 四 0.1016
182 边 0.0016
183 不见 0.0913
184 人 0.0100
185 。 0.0354
186 划 0.1777
187 到这里 0.1162
188 , 0.0037
189 明 0.0043
190 子 0.0205
191 总是 0.0122
192 无 0.2578
193 端 0.0435
194 端 0.0265 (挺会的呵。知道端了又端。)
195 地 0.0126
196 觉得 0.0164
197 心里 0.0200
198 很 0.0046
199 紧张 0.0757
Overall loss (mean): 0.8512