惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

博客园_首页

当AI“卡壳”在生产环境:MCP Server 如何帮我们破局 ofdkit-harmony 0.2.0 发布:鸿蒙原生 OFD 阅读库,已上架 ohpm 有了AI测试工具,还需要掌握Playwright、Pytest、Selenium这些框架吗? 组织转型实录——我把传统研发团队改成AI驱动,踩了无数坑 为什么 AI Coding 难进生产环境?深入了解 Everything-Claude-Code ! 到底 TMD 用哪个: npm, pnpm, Yarn, Bun, Deno? 傻瓜, 当然用 npm 啦 上周热点回顾(5.18-5.24) [对比学习LangChain和MAF-04]针对消息的设计 TrueAsync Server 为 PHP 带来了原生的高性能 HTTP 服务器 规则漂移 帆软市场部为什么能成为高人效增长系统? 22. LangChain LCEL,用 | 串联AI的魔法语言 - 老陈说编程 完整学习LLM(二):大模型到底是什么 洛谷-P11942 [KTSC 2025] 重塑矩阵 题解 哈哈哈哈哈打不过我吧,没有办法我(vllm)就是这么强大! Hermes Edu Skills 从 170 到 188:一次中文教育 Agent Skill Pack 的工程化升级 一个外行,半年搞定机械臂:我的从0到1踩坑实录 新写了个直播录制工具,可录制抖音快手斗鱼直播 15天学会AI应用开发(一)搭建AI大模型应用开发环境 Childhood,23款童年卡牌游戏复刻 Github Copilot配置GPT5.5报错:'temperature' does not support 0.1 with this model. Only the default (1) value is supported. - Eric zhou 单曲循环 ClassIn 在 Linux 下无法播放音频 把 TeXstudio / LaTeX 工程交给 AI:texstudio-mcp 功能详解 .NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑 别让 LLM 写文件:一套 Agent 进度跟踪的工程化范式 - BurningFish Qt Bridges for C# 深度技术解析 Multus 多网卡方案:IPVLAN 模式 被流量逼出来的架构:从一台服务器到云原生的 17 次蜕变 —— 集群、缓存、MQ、微服务、Docker、K8S 的前世今生 Claude Code安装全流程 Windows保姆级教程 awk 命令练习(从入门到进阶) Java + Spring实现Hermes Agent之龙虾、Skills、Mcp和沙箱代码执行环境思路 轨迹的蓝图:方程求解与交点计算 Agent新技术分享-Forge论文已被ACM接受 PowerMem 记忆系统的遗忘设计,从神经元到代码工程 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 一个程序员眼中的 AI 核心概念,讲透 LLM 、Agent 、MCP 、Skill 、RAG... 网络安全在线就能打的内网靶场推荐 & Dawn Breaker 单域靶场 WP CTF 中如何用提示词发挥大模型的最大实力:从聊天助手到大手子 PyTorch KernelAgent 源码解读 ---(6)--- Composer 高光谱拼接算法(一)扫推式成像和航带拼接算法 一文看懂fofa常用语法,告别混淆,精准打击! 从零搭建量化投资系统:用 Qlib 一行代码搞定均线分析 企业 AI 落地,第一件事不是买模型,而是建好企业知识库 如何在Oracle Agent Factory中配置国内厂商的LLM? Codex 换模型太麻烦?这个开源桌面工具帮你一键切换 Avalonia中的动画 2026软考|十大管理超全通俗笔记,备考闭眼记! rv1126b内置phy接hub交换机芯片 React 可拖拽列宽 + 点击行选中 ProTable 封装笔记 五大实锤证据:AI不会终结低代码,只会倒逼技术进化 【硬核脑洞】16位实模式最后的疯狂:我们能否在 640KB 常规内存里手搓一个 MD 模拟器? 基于.Net的NetCoreKevin框架中AgentFramework实现AI智能体Skill和工具动态管理和加载 PostgreSQL 高可用集群 patroni 自动故障转移测试 自己使用C++开发的仿OpenClaw、Hermes智能体工具 记一次 .NET 某集群管理软件 内存暴涨分析 StarBlog番外(5) 从1.6到1.10,基于Avalonia AOT 开发的 Publisher 半年进化之路 Anthropic 把 SOC 误报率从 33% 砍到 7%,真正在干活的不是 Claude SM2演示所有 PEM 功能(生成、加解密、签名/验签) 用 Solon AI 从零构建 MCP 工具服务:让 AI Agent 拥有真实世界的能力 完整学习LLM(一):为什么我要系统学习大模型 Agent Harness Runtime 架构深度解析:工具循环、状态外置与长程任务调度 [对比学习LangChain和MAF-03]完全不同的Agent设计哲学 毫不夸张地说,这将是目前最全的AI测试教程!测试必看! AI Coding 为什么选择 TUI ,前端的新机会在哪里? 无需安装cc switch,10行命令帮你配置Claude Code+deepseek Context Engineering 到 Harness Engineering —— 大模型时代软件工程的新范式 OpenClaw.NET 兼容性目录指南(Compatibility Catalog) Nginx 上游健康检查插件 nginx-healthcheck-module 三角形数 AScript异步执行与await关键字 - rockey627 Vector Quantization for Recommendation 笔记 21. “|”不只是按位或,90%的人不知道 这 3 年做教育相关项目,我把一些经验整理成了一个开源 Agent Skills 项目 2026 西安本土 GEO 测评:灵怡云凭差异化站稳第一梯队 PortSwigger SQL注入LAB7 & LAB8 & LAB9 Splay 学习笔记 这款爆款激光粒度仪凭何全球狂销5000台?揭秘百特Bettersize2600“常青树”背后的硬核实力 十分钟学习 TypeScript 【学习笔记】《Python编程 从入门到实践》第1章学习笔记:Python环境搭建与Hello World(完整版) 初试 vibe coding:Tauri + React + Rust 构建的 windows 本地番茄钟 从 Vibecoding 入门,到 Agent 差点入土 IDEA Maven 手动替换第三方Jar包完整教程 填充与积累:积分与面积的可视化 告别 Django Admin!这个 NodeJS 全栈框架让你在 DTO 中直接配置 Table/Form 渲染 重建 AI 认知第 1 篇:基础认知——一张地图看懂 AI Landscape VAPD AgentKit:可组合 Agent 前端通用库实践 SolonCode v2026.5.21 发布,Web 能看项目,IM 能找队友 从 LangGraph 回到 Model-Tool Loop:更聪明的模型,正在让 Agent 架构重新变简单 从人工同步到自动闭环:跨 Java/.NET 代码转换工具的工程化实践 你的显卡能跑多少算子?用 55 个检查项,给 PyTorch GPU 环境做一次冒烟测试 Claude Code 快速开始 2分钟搞定全网巡检:一个脚本+五大必备 Python 库,让你一天干别人一周的活 最近面完 30 个想转 AI 测试的人,我麻了:80% 都踩了这 4 个坑! 4.3、多体交叉存储器、Cache的基本原理、相联存储器、 Cache地址映射与变换方法 简译项目的项目落地 OpenClaw Dreaming 记忆流水线底层架构:状态分层、证据留痕与检索回流 .NET 10 桌面 UI 框架的范式演进:Jalium.UI 与 MewUI 架构深度对比 [对比学习LangChain和MAF-02]基本编程模式的差异(下篇) 我的编程经历,从天桥地摊Basic到西藏阿里的.Net AOT。(续二)
给句子做个“语义审计”:从词向量到句子向量的方法论
Lyn_Li · 2026-05-25 · via 博客园_首页

