哲学 × AI 学习指南把哲学变成工程判断力 书单 落地清单 ⌂ 全部教程

CH 06语言与意义:从维特根斯坦到词向量

这一章会解释一个你可能从没想过要解释的现象:为什么「向量相似」能代表「意思相近」,以及它什么时候会骗你。 更重要的是,它会给你一个关于提示词的哲学解释——为什么给小样本示例比写一段规则描述更有效。 答案来自维特根斯坦的「意义即用法」。这不是牵强的类比, 它解释了你在提示词工程里观察到的几乎每一个反常现象。

学习目标
理解意义从何而来
前置要求
第 5 章的接地问题
本章产出
检索失效模式分析
建议学时
4–5 小时

6.1指称论:名字如何指向东西

最朴素的意义理论是:一个词的意义就是它所指的东西。「苹果」的意义就是苹果这个东西。

这个理论直观上很有吸引力,但它很快撞上几个反例——而这些反例恰恰预告了今天在向量检索里遇到的问题。

反例问题今天的对应现象
没有指称的词 「独角兽」「福尔摩斯」不指向任何实际存在的东西,但我们显然理解它们的意思 模型能处理虚构实体,检索时也会匹配到虚构内容—— 向量空间里它们与其他词有正常的位置关系
指称相同但意义不同 「晨星」和「暮星」都指金星,但古人并不知道它们是同一颗。 「晨星是暮星」这句话有信息量,而「晨星是晨星」没有 同义不同词:向量检索会把它们判为相似(正确), 但如果你需要区分「用户说的是早上看到的还是晚上看到的」,它就无法区分
一词多指 「银行」在「河岸」和「金融机构」两个意义上指不同的东西 多义词问题:静态词向量会把两个义项混在一个向量里, 导致「这条河的银行」和「银行的利率」在空间里靠得过近

第三行是你在 RAG 里会实际遇到的。静态词向量对多义词的处理是把所有义项平均—— 这恰好是它的一个结构性弱点。上下文相关的表征(如 Transformer 的中间层)能缓解这个问题, 但不会消除它,因为「哪个义项」往往依赖世界知识和语境,而这两者都有覆盖不到的情况。


6.2弗雷格的涵义与指称

1892 年,弗雷格用一个区分解决了「晨星/暮星」问题。这个区分是语言哲学里最重要的工具之一。

概念德文含义例子
指称 Bedeutung 词指向的对象 「晨星」和「暮星」的指称相同 —— 都是金星
涵义 Sinn 对象被呈现的方式(mode of presentation) 「早晨出现在东方的那颗星」vs「傍晚出现在西方的那颗星」—— 涵义不同,所以两句话信息量不同

涵义是介于对象和符号之间的东西:同一个对象可以被不同的方式给出,而这些方式本身是有意义的。

—— 弗雷格《论涵义与指称》(1892)的核心思路
弗雷格的区分
指称相同,涵义可以不同
意义不只是「指向什么」,还包括「以什么方式指向」。 这就是为什么两个指向同一对象的表达式可以有不同的信息价值。
→
在检索里的直接体现
「同指不同涵义」是检索失败的常见原因
用户问「怎么降低延迟」,文档里写的是「如何优化响应时间」—— 指称同一件事,字面完全不同。这是向量检索要解决的(而且常常能解决)。

但反过来:用户问「合同里的违约金怎么算」,文档里两处都提到「违约金」, 一处是甲方的、一处是乙方的。指称相似、涵义完全不同—— 这是向量检索会失败的地方。因为「哪一方的」这个信息不在词本身的相似度里。
这是一个可以立刻用的检查方法:在你的检索失败案例里,分成两类—— ①「说法不同但意思一样」(向量检索的强项,多找同义词、加查询改写) ②「说法相似但意思不同」(向量检索的弱项,需要元数据过滤、结构约束、或者更细的切分)。

