第一次调大模型 API 的时候,我问了它一句话:
"把这段话翻译成英文,语气正式一点。"
它理解了。不只翻译,还把语气调对了。就这一下,我愣了好几秒。
它到底"看到"了什么?
我写 Python 写了挺多年,知道计算机只认数字。那一句中文——"把这段话翻译成英文,语气正式一点"——进到模型里,变成了什么?
这篇就把这个过程拆开来说。不写公式,全程用你我都熟悉的 Python 概念类比。
一、先把结论说在前面
大模型理解语言,说白了就三步:把文字切碎 → 切碎的片段变成数字 → 用数字算出"这些词之间是什么关系"。
你要是写过 Python,这个过程其实不陌生——处理字符串列表、向量化、跑矩阵运算,就是这个思路。
这三步,对应的技术名词分别是:
• Tokenization(分词):把句子切成小单元
• Embedding(向量化):把每个单元变成一组数字
• Attention(注意力机制):计算每个词跟其他词的"相关程度"
用一句话记住:大模型眼里没有"文字",只有"数字组成的关系网络"。它不是像人一样"读",而是像计算机一样"算"。
二、第一步:把文字切碎(Tokenization)
先类比一下你写 Python 时最常用的操作:str.split()。
你要处理一段文本,第一步总要把它切开。大模型也这样,只不过切法更精细——它用的是 BPE(字节对编码) 这类算法,不是按空格切,而是按"这个组合在训练数据里出现多频繁"来切。
举个例子,一句英文 "I love Python",可能被切成:
["I", "Ġlove", "ĠPython"]
注意那个 Ġ 符号——它表示"前面有空格"。大模型的 tokenizer 连空格都不放过,因为空格本身也是语义的一部分。
中文稍微特殊一点。中文没有空格,tokenizer 通常按汉字或词组来切。"我喜欢Python"可能被切成:
["我", "喜欢", "Python"]
这些切出来的小单元,就叫 Token。你付给 OpenAI 的钱,就是按 Token 数量计费的——现在知道了吧,你花钱买的不是字数,是"切片数量"。
我踩过的坑:早期我以为中文一个字 = 一个 token,结果账单一看吓一跳。中文的 tokenization 效率比英文低,同样一段话,中文要用更多 token。后来每次调 API 前我都先跑一遍 token 数估算,才算把成本压下来。
三、第二步:把碎片变成数字(Embedding)
Token 切出来了,但计算机还是不认识"爱"这个字是什么意思。下一步,要把每个 Token 变成一组数字,也就是 向量(Vector)。
用 Python 来类比:想象你有一个超大的字典,key 是 Token,value 是一个长度 768 的浮点数列表。类似这样:
token_to_vector = { "爱": [0.23, -0.41, 0.88, 0.07, ... (共768个数)], "恨": [-0.21, -0.39, 0.85, 0.09, ... (共768个数)], "喜欢": [0.22, -0.40, 0.87, 0.08, ...],}
这组数字叫做 Embedding 向量。它最神奇的地方是:意思相近的词,向量也相近。"爱"和"喜欢"的向量距离很近;"爱"和"恨"虽然是反义词,但它们都跟情感有关,向量也比"爱"和"桌子"的距离近。
换句话说:这组数字,把"语义"编码成了"空间位置"。意思相近 = 坐标相近。
Embedding vs Python 字典——相似在哪里,差在哪里
Embedding 最大的突破,是让机器第一次有了"语义感"——不再只会字符串完全匹配,而是能判断"这两句话意思差不多"。RAG(检索增强生成)的核心就是靠这个。
四、第三步:算出词与词的关系(Attention)
把词变成数字还不够。同一个词,放在不同句子里意思可以完全不同:
• "我去银行取了点钱"(金融机构)
• "河边的银行长满了草"(河岸)
大模型靠 Attention(注意力机制) 来解决这个问题。它会让每个词"看一眼"句子里的其他词,算出"我跟哪些词最相关?"
用你熟悉的 Python 逻辑来类比,有点像这样的操作思路:
对于"银行"这个词,去看整句话里:"我"权重 0.1,"去"权重 0.05,"取钱"权重 0.85...→ "取钱"权重最高,所以这里"银行"的意思往金融方向理解。
这个"看其他词、分配权重"的过程,叫做 Self-Attention(自注意力)。Transformer 架构(GPT、Llama、通义千问都是基于它)的核心就在这里。
实际运行时不只跑一次——大模型会跑几十层,每层同时跑多个"注意力头",这就是 Multi-Head Attention。每个头盯着不同维度(语法、语义、指代……),结果叠加。
这也解释了为什么大模型要那么多算力:每一层要给所有词对之间各算一次权重,token 越多,计算量就指数级往上涨。
五、来看两个真实案例
案例1:为什么模型能理解"它"指代的是哪个东西
你问:「猫在追老鼠,它很快。」——这里的"它"是猫还是老鼠?
人一读就懂,但机器是个难题。大模型靠 Attention 来处理。在算"它"的意思时,模型会给"猫"分配高权重(追跑的主语通常更快),结果输出"它=猫"。
这不是硬写的规则,是从几千亿字的训练数据里跑出来的统计规律。
案例2:我让大模型做摘要,发现它"抓重点"的方式跟预期不太一样
有次我拿开源模型做文档摘要,输入一篇3000字技术文档,要200字摘要。结果比我预期好——核心论点都出现了,没有被堆砌关键词带偏。
原因就是 Attention。它能跨段落把文章开头的研究目标和结尾的实验结论关联起来。关键词匹配只看当前窗口,Attention 能看更远。
六、三个常见误区,我以前全中了
❌ 误区1:大模型是在"读"文字,像人一样理解
大模型从来没有"读"过任何文字。它从始至终处理的都是数字——Token ID 和浮点向量。它的"理解",本质是对数字关系的极高精度统计。没有感知,没有意识,只有矩阵乘法。
❌ 误区2:模型认识的"词"和人认识的"词"一样
不一样。Token 不等于词——一个词可能被切成多个 Token,一个 Token 也可能是半个词。"GPT-4"可能被切成 ["G", "PT", "-", "4"] 四个 Token。这是一个纯基于统计频率的切割方式,不懂语言学,也不尊重词边界。
❌ 误区3:上下文窗口越长,模型记忆越好
这是我踩得最狠的。上下文窗口长,不代表模型能"记住"里面每句话——研究发现,大模型对中间位置的内容注意力明显偏弱,开头和结尾记得最清楚。这个现象叫"Lost in the Middle"。长上下文只是"放得进去",不等于"全都用好"。
七、作为 Python 开发者,你能做什么
了解这三步,你会发现自己多了几个可以直接上手的工具:
第一步:玩一下 Tokenizer
用 Hugging Face 的 tokenizers 或 OpenAI 的 tiktoken 库,把你的输入跑一遍,看模型"眼中"的句子是什么样的。这一步能帮你控制 API 成本,也能让你更懂为什么有时候模型理解偏差。
第二步:用 Embedding 做相似度搜索
不用自己训练,直接调 OpenAI、智谱或阿里的 Embedding API,把一堆文本变成向量,存到 Chroma 或 Faiss 里,就能实现语义搜索。这是 RAG 应用的基础。比正则表达式强太多了。
第三步:合理利用上下文窗口
把最重要的信息放在输入的开头或结尾,不要塞在中间。如果你的系统 Prompt 很长,把核心指令放最前面,细节放后面——这样模型注意力分配更合理。
八、总结
大模型理解语言的三步核心:
• Tokenization:把句子切成小单元(Token),这是计费单位
• Embedding:把 Token 变成数字向量,意思相近的词,数字也相近
• Attention:动态计算词与词之间的关系,让"银行"在不同句子里有不同理解
大模型从来不"读"文字,只"算"数字。它的"聪明",是在海量数据上训练出来的极精密统计模型。
作为 Python 开发者,你其实比纯小白有优势——向量、矩阵、字典、循环,这些概念你写代码时早就用过了。大模型的底层,没你想的那么玄。
下次调 API 的时候,脑子里可以过一遍:一句话被切成 Token ID,Token ID 变成浮点向量,向量在几十层注意力机制里来回运算,最后吐出下一个最可能的 Token。
它没在"想",但有时候算出来的东西,比人认真想过的还靠谱。
你在用大模型做什么项目?有没有碰到过模型"理解偏差"的情况——比如你问了一句很清楚的问题,结果模型答非所问?评论区说说你遇到的坑 👇
关注「Python与AI智能研习社」,持续用工程师视角解析AI