给句子做个“语义审计”:从词向量到句子向量的方法论



上一篇从独热向量到词向量:彻底搞懂 AI 如何理解语言我们理解了:词向量是给每个词拍一张“证件照”。但现实中的任务,往往是处理一整句话。一句话里有一叠“证件照”,怎么看出这句话到底代表什么?这就是本文要解决的问题。
这篇笔记不是冰冷的技术罗列,而是一次用审计思维对“语义融合”进行的阐述,本文将像分析公司一样分析句子,看看如何将词向量合并,得到代表整句话的句子向量。


1. 从“证件照”到“公司全貌”

你已经有了词向量。每个词都是一张“证件照”——300 维的数字,记录着这个词的“长相”。

但现实任务里,你面对的是一句话。一句话少则三五个词,多则几十个词。每个词都有一张“证件照”,你手里捏着一叠照片,怎么看出全貌呢?

这就是句子向量要解决的问题:把一叠词向量,融合成一个句子向量。

那怎么融合呢?不同的人有不同的思路。接下来我们基于公司的角度,按几种基本方法逐个分析。


2. 方法一:把所有照片叠在一起取平均

最直接的想法:把所有词向量加起来,除以词数。

例句: "我 喜欢 吃 苹果"

v(我)   = [0.1, 0.3, ...]
v(喜欢) = [0.5, 0.2, ...]
v(吃)   = [0.4, 0.1, ...]
v(苹果) = [0.8, 0.6, ...]