把这两类分开统计,你会知道该往哪个方向优化。大部分团队把它们混在一起,于是优化方向不明。

6.3维特根斯坦前期:图像论

维特根斯坦是这个领域最特殊的哲学家——他提出了两套完全对立的理论, 而且后一套是对前一套的自我否定。了解这个转折,对你有直接价值, 因为它跟 AI 的两条路线之争是同一个结构。

《逻辑哲学论》(1921):语言是世界的图像

命题是实在的图像。命题与它所描述的事实共享逻辑形式。

—— 前期维特根斯坦的核心主张(大意)

他的想法是:语言能描述世界,是因为语言和世界具有相同的逻辑结构。 一个命题里的要素排列方式,对应着世界上的对象的排列方式。 所以「语言如何可能描述世界」这个问题,答案是:因为两者同构。

他还推出一个惊人的结论:凡是不能被这样结构化表达的东西(伦理、美学、生命意义), 都无法被言说——只能被「显示」。这本书最后一句非常有名:

对于不可言说之物,必须保持沉默。

—— 《逻辑哲学论》第 7 节
图像论
意义来自结构与世界的同构
语言之所以有意义,是因为它的结构映射了世界的结构。 这是「符号系统可以表达知识」这个假设的最强形式。
→
这是知识图谱 / 形式化路线的哲学祖先
结构化表征为什么被认为更可靠
如果你相信「结构对应世界」,那么把知识写成结构化的形式(图、本体、规则) 就比统计学习更接近真理——因为它保留了同构关系。

这条思路今天仍在:知识图谱、形式化验证、结构化输出校验。 它的力量在需要精确性的场合;它的弱点是覆盖不了那些「没法被清晰结构化」的知识—— 而后者恰恰是人类知识的大部分。

6.4维特根斯坦后期:意义即用法

1953 年出版的《哲学研究》(遗著)里,维特根斯坦推翻了自己前期的立场。 这个转折是本节核心。

不要问一个词意指什么,要问它怎么被使用。 一个词的意义,就是它在语言中的用法。

—— 《哲学研究》的核心主张(大意,§43 附近)

语言游戏

他提出「语言游戏」这个概念:语言不是一套固定的「词—对象」映射, 而是嵌在具体活动中的、有规则但规则不明确的一系列实践。

他举了个著名的例子:一块石板、工人喊「石板!」—— 这个词在这个场景里是命令,不是描述,也不是命名。 换一个场景(建筑师在讨论材料清单),同一个词的功能完全不同。

关键推论:同一个词在不同「游戏」里有不同意义,而游戏的规则无法被完全写下来。

你会下棋,但你说不出完整体现棋类规则的那个规则集(包括所有关于「怎样算认真下棋」的默契)。 你遵守规则,但规则不是你脑子里的一个明确清单。

这一点延伸出一个著名难题:遵守规则的悖论—— 没有任何一种行动方式不能被称为「符合规则」,如果允许对规则做足够灵活的解释的话。 那是什么决定了我们该这样而不是那样用词?维特根斯坦的答案是共同体的实践, 不是个人的内在规则。
意义即用法
意义不在词里,在用法里
一个表达式的意义,由它在具体实践中的使用方式决定; 它不是一个固定的、可以被词典完整编录的东西。
→
这就是 LLM 的表征在做的
从用法中提取意义
语言模型的训练完全不依赖词典定义—— 它只看词在真实文本中如何被使用,然后用上下文分布来刻画意义。

这在方法论上与「意义即用法」高度一致:不是先给定义再学用法, 而是从用法中归纳出意义。 这解释了为什么统计学习能处理大量词汇语义——它抓住了用法的规律性。

同时也解释了它的弱点:它只能学到被写下来的用法。 没有被文字化的用法(默契、语境、身体经验)它学不到。

6.5家族相似性:概念没有本质

维特根斯坦还提出了一个对 AI 分类任务很有启发性的看法:很多概念没有共同的本质。

