向量:让「意思」可以被计算
这一章讲三件事: 向量是什么(以及它不是「一串数」那么简单);把文字变成向量的技术五十年来 走了哪几步、每一步解决了什么;选 embedding 模型和向量库时,哪些因素真的影响成败。 作者的原话:理解向量,「可以说是这整本书最重要的部分」1。
1. 向量是什么:先纠正一个直觉
第 02 章把向量当成黑盒用了一回。现在打开它。
向量不是「一串数」,是一个既有量级、又有方向的数学对象。 书里借电影《神偷奶爸》反派 Vector 的台词点题——「一个由箭头表示的量」。这个「方向」不是玄学装饰:方向相近的向量, 对应的文字意思就相近;两个向量的夹角、距离,就是「像不像」的度量2。
词源里还藏着另外 两条性质,作者各给了一句:
- 数学: 向量让文字可以被数学运算处理——这是「意思可计算」的前提;
- 速度: 向量搜索比它之前的任何文本搜索技术都快3。
术语先钉死: 向量(vector)是数学里的通用概念,各行各业都用;在 NLP(自然语言处理——让计算机处理人类语言的分支)和 RAG 的语境里, 这同一件东西叫 embedding(嵌入)。书里明确说:在 RAG 的讨论里,embeddings、vectors、 vector embeddings 这些叫法可以互换4。本文往后一律用「向量」,遇到 embedding 你知道是同一件事。
2. 主走查:一个问题的向量长什么样
拿全书那个老问题 What are the advantages of using RAG? 走一遍。
用 OpenAI 的 embedding 服务把它变成向量,打印前 5 个数5:
[-0.006319054113595048, -0.0023517232115089787, 0.015498643243434815,
-0.02267445873596028, 0.017820641897159206]
从这个真实输出里能读出三件事:
- 维度(dimension)是向量的长度。 用
len()一数,完整向量是 1536 个数—— 也就是「1536 维」。人类最多直观想象三维,而这 1533 个多出来的维度, 正是向量能装下细粒度语义的原因6。 - 每个数都是高精度浮点。 第一个数小数点后有 18 位——这是 64 位双精度浮点格式。 精度越高,语义的细微差别保留得越好;如果你在乎回答质量,选 embedding 服务时要注意它的精度格式7。
- 它长得像 Python 列表,但请当它是 NumPy 数组。 机器学习(让计算机从数据里自己学规律的技术)全家桶(SciPy、pandas、 scikit-learn、PyTorch…)都按 NumPy 数组优化过,处理速度快得多8。
顺带钉死一个尺寸事实:不管文本多长,同一个模型给出的向量维度都一样。 10 个 token 的问题是 1536 维,几千字符的文档块也是 1536 维——这看似违反直觉, 却是检索能工作的前提:维度不一样,根本没法算距离9。
维度的代价与「套娃」解法
1536 维表达力强,但搜索慢。新一代模型(如 OpenAI 的 text-embedding-3-large)允许你选更小的维度, 而且训练时就保证了「大小不同的向量表达同样的语义」——这叫 Matryoshka embeddings (名字来自俄罗斯套娃:大娃套小娃,每个都还是完整的娃)10。
它解锁的玩法叫自适应检索(adaptive retrieval):先用低维向量快速搜索,把范围缩小到目标附近, 再换高维(维度数更多的)向量精确定位。作者给的提速数字是 30%–90%,取决于配置——生产环境高负载时值得考虑11。
相关的还有量化(quantization):把高精度浮点压成低精度,省内存省算力——但它是有损压缩,精度会掉12。