句子向量 = (v(我) + v(喜欢) + v(吃) + v(苹果)) / 4

就像你想了解一家公司的薪资水平,把所有人的工资加一起取平均——简单粗暴。

示例代码如下:

import numpy as np

v_我   = np.array([0.1, 0.3, 0.2, 0.5])
v_喜欢 = np.array([0.5, 0.2, 0.8, 0.1])
v_吃   = np.array([0.4, 0.1, 0.3, 0.6])
v_苹果 = np.array([0.8, 0.6, 0.7, 0.2])

sentence_vec = (v_我 + v_喜欢 + v_吃 + v_苹果) / 4
print(sentence_vec)  # [0.45, 0.3, 0.5, 0.35]

优点:快,仅一行代码即可计算结果。

问题:“前台“ 和 ”CEO“ 的权重一样。“我” 和 “喜欢” 对句子语义的贡献,跟 “的”、“了” 一样大。显然不合理。


3. 方法二:给重要的人更高权重(TF-IDF)

CEO 说的话要比前台更有分量。

那怎么判断一个词重不重要?分两个维度:

  • TF(词频):在这句话里出现次数多的词,可能更重要。
  • IDF(逆文档频率):在整个语料库里到处出现的词(“的”、“了”、“是”),反而不重要。

TF-IDF 就是这两个指标的乘积。用它做权重,给每个词的向量加权:

例句: "自然语言处理 是 人工智能 的 一个 分支"

TF-IDF 权重:
  "的"             → 0.01  (到处都有,几乎无意义)
  "是"             → 0.02  (常见虚词)
  "自然语言处理"    → 0.85  (重要实词)
  "人工智能"        → 0.80  (重要实词)

→ 实词主导句子向量,虚词被压到几乎为零

优点:能区分主次。

问题

  • 需要语料库来统计 IDF,语料不同结果不同。
  • 还是没考虑词序。“人咬狗”和“狗咬人”权重一样,向量也一样。

4. 方法三:剔除“行业共性”,只看个性(SIF)⭐ 推荐

TF-IDF 有进步,但还有问题。

假如你分析两家公司的财务报表,会发现,不管什么行业的公司,都有一些“共性”支出——房租、水电、办公耗材。这些共性信息对你区分两家公司几乎没有帮助

真正有用的,是剔除共性之后剩下的个性:一家公司研发投入占比奇高,另一家销售费用占比奇高。

SIF 干的就是这件事。

第一步:计算每个词的权重(和 TF-IDF 类似,但更平滑)

\[w_i = \frac{a}{a + f(w_i)} \]

  • \(f(w_i)\):这个词在整个语料里出现的频率。
  • \(a\):一个很小的常数(通常取 0.0001 到 0.001)。

高频词(“的”、“是”)频率高 → 分母大 → 权重接近 0。低频词频率低 → 分母小 → 权重接近 1。

第二步:加权平均

\[\vec{v}_s = \frac{1}{|s|} \sum_{i \in s} w_i \cdot \vec{v}_{w_i} \]

这一步和 TF-IDF 加权很像,只是权重公式不一样。

第三步:移除第一主成分(关键!)

这是 SIF 的灵魂。把所有句子的向量放在一起,找到它们共同的方向(第一主成分),然后把这个方向从每个句子向量里减掉。

你可以这样理解:所有句子共享的那个“共同方向”,就是前面说的“房租”、“水电”等——它存在于每个句子里,但对区分句子的语义没有贡献。减掉它,剩下的才是每个句子真正独特的东西。

论文[1]里的实验数据也证明了这一点:简单平均效果一般,TF-IDF 加权提升有限,SIF 加权 + 移除第一主成分才能带来显著跃升!!!

优点:效果远好于简单平均和 TF-IDF,实现也不复杂。

问题:仍然没考虑词序。


5. 方法四:按时间顺序读会议纪要(RNN / LSTM)

前面的方法都有一个致命缺陷:不区分词序

“狗咬人”和“人咬狗”,简单平均之后向量完全一样。但语义天差地别。

我们需要一种能按顺序读的方法。就像看一份公司会议纪要,你不会把所有人说的话打散再理解——你会从头到尾阅读,理解事情的来龙去脉。

RNN(循环神经网络)就是这样:

"狗 咬 人"