「游戏」这个词

棋类、牌类、球类、奥林匹克、儿童拍手游戏、单人纸牌……它们有什么共同点?

如果你去找一个所有游戏都具备、且只有游戏具备的特征,你会发现找不到: 有些有输赢,有些没有;有些有竞争,有些没有;有些有规则,有些很随意; 有些是娱乐,有些是职业。

但它们之间像家族成员一样相互相似——两个人可能都不像第三个, 但都能通过一串中间相似关系连起来。

维特根斯坦的结论:这个概念是由相似性的网络构成的,它没有「本质」。 你不需要先给出一个完备的定义才能正确使用这个词。

家族相似性
概念是相似性网络,不是清晰边界
大部分日常概念没有充要条件。人们照样能正确使用它们, 因为他们掌握的是一组范例和相似性关系,而不是定义。
→
这恰好是向量空间的工作方式
用位置和距离表达概念
词向量不给出定义,它把词放进一个空间, 用距离表示相似度——这就是一个相似性网络。

这个对应关系非常深:维特根斯坦说概念由相似性网络构成, 而向量空间正是这种网络的一个可实现形式。这也是为什么向量检索在「模糊的、没有清晰边界的」 语义任务上表现很好。

但它同时揭示了弱点:当一个任务需要清晰边界时 (比如「哪些文件属于必须留存的合规材料」),相似性网络给不出硬判定—— 你需要额外的规则层。

6.6蒯因与翻译的不确定性

1960 年,蒯因在《语词与对象》里提出了一个思想实验,它对「语义等价」这个概念本身提出了挑战。

gavagai

你作为语言学家来到一个完全陌生的部落。一只兔子跑过,当地人指着它说「gavagai」。

「gavagai」是什么意思?最自然的猜测是「兔子」。但同样一致的解释还有:

  • 「兔子」
  • 「兔子的某个部分」(比如兔子的耳朵)
  • 「兔子的出现」(一个事件,不是物体)
  • 「兔性」(一个抽象性质,像「红色」那样)
  • 「未经分离的兔子部分的总和」

蒯因的论点:无论你收集多少观察,这些假设都与证据完全一致—— 因为你可以相应调整其它词的解释来保持整个系统自洽。 所以「指称」(reference)是在观察上不可确定的。

它的两个后果

后果内容对 AI 的意义
指称的不可测性 你无法从行为中唯一确定一个词指的是什么 「模型内部的符号指向什么」在原则上无法从行为判定—— 这为第 5 章的争论提供了另一个视角
整体论 信念不是逐个面对检验的,而是作为一个整体面对经验。 任何单个信念都可以通过调整其他信念而保住 (这个观点常被称为迪昂-蒯因论题) 这解释了为什么「失败复盘」常常无法定位原因—— 一个方案失败时,你总能调整其它解释(数据、参数、实现细节)来保住主假设。 这是第 3 章波普尔讨论里提到的那个问题的更深根源
整体论对工程实践的直接影响:

当你做 A/B 测试或消融实验时,「改了 X,效果变了」这个结论是不牢靠的—— 因为效果变化可能来自 X 与其它变量的交互,而不只是 X 本身。 整体论说的是:假设不是单独被检验的。

应对方式:做消融而不是只做增量。不要只测「加了 X 之后怎样」, 也要测「拿掉 X 之后怎样」;而且要在不同的其它配置下重复测一次。 如果结论在不同配置下不稳定,说明你抓到的不是 X 的独立效果。

6.7【工程锚点】词向量与分布假设

现在把上面所有东西落到最重要的一个工程点上。为什么「向量相似」能代表「意思相近」?

词语的意义由它的上下文决定。你可以通过一个词与谁相伴出现来认识它的意义。

—— 分布假设。Harris(1954)系统阐述;Firth 的这句表述流传最广

