AI MBTI 是 SoulStation 的一个功能模块:输入一段文字,输出这段文字属于每种 MBTI 人格类型的概率,高亮哪些句子如何影响结果。
背后的模型,是用 MBTI 互猜和用户反馈中收集的数据样本训练出来的分类模型。
不少用户会默认这个模型像大语言模型那样「读懂」了这段话:先分析句意,再对照人格理论,最后得出结论,中间存在一条可以复述的逻辑链。其实不是的。
分类模型和大语言模型虽然在技术上有一些共性,但工作方式完全不同。
本文将涉及拟合、词向量、CNN、RNN、Transformer、BERT、LLM等概念的简述。
人类解决计算问题的传统路径是:写出方程,求精确解。这类问题的共同点是,规律本身是已知的、可以写成公式的。
但还有类问题,规律本身写不出来。没有方程,只有「输入 → 已知答案」的样本对数据。
这时候思路只能反过来:既然写不出方程,那就先选定一些可调参数的函数,再结合数据把参数调到最合适的位置。
这个过程叫「拟合」:用一条函数曲线去逼近数据背后隐藏的规律。拟合最经典的工具是最小二乘法,1805 年由勒让德(Legendre)在天文学领域提出:观测数据总有误差,不追求曲线穿过每一个观测点,只追求总体误差最小。
机器学习里的「学习」,指的就是这个过程:用数据拟合函数参数。
第一步是分词(tokenization):把句子切成词或子词单元。「今天心情很好」→「今天 / 心情 / 很 / 好」。
第二步是给每个词一个向量。目前通行的方案是词嵌入(word embedding):用一段向量表示一个词,并且让语义相近的词向量也相近。
语言学家哈里斯(Harris,1954)提出分布式假说,词的语义由其分布(语境)决定。
2013 年米科洛夫(Mikolov)等人在 Google 提出 word2vec,把这个思想做成了一个纯粹的拟合问题:用每个词预测其上下文(或反过来),训练一个浅层神经网络。
训练完把中间层权重拿出来当词向量。
最著名的结果是:king − man + woman ≈ queen。
文字变成数字之后,「分类」就成了标准的数学问题:拟合一个函数 f,把向量映射到类别上的概率分布。
到此为止,解决了「怎么算」,但整个任务还建立在一个前提上:人格真的会体现在文字里,能被统计方法捕捉。
1999 年,彭尼贝克(Pennebaker)和金(King)在《人格与社会心理学杂志》(Journal of Personality and Social Psychology)上发表了一项研究:收集被试的写作样本,用 LIWC(Linguistic Inquiry and Word Count,语言查询与字词计数)工具统计各类词汇的使用频率,与人格问卷得分对照。
结果是个体用词与人格特质存在小而稳定的相关:外向者更多用社交类词汇和「我们」;情绪不稳定者更多用第一人称单数「我」和负面情绪词;尽责性高的人更多用工作与成就类词汇;开放性高的人更多用分析性、思辨性的词。
单看任何一条都微弱,但这些关联在大量样本上方向一致、被反复复现。
对分类模型来说,「小而稳定」的信号叠加起来就是可学习的。
前提既然成立,剩下的就是工程问题:这个 f 该是什么。接下来介绍两种文本分类模型:TextCNN 和 BERT。
图片天然就是数字。一张 64×64 像素的彩色图,就是 3 个 64×64 的像素数值矩阵(RGB 三通道)。
但「知道图片是矩阵」和「能分类」之间隔了半个多世纪。
直接把所有像素展成一个长向量、接全连接网络,参数量会爆炸,而且目标挪到图片边缘就认不出来了(缺乏平移不变性)。
突破口来自生物学:1959 到 1962 年,休伯尔(Hubel)和威泽尔(Wiesel)在猫的初级视觉皮层记录到两类神经元。
「简单细胞」对视野中特定位置的边缘起反应,「复杂细胞」对边缘出现在哪里更宽容,且信号呈现层级组织(两人获 1981 年诺贝尔生理学或医学奖)。
1980 年,福岛邦彦据此造出认知机(Neocognitron),这是卷积网络的直系祖先。
1989 年起,勒昆(LeCun)把它和反向传播结合,做出识别手写邮编的 LeNet,在银行支票系统里实际部署了多年。
2012 年,克里泽夫斯基(Krizhevsky)、苏茨克维(Sutskever)和辛顿(Hinton)的 AlexNet 在 ImageNet 竞赛上把 top-5 错误率降到 15.3%,比同届第二名低了近 11 个百分点。
凭借 GPU 算力与大规模数据,深度学习由此进入主流。
卷积网络(CNN)的设计可以概括成三条机制:
局部连接:每个神经元只看输入的一小块(比如 3×3 的窗口),小特征逐步组合成大特征:边缘 → 纹理 → 部件 → 物体。
权重共享:同一个 3×3 的权重模板(卷积核)滑过整张图,哪里出现「目标」都能被同一个卷积核检出,参数量也骤降。
池化:对局部区域取最大值或平均值,压缩尺寸。
多个卷积核各学各的,一层层堆叠,最后一层接 softmax 输出目标概率。
卷积核的参数学习过程,就是用带标签的图片数据拟合的过程。
2014 年,纽约大学的金允(Yoon Kim)在 EMNLP 会议上发表论文《Convolutional Neural Networks for Sentence Classification》(用于句子分类的卷积神经网络),把 CNN 做成了一个文本分类结构,后来被称为 TextCNN。
它的输入就是词向量矩阵。接下来分三层:
卷积层:定义一批卷积核,可以把它理解成一批「词组探测器」。每个探测器盯住固定长度的连续几个词(比如 3 个、4 个或 5 个),在句子上从前往后滑。滑到一个位置,就把这几个词的向量加权求和打一个分。这个分数表示探测器对当前这截词的响应强度:越像它要找的那种词组搭配,分越高。金允的配置是窗口 3、4、5 三种,每种各 100 个,共 300 个。
池化层:每个探测器滑完整个句子,得到一长串响应分数,然后只留最高的那一个(max 池化)。意思是「它在整句里最强的一次响应有多强」。句子长短不一也不影响。
输出层:300 个探测器各交一个数,拼成一个 300 维向量,过 dropout 正则,接全连接 + softmax,输出各分类别的概率。
优点:
快、小:单个卷积核只有千个上下参数,三百个卷积核加起来约 36 万,CPU 都能训练和推理。
小数据也能胜任:几千条句子的小数据集,TextCNN 加预训练词向量就能接近或达到当年最好水平。
可解释性相对好:每个核对应一种词组搭配,能定位「证据在句中哪里出现」。
缺点:
只见局部:窗口典型只有 3~5 个词,隔着半句话的转折关系、长距离依赖看不到。
丢弃词序与位置:max 池化只取最强烈的响应,不关心「在哪一段、顺序如何」,本质上是对词组搭配的统计。
词向量是静态的:word2vec 里「苹果」只有一个向量,既表示水果也表示公司,上下文无法消除歧义。
表达能力上限低:对否定、反讽、长句嵌套等复杂语义结构缺乏建模手段。
在 Transformer 之前,处理序列的主流是循环神经网络(Recurrent Neural Network,RNN)及其改进版长短期记忆网络(Long Short-Term Memory,LSTM)。
前面的 TextCNN 用滑动窗口去看句子,窗口之间的词没有直接联系,词序只是被窗口间接带上一点。
如果判断依赖上下文信息,就得有个机制把前面读到的信息带到后面去。
RNN 的做法是逐词读入,一边读一边维护一个记忆(隐状态,hidden state)读完一个词就更新一次隐状态,再带着隐状态去读下一个词。
每一步用的是同一组权重,不是每步换一套新参数。这就是「循环」两个字的实际含义,也是它能处理任意长度句子的原因:五个词五步,五十个词五十步,参数数量不变。
记忆的维度是固定的,比如 256 维,句子再长也只有这么大。它必须把所有读过的内容压进一个定长容器里。
由此产生两个缺陷。
一是不能并行。第二步必须等第一步算完,一句一百个词的话就要串行一百次。GPU 有几千个核心,在这里却只能一个接一个地用,训练时间随句长线性增长。
二是长距离信息衰减。每传一步,记忆都要过一次压缩,排在前面那个词的信息传到第三十个词时只剩很小一份。
LSTM 和门控循环单元(Gated Recurrent Unit,GRU)是针对第二点的补救:在更新记忆的通路上加几道「门」,让模型自己学出这一步该写进多少新信息、该保留多少旧信息、该往外输出多少,重要内容于是能近乎原样地穿过很多步,不必每一步都压缩一次。
经验上,这能把有效记忆的距离从几十步拉长到几百步,但串行还是串行。
2017 年 6 月,Google 的瓦斯瓦尼(Vaswani)等人发表论文《Attention Is All You Need》,提出 Transformer 架构,核心是自注意力(self-attention):
第一步,这个词和句子里所有词两两打分:两个词的语义越相关,分越高,分数直接由两个词的向量算出来。
第二步,把一列分数归一化成一组加起来等于 1 的权重。
第三步,把所有词的向量按这组权重加权平均,得到这个词的新表示。权重高的词贡献大。
多组注意力并行计算,各自学习不同的关注模式。
这样得以解决 RNN 的两个缺陷。
一是不再有距离衰减。信息不靠接力传递,任意两个词之间的影响不经过任何中间词。
二是能并行。所有加权平均都是一次矩阵运算,没有「第二步等第一步」,GPU 的几千个核心派上用场。这使得 2017 年之后模型规模能一路飙升。
Transformer 是个通用的特征提取模块。2018 年,两项工作用不同的训练任务把它装成了两个模型:
2018.06,OpenAI 的 GPT:用 Transformer 解码器的堆叠。注意力只向左连接,训练任务是预测下一个词。猜出一个词,接到句尾,再猜下一个,一句一句接下去,就是文本生成。这个循环叫自回归(autoregressive)。
2018.10,Google 的德夫林(Devlin)等人提出的 BERT:用 Transformer 编码器的堆叠。注意力全连接,句子里任何两个词都互相可见。训练任务之一是完形填空(Masked Language Model,MLM)。
完形填空这个任务只有一个要求:猜对原词。
能把词猜对,就意味着「懂」语法、搭配、代指等概念了。
BERT 预训练还有第二个任务,叫下一句预测:给两句话,判断第二句是不是真的跟在第一句后面。
输入最前面那个特殊符号 [CLS] 不对应任何词,就是专门用来输出这个判断的。为此它必须把整句的信息汇到自己身上。
训完之后是微调(fine-tuning):在 BERT 顶部加一个小的分类层,取最后一层 [CLS] 的向量送进去。
用几千条带标签的数据把整个模型再训练几轮,就能胜任各种下游任务了。
所以用 BERT 做文本分类的系统,结构上与 TextCNN 同构。
都是输入矩阵、特征提取层(换成了 Transformer 编码器堆叠)、softmax 输出。
| TextCNN(2014) | BERT(2018) | |
|---|---|---|
| 词的表示 | 静态词向量:一个词在全语料里只有一个向量,无法区分「苹果」是水果还是公司 | 动态上下文向量:同一个词在不同句子里得到不同向量,逐层融合全文信息 |
| 能看多远 | 固定窗口(典型 3~5 个词),max 池化还会丢掉位置和顺序 | 自注意力直接连接句中任意两个词,没有距离衰减,长距离依赖、否定、转折结构都能进入特征 |
| 参数数量 | 约 36 万 | 1.1 亿(base)至 3.4 亿(large) |
GPT 这条路线不断放大,就得到了大语言模型(LLM):
GPT-2(2019,15 亿参数)已经能续写通顺段落;
GPT-3(2020,1750 亿参数)展示了上下文学习能力:不改参数,仅在提示词里给几个示例,模型就能照着示例完成新任务;
2022 年,InstructGPT / ChatGPT 用人类反馈强化学习(RLHF)把「续写器」校准成了「对话助手」。
在接近整个互联网的文本上,训练一个超大规模的自回归「下一个词预测器」。目标函数和预测「今天天气很___」填什么词是同一个。
大模型参数规模上去之后,出现了一类现象:小模型原本完全没有,但大模型突然就拥有了新的能力,比如多位数算术、多步问答、按指令格式输出。
2022 年,Google 的韦(Wei)等人将其正式命名为涌现能力(emergent abilities):不存在于较小模型、出现在较大模型中、且无法从小模型的表现外推预测的能力。
名字借自物理学家安德森(P. W. Anderson)1972 年的名文《More Is Different》(多者异也):系统复杂度跨过某个门槛后,出现无法从微观规律直接推出的新性质。
同年,同一团队提出的思维链提示(Chain-of-Thought prompting)进一步强化了这种印象:在提示词里给出几道「带中间步骤」的例题,模型会模仿着把推理过程一步步写出来,多步推理任务的正确率大幅跃升。
看起来,思维链把中间步骤写在了输出里。
不过写出来的推理过程是否是真实的计算过程仍存在争议。
2023 年特平(Turpin)等人的《Language Models Don't Always Say What They Think》(语言模型并不总是说出其所想)展示了思维链里陈述的理由可以被提示词中的偏见、选项顺序等因素操纵。
模型给出正确答案时引用的理由与实际影响答案的因素并不一致。
同年麦考伊(McCoy)等人的《Faith and Fate》(忠实与宿命)在精心设计的组合推理任务上测试发现:当任务推理深度超过训练模式覆盖的范围,模型的表现呈现「忠实或听天由命」,要么照搬见过的模式,要么崩溃,而不是像符号系统那样组合已掌握的规则。
对模型内部的可解释性研究也给出了双向证据:既找到了与真实计算对应的内部机制,也发现过「答案先定、理由后补」式的内部路径。
大语言模型在大量任务上表现出与推理难以区分的行为,但在机制层面,它是统计模式的学习与补全这一点并未被推翻。
目前对使用者来说,或许恰当的态度是把它当成一个推理表现不稳定、需要验证的强大工具,而不是一个会思考的主体。
回到开头那个问题的答案:不在,而且和「看起来在推理」的大语言模型还差着一大截。
一个分类模型(无论是 TextCNN 还是 BERT 分类器)的完整「思考过程」是:输入矩阵,做一次前向传播,也就是一连串矩阵乘法、加权求和与非线性变换,得到类目数量的数字,softmax 归一化成概率,取最大值,结束。
中间没有生成的步骤,也没有假设与验证。
大语言模型至少把「步骤」外化成了逐词生成的文本(这也是思维链能提升它表现的机制);分类模型连这个过程都没有,输出端只有一个概率分布。
那这个「判断」能不能被解释?要分情况,学界称之为可解释性光谱:
| 模型 | 可解释性 | 原因 |
|---|---|---|
| 线性回归 / 逻辑回归 | 天然可解释 | 系数直接就是每个特征的贡献方向和大小 |
| 决策树 | 可解释 | 一条从根到叶的 if-then 规则路径就是一个完整决策依据 |
| TextCNN | 部分可解释 | 能定位哪个卷积核、句中哪个位置的 n-gram 贡献最大,但证据如何组合成最终分数仍不透明 |
| BERT / 深度网络 | 黑盒 | 上亿参数分布式地共同编码模式,任何单个参数都不对应任何人类概念 |
对于黑盒模型,只能做事后解释:模型照常工作,另用专门的方法去考察「它为什么这么判断」。
一个常见的误解是把注意力权重当成解释。
2019 年贾恩(Jain)与华莱士(Wallace)的论文《Attention Is not Explanation》(注意力并非解释)给出实证证据:注意力权重与基于梯度的特征重要性常常对不上;把注意力换成差别很大的一组,模型的预测也几乎不变。
我们结果页里高亮句子的来源,正是事后解释方法里流传最广的一种:LIME。
LIME 的思路是黑盒模型的全局行为难以解释,就在单个样本附近,用一个简单的线性模型去近似它的局部行为。对一条要解释的预测做四件事:
扰动:把样本拆成人类可理解的单元(对文本来说,就是每个词或每句话「保留还是删掉」),随机删掉或替换其中一部分,生成几千个变体。
打分:把每个变体喂给黑盒模型,记录它输出的概率。
加权:按变体与原样本的相似度加权,越像原样本的变体,在后面的拟合里权重越大。
拟合:用这些加权样本拟合一个稀疏线性模型,线性系数就是每个词/句子对预测结果的推动方向和力度。
它不是「模型内部的分类依据」,而是一个代理模型的结论:高亮句的权重来自那条局部线性虚线,不是黑盒本身。
同一句话换一段所处文字,对结果的推动情况可能完全不同。
局部解释不能外推成「模型一般认为某句话代表了某种人的特点」。
它回答的是「在这段话的附近,删掉哪些句子会让该分类的概率下降最多」。
这是一个近似的、局部的事后分析,不是对模型真实计算过程的复述。
分类模型是用数据拟合出来的一个函数。
文字先被转成数字矩阵;TextCNN 用小窗口的卷积核在其中找局部词组证据,BERT 用注意力把全文上下文揉进每个词的向量;最后汇入 softmax,输出一组概率。
整个过程没有显在的逻辑链,也没有中间步骤。对黑盒的潜在逻辑的解释只能靠 LIME 这类事后方法,得到的也只是近似的、局部的结论。
大语言模型看似会推理,其「推理」也仍处于激烈争论之中。