t=1: RNN 读取 v(狗) → 输出 h₁(当前的“记忆”)
t=2: RNN 读取 v(咬) + h₁ → 输出 h₂(融合了“狗咬”的信息)
t=3: RNN 读取 v(人) + h₂ → 输出 h₃(融合了“狗咬人”的全部信息)

h₃ 就是句子向量。

如果是“人咬狗”,读取顺序不同,最终 h₃ 也不同。

LSTM 是 RNN 的升级版,解决了长句子读到后面“忘记”开头的问题。

BiLSTM(双向 LSTM) 更进一步:一句话正着读一遍,反着读一遍,两边的结果拼在一起。这样每个词都能“看到”前后两个方向的信息。

优点:保留词序,捕捉上下文。

问题:训练慢,长距离依赖还是会衰减。而且——得从头训练一个模型,不像前面几种方法直接用现成的词向量就行。


6. 方法五:请麦肯锡做尽调(BERT / SBERT)⭐⭐⭐ 当前主流

前面四种方法,都有一个共同的思路:先有静态的词向量,再想办法把它们聚合起来

但 Transformer 和 BERT 的思路完全不同。

BERT 不是“先有证件照再叠在一起”。而是:把一整句话一次性读进去,让每个词根据上下文动态调整自己的向量,然后直接输出整句话的理解结果

就像你请麦肯锡来做尽职调查。他们当然也要看员工数据,但工作方式和前面完全不同:

  • 简单平均是:把所有人的档案拿出来,算个平均值,结论是“本公司员工平均年薪 30 万”;
  • 麦肯锡是:和高管访谈、了解各部门之间的协作关系、对比行业标杆、最后给出一份综合评估报告。这份报告里,同一个人在不同业务板块的表现可能完全不一样。

BERT 就是那个“麦肯锡顾问”。它不是直接取平均,而是让每个词在整句话的上下文里重新理解自己

例句: "我喜欢吃苹果"

[CLS] 我 喜 欢 吃 苹 果 [SEP]
  ↓    ↓  ↓  ↓  ↓  ↓  ↓
Transformer 编码器(12层自注意力)
  ↓
每个词得到一个“上下文感知”的向量
  ↓
取 [CLS] 的向量作为整句话的表示

关键区别

特性 Word2Vec 词向量 BERT 词向量
“苹果”的向量 固定不变 在“吃苹果”里偏向水果,在“苹果手机”里偏向电脑
多义词 ❌ 一个向量覆盖所有含义 ✅ 上下文自动消歧
句子表示 需要手动聚合 直接取 [CLS] 或池化

SBERT(Sentence-BERT) 是专门为句子相似度任务微调过的 BERT。普通的 BERT 直接取 [CLS] 做句子向量效果一般,SBERT 专门优化了这个环节,效果显著更好。

优点:效果最好,词序、上下文、重要度一次性全解决。

问题:需要 GPU,推理慢,模型大。


7. 方法六:直接算两家公司的“迁移成本”(WMD)

还有一种完全不同的思路。

前面的方法,都是把句子压缩成一个向量,然后比较向量。WMD 是:不压缩了,直接算两个句子之间的“距离”

就像你不把两家公司各自总结成一份报告再比较,而是直接算:把甲公司变成乙公司,最少要花多少钱?

句子A:“小明 买 苹果”
句子B:“男孩 购 水果”

WMD 思路:
- “小明” → “男孩”(语义接近,移动成本低)
- “买”   → “购”  (语义接近,移动成本低)
- “苹果” → “水果”(语义接近,移动成本低)

总移动成本 = 最优词对齐下的最小总距离。

这个方法理论很漂亮,但计算成本较高:

WMD 需要在两个句子的所有词之间找最优的“搬运方案”。这个优化问题的标准解法时间复杂度是 O(n³ log n),n 是词汇表大小——不是句子长度,是整个词汇表。也就是说,每比较两个句子,都要在几万甚至几十万个词的层面上做优化。

所以 WMD 更多是一个“理论上很优雅”的方法。实际项目里,除非你对速度完全没要求,否则通常会选择更快的替代方案(比如对 WMD 做近似加速,或者直接用 SBERT 算余弦相似度)。


8. 一张表对比