这个假设在哲学上恰好就是「意义即用法」的可计算版本: 用法 = 上下文分布。所以词向量不是工程师的临时发明,它是一个哲学立场的数学实现。

对照维特根斯坦(1953)词向量(现代)
意义来自用法上下文分布
表示方式相似性网络,无清晰边界高维空间中的位置与距离
能否给定义不能,也不需要不能,也不试图
边界情况边缘案例由共同体实践决定由距离阈值决定(这里就出问题了)
最后一行藏着向量检索最大的问题。 维特根斯坦说概念的边界由共同体实践决定——它是软的、可协商的。 但工程实现必须把它变成一个数字阈值(相似度 > 0.8 算命中)。

用一个数字去切一个本来没有清晰边界的东西,必然会在某些地方出错—— 而错在哪里,取决于你的数据分布,不能靠理论预判,只能靠观察失败案例。 这解释了为什么检索阈值几乎总是需要按场景分别调,没有一个通用值。

分布相似的四种失效模式

下面是你在 RAG 里实际会遇到的(建议按这四类整理你的失败案例):

模式例子对策
① 语义对立 「这个方案可行」和「这个方案不可行」—— 只差一个否定词,向量相似度极高,但意思相反 否定词敏感的处理;把否定信息作为额外特征; 关键是别用相似度做「是否支持」的判断
② 多义混淆 「撤销订单」和「撤销权限」——动作相同、领域不同, 检索时容易跨领域串味 元数据过滤(按领域/模块分区)、分库检索
③ 领域术语 通用模型不认识你们内部的缩写、代号、历史项目名 同义词表/business glossary;对这些词做额外映射;考虑领域微调
④ 数量与否定细节 「满三年 10 天」和「满五年 10 天」——差别只在一个数字, 但这类细节往往是用户最关心的 向量检索对数字极不敏感。 对含数字、日期、金额的查询,加规则检索或结构化过滤作为补充
第四类是最容易被忽略、后果最严重的。 用户查「年假几天」,系统检索到一段语义高度相关但数字不对的内容, 然后模型基于它生成一个看起来很可信的答案。

根本原因:向量空间编码的是「语义」,而数字的具体值在语义上的差异很小—— 「三年」和「五年」在语义上都是「一段时间」。但对用户来说, 这正是他问的那个唯一重要的东西。

通用教训:向量检索擅长「大致是这类话题」,不擅长「精确的数值约束」。 凡是涉及数字、日期、版本号、代码标识符的查询,都需要额外的精确匹配通道。

6.8【工程锚点】提示词工程的哲学读法

这一节是本章最有实操价值的部分。它能解释你在提示词调试中反复遇到的那些「不讲道理」的现象。

核心洞察:你在教一个「语言游戏」,不是在写规格说明

如果你把提示词当成写给程序的规格说明(「如果输入是 X,就输出 Y」), 你会持续困惑——因为它不按规格说明的方式工作。

如果你把它当成在建立一个语言游戏(维特根斯坦意义即用法)—— 你在通过示例和语境,告诉模型「在这个场景里,什么样的话是合适的」—— 那么它的行为就变得可预测了。

后期的维特根斯坦
意义由用法决定,不由定义决定
学一个词的意思,不是背下定义,而是看它在哪些场合怎么用。 定义永远不完整,用法才是标准。
→
提示词为什么这么写才有效
示例 > 规则描述
这解释了 few-shot 为什么常常显著优于 zero-shot 的规则描述。 你给示例时,你在给出用法;你写规则时,你在给出定义。 而模型的训练方式(从用法中归纳意义)意味着它更擅长从用法中学习。

所以「写清楚规则」经常不如「给三个例子」有效——这不是模型的缺陷,它与语言运作的方式一致。

四个由这个视角解释的现象

你观察到的现象用「语言游戏」解释
换个说法效果差很多 你在无意中把提示词放进了不同的「游戏」。 「请总结」和「提取要点」在语料里对应的用法模式不同, 触发的是不同类型的输出。措辞不是包装,措辞就是语义输入本身。
明确的规则被无视 禁忌式的规则(「不要提到 X」)本身就是一种引入 X 的用法—— 你在提示词里建立了一个关于 X 的语境。 更好的做法是示范正确行为,而不是宣告禁止行为。
角色设定有效 「你是一位有 20 年经验的审校编辑」不是在描述一个身份, 而是在指定一个语言游戏——它锚定了大量「这类人会怎么说话、 关注什么、什么话不会说」的隐含约定。这些约定没法被逐条写出, 但可以被一个标签唤起。
示例顺序会影响结果 示例是用法示范,而用法示范的顺序构成了语境。 最后出现的示例往往影响最大(就像对话里的最近上下文)。 这是「语境决定意义」的直接体现。
但要警惕这个类比被滥用。 「提示词是语言游戏」不意味着「怎么都行、无法工程化」。可工程化的部分是:
  • 示例质量:示例是否覆盖了边界情况?是否前后一致?
  • 示例一致性:如果两个示例的处理方式矛盾,模型会学到混乱的用法
  • 回归测试:改提示词必须重跑测试集——因为语义是整体性的(见 6.6 的整体论)
  • 版本管理:提示词是有语义的代码,必须像代码一样管版本

一句话总结:把提示词当作「有语义的产物」而不是「自然语言写的配置」, 你就会自然地去做回归测试和版本管理——因为语义的改动会有非局部的影响。

一个实用推论:为什么「改一处」经常让别处坏掉

这是提示词维护中最常见、也最令人沮丧的现象。用整体论(6.6)来解释非常清楚:

提示词不是一组独立规则,它是一个整体。 模型对它的回应是整体的回应——它是从整个语境中归纳出「这个场景要什么样的话」。

所以你在末尾加了一句约束,可能改变模型对前面所有内容的理解—— 因为整段提示词构成了一个语境,而语境里的每一部分都参与决定「用法」。

这就是为什么提示词的调试必须配回归测试集: 你无法通过阅读提示词来预测改动的影响,因为影响是整体性的。 唯一可靠的办法是改完跑一遍。

6.9动手练习

  1. 给检索失败案例分类。收集你项目里 20 个检索失败的案例,按 6.7 节的四种模式归档: 语义对立 / 多义混淆 / 领域术语 / 数值细节。
    产出:四类各占多少 + 针对占比最高的那类的改进方案
  2. 做一个「示例 vs 规则」对照实验。选一个你现在的提示词任务,写两个版本: ① 用文字详细描述规则 ② 给 3 个输入输出示例(不给规则)。 在同一个测试集上比较。
    这个实验会让你直观理解「意义即用法」:大多数情况下示例版会更好
  3. 做一个否定词的极端测试。取 20 对「意思相反但用词高度相似」的句子 (「支持 X」/「不支持 X」、「需要审批」/「无需审批」), 看你的检索和模型能否可靠区分。
    如果区分率低,说明你的系统在否定/极性上不可靠,这在合规、安全类场景是硬伤
  4. 给提示词建版本和回归集。把当前提示词固定为一个版本号, 建一个 20–30 条的代表性测试集(含边界案例),改提示词必须重跑。
    这是把「提示词是语义产物」这个认识落地的最直接方式
  5. 检查数值类查询。列出你系统里所有「用户会问具体数字」的场景 (天数、金额、比例、版本号、期限),检查它们是否有精确匹配通道, 还是完全依赖向量检索。

6.10自测题

Q1. 弗雷格的「涵义」和「指称」怎么区分?它在检索里对应什么问题?

指称是词指向的对象;涵义是对象被呈现的方式。 「晨星」和「暮星」指称相同(金星)但涵义不同,所以「晨星是暮星」有信息量。