审计工作 句子向量任务 词序感知 上下文感知 实现难度 效果
一家公司 一个完整的句子
员工 词语
员工简历/证件照 词向量
分析公司的方法论 句子嵌入方法
- 全员薪资取平均 简单平均法 ⭐⭐
- 高管权重高,前台权重低 TF-IDF 加权法 ⭐⭐ ⭐⭐⭐
- 剔除行业共性,只看个性 SIF 加权法 ⭐⭐ ⭐⭐⭐⭐
- 从头到尾读会议纪要 RNN / LSTM 方法 部分 ⭐⭐⭐ ⭐⭐⭐
- 请麦肯锡做尽调 BERT / SBERT 方法 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
- 直接算两家公司的迁移成本 WMD 方法 ⭐⭐ ⭐⭐⭐
一个行业/集团 一个段落
各子公司尽调报告 各句子的向量
合并报表,写行业研报 段落向量

9. 实际场景怎么选?

场景是什么?
│
├── 有 GPU、追求最佳效果
│   └── ✅ SBERT / BGE(直接输出高质量句子向量)
│
├── 无 GPU、用 Word2Vec 词向量
│   └── ✅ SIF 加权平均(效果最好、实现不复杂)
│
├── 快速验证想法
│   └── ✅ 简单平均(一行代码)
│
└── 计算两个句子的相似度
    └── ✅ SBERT 或直接上 WMD

好的,我来续写。从“句子语义”自然延伸到“段落语义”,保持你系列文章的风格和类比体系。


10. 从句子到段落:问题的自然延伸

句子向量搞定了。但你一定想到了下一个问题:一段话怎么办?

现实中,我们处理的往往不是一句话,而是一段话、一篇文章。一段话里有多个句子,每个句子都有自己的向量——这不就是“词→句”问题的翻版吗?只是层级往上挪了一层。

层级 基本单元 要解决的问题
词 → 句 词向量 怎么把一叠“证件照”拼成“公司全貌”
句 → 段 句子向量 怎么把多份“尽调报告”合并成“行业研报”

11. 段落级方法:思路高度对应

好消息是,你不需要重新学一套方法。段落级的处理思路,和句子级几乎一一对应:

简单平均(又回到最初的起点......)

把段落里所有句子的向量取平均。一行代码,但主题句和过渡句被同等对待。

加权平均:首句和尾句更重要

在新闻和议论文里,首句往往是中心句,尾句是总结。加权方案可以很简单:首句权重 × 1.5,尾句 × 1.3,其他 × 1.0。也可以用 TextRank 这类算法自动算重要性。

按顺序读(LSTM)

把句子向量按顺序喂给 LSTM,最后一个隐状态就是段落向量。就像按时间顺序读多份会议纪要,理解事情的前因后果。

直接上 BERT(当前主流)

现代做法是直接把整段话塞进 BERT。BERT 最长支持 512 个 token(约 300-400 个中文词),覆盖绝大多数段落没问题。更长的文章,用 Longformer 等长文本模型,或者做滑动窗口 + 聚合。


12. 段落比句子多了什么?

你可能会问:既然方法一样,段落级有什么新东西?

句子内部的核心是:词序重要度。到了段落层面,多了两个新核心内容:句序与逻辑关系

“狗咬人”和“人咬狗”是词序问题。“因为下雨,所以没去”和“没去,因为下雨”——句序变了,强调的重点完全不同。但简单平均会把这两种情况压缩成同一个向量。

主题转换

一句话通常只有一个主题。一段话可能有起承转合:开头抛观点、中间举例、结尾总结。多个子主题之间怎么融合,目前没有统一的“最优方案”。


总结

从“全员平均薪资”到“麦肯锡尽调”,再到“行业研报”——语言被一层一层压缩成向量,每一步都在追问同一个问题:

怎么把多个东西融合成一个,还不丢失最重要的信息?

词向量问的是“怎么融合字词”。句子向量问的是“怎么融合词语”。段落向量问的是“怎么融合句子”。

方法从简单平均开始,一路走到 BERT。工具变了,思路始终没变:把离散的语言,变成可计算的向量。把向量之间的距离,变成语义上的远近。


📢 声明:本文借助AI辅助工具进行资料整理与初稿生成,所有内容均经过作者本人的详细核对、修改与编排,文责自负。


  1. Arora, S., Liang, Y., & Ma, T. (2017). A Simple but Tough-to-Beat Baseline for Sentence Embeddings. In Proceedings of ICLR 2017. OpenReview.net.

    【SIF 加权平均原论文】提出平滑逆频率(SIF)句子嵌入方法,"SIF 加权 + 移除第一主成分"的出处,无 GPU 场景下性价比最高的句子向量方案。OpenReview | arXiv

    ↩︎