检索里的两个对应问题:

  • 同指不同说法(用户说「降低延迟」,文档写「优化响应时间」)—— 向量检索的强项,可以解决。
  • 说法相似但所指不同(甲方违约金 vs 乙方违约金)—— 向量检索的弱项,因为「属于哪一方」不在词的相似度里, 需要元数据或结构约束。

Q2. 「意义即用法」为什么能解释 LLM 的工作方式?

因为语言模型的训练完全不依赖词典定义——它只看词在真实文本中如何被使用, 用上下文分布来刻画意义。这正是「意义即用法」的可计算实现: 用法 ≈ 上下文分布。

同时这个视角解释了它的弱点:它只能学到被文字化的用法。 那些没有被写下来的默契、语境依赖、身体经验,它学不到。

Q3. 家族相似性对 AI 分类任务有什么启发?

很多概念没有共同本质,而是由交叉重叠的相似性网络构成。 人们不需要完备定义就能正确使用这些词。

启发有两个方向:

  • 正面:这解释了为什么向量空间(用距离表达相似性)能很好地处理模糊语义任务—— 它天然是「相似性网络」的实现形式。
  • 反面的:当任务需要清晰边界时(合规判定、安全分类、 责任归属),相似性网络给不出硬判定,需要额外的规则层。 试图用一个相似度阈值来做需要硬边界的判定,是常见的架构错误。

Q4. 为什么给示例常常比写规则描述更有效?

因为模型的训练方式是从用法中归纳意义,而不是从定义中推导行为。 你给示例时在给出用法,你写规则时在给出定义。

这与维特根斯坦的论点一致:学一个词的意思,是看它在哪些场合怎么用, 而不是背定义。定义永远不完整,用法才是标准。

实用推论:当提示词效果不佳时,先怀疑「我没说清」不如先怀疑「我没示范」。 加两三个边界情况的示例,往往比再加一段规则说明更有效。

Q5.【动手题】用户反馈「问年假天数,答案经常不对」。你的排查顺序是什么?

第一,判断是不是检索问题——先看检索到的片段里有没有正确的数字。 如果没有,问题在检索层(这是最常见的情况)。

第二,如果检索错了,检查是不是「数值不敏感」(6.7 第四类)。 用「满三年 10 天」的查询去检索,看返回的是不是包含了「满五年」的段落。 这类失败几乎必然出现,因为向量空间对具体数字不敏感。

第三,检查是不是「多段拼合」问题。 制度文档里年假条款常常分散在几处(基本规则、特殊情况、例外), 如果只检索到其中一段,答案就会不完整—— 而模型很可能会补全缺失的部分(这是第 3 章的忠实性幻觉)。

第四,如果检索正确但答案错,检查是不是模型在做补全(忠实性幻觉)。 用第 3 章的方法:把答案拆成句子,逐句检查能否在检索到的材料里找到支持。

最后,针对根因给方案:

  • 数值不敏感 → 加规则检索/结构化过滤通道,把含数字的条款单独建索引
  • 条款分散 → 把年假相关的所有条款预先聚合成一个完整块,而不是让检索去拼
  • 模型补全 → 加「只使用提供材料」的强约束 + 答案引用检查

注意这个排查的特征:每一步都在缩小可能的原因, 而不是直接猜「改个提示词试试」。这种结构性排查比试错快得多。

本章验收标准:
  • 能说清「意义即用法」和「分布假设」的关系——它们其实是同一个主张的哲学版与可计算版。
  • 能解释为什么向量检索擅长模糊语义、不擅长精确数值。
  • 完成检索失败案例的四类归档,并针对占比最高的一类给出方案。
  • 做过一次「示例 vs 规则」对照实验,能说出哪个更有效以及为什么。
  • 能解释「为什么改提示词一处会让别处坏掉」——用整体论,而不是用「模型不稳定」。
  • 所有涉及数值、日期、标识符的查询,都有精确匹配通道。