返回教程列表
文本分析基础教程潜在语义分析奇异值分解主题分析

LSA 潜在语义分析完整教程:从 TF-IDF 矩阵与截断奇异值分解,到主题词和解释方差,再到跑偏段落与主题重叠诊断

一篇三万字的综述讲了几条主线,哪几段跑了题,城镇化和城市化能不能算到一起?这篇教程从 Deerwester 等人 1990 年提出的潜在语义分析讲起,说明 TATOOLS 的【LSA 潜在语义分析】怎样把材料切成段,用 TF-IDF 建成段落与词语的矩阵,再做截断奇异值分解。接着用四个词的小矩阵手算奇异值、段落坐标和重建结果,讲清近义词为什么会落到一起,以及主题词、解释方差比和主导主题各是什么。最后讲报告里的跑偏段落提示和主题重叠诊断,说明主题名怎样在报告里改好并导出成主题结构摘要,并给出论文方法部分的写法示例。

作者:TATOOLS 研究团队|更新于 2026-09-23|7148 个字符|约 24 分钟读完

一篇三万字的文献综述初稿,写了半年,章节改过好几轮。作者想知道它实际讲了几条主线,哪几段写着写着偏了题,两个自以为不同的小节是不是在说同一件事。更麻烦的是,引用的文献各有各的用词,有人写城镇化,有人写城市化,按关键词去数,两个说法会被当成两件事。

潜在语义分析(Latent Semantic Analysis,LSA)专门处理这种情况。它把一段一段的文本和其中的词排成一张大表,用矩阵分解找出藏在用词背后的少数几个语义方向,每个方向叫一个潜在主题。经常和同一批词一起出现的两个词,即使从来没在同一段里碰面,也会在这些方向上落到相近的位置。

在 TATOOLS 的【LSA 潜在语义分析】里【上传文档】,TATOOLS 把材料切成段,用 TF-IDF 建表,再做截断奇异值分解。报告给每个主题列出主题词并拟好名字,标出每段的主导主题,找出主题归属不清的跑偏段落,还检查哪些主题的关键词重叠太多。

这篇教程先讲 LSA 要解决什么问题,再讲文本怎样变成一张片段与词语的矩阵,接着用一个四个词的例子手算一遍奇异值分解,讲清主题词、解释方差和片段坐标各是什么。最后讲跑偏段落和主题重叠的诊断,以及报告的读法和论文里的写法。

01

LSA 要解决什么问题

按关键词检索和计数,有两个老问题。一个是同义,城镇化和城市化说的是同一件事,字面不同就数不到一起;一个是多义,同一个词在不同领域意思不同。Deerwester 等人 1990 年提出 LSA,最初就是为了让文献检索绕开这两个问题。他们的想法是,词义体现在它和哪些词一起出现,这种一起出现的规律藏在整张词语与文档的矩阵里,把矩阵压缩到少数几个维度,规律就显出来了。

Landauer 和 Dumais 1997 年用 LSA 做了一个著名的检验。他们用大量百科文本训练 LSA,再让它做托福考试里的 80 道同义词选择题,LSA 答对 64.4%,和来自非英语国家的考生平均水平 64.5% 几乎一样。LSA 从来没被告诉过哪些词是同义词,它只看了词和词在文本里怎样一起出现。

社会科学里,LSA 常用来看一批文本由哪几个主题构成,比较文本之间语义上的远近,也用来检查一篇长文的结构。TATOOLS 的【LSA 潜在语义分析】侧重后两件事,报告不光给出主题,还逐段标出每段属于哪个主题、归属是否清楚。

02

文本怎样变成一张矩阵

分词和切段

TATOOLS 先去掉标点,再按工具页的分词设置切词。【自定义词典】保证领域术语不被切碎;停用词去掉的、了这类没有实际内容的词;打开词性过滤可以只留选定的词性;【词形合并】把几种写法并成一种再计数,比如把 AI 和人工智慧都并到人工智能。

材料按【文档分段大小】设定的字数一段一段切开,段与段首尾相接、不重叠。分析单位(Unit of Analysis,一次统计针对的对象)是段。段小,能看到一章里前后几段的主题变化;段大,看的是更宏观的主线。上传多个文件时,TATOOLS 对每个文件单独分析,报告按文件依次排列。

TF-IDF 加权

每一段用 TF-IDF(词频–逆文档频率,一个词在这段常见、在别处少见的程度)表示成一行权重,每个词是一列。

· · ·

tfidf(t, d) = tf(t, d) × idf(t)

idf(t) = ln((1 + n) / (1 + df(t))) + 1

n:段落总数;df(t):含有词 t 的段落数

每一行再缩放到长度为 1

n = 60 时,只出现在 5 段里的词,idf = ln(61 / 6) + 1 ≈ 3.32;出现在 50 段里的词,idf = ln(61 / 51) + 1 ≈ 1.18。【最小文档频率】要求一个词至少出现在这么多段里,【最大文档频率】去掉几乎每段都有的词,【最大特征数】给保留的词数设上限。段落太少、门槛显得太严时,TATOOLS 会自动放宽这几个门槛再算。

03

奇异值分解:把矩阵拆成几个方向

定义

把 n 段、m 个词的 TF-IDF 矩阵记作 X。奇异值分解(Singular Value Decomposition,SVD)把它写成三个矩阵的乘积。

· · ·

X = U × Σ × Vᵀ

Σ:对角线上是奇异值 σ₁ ≥ σ₂ ≥ …,每个对应一个方向

V 的第 k 列:第 k 个方向上每个词的权重

U × Σ 的第 k 列:每一段在第 k 个方向上的坐标

只保留前 k 个最大的奇异值和对应的列,就是截断奇异值分解。Eckart 和 Young 1936 年证明,这样得到的秩为 k 的矩阵,是所有秩为 k 的矩阵里离原矩阵最近的一个,丢掉的误差平方和正好等于被丢掉的奇异值的平方和。LSA 就是对词语矩阵做截断奇异值分解,保留下来的 k 个方向就是 k 个潜在主题。

手算一个例子

为了能手算,这里用词频代替 TF-IDF。三段文字,四个词。

· · ·

        城镇化 城市化 户籍 课堂

段 1 1 0 1 0

段 2 0 1 1 0

段 3 0 0 0 2

段 1 和段 2 讲的是同一件事,只是一个写城镇化、一个写城市化。原始的余弦相似度是 1 / (√2 × √2) = 0.5,两个词本身从没在同一段出现,按列算余弦相似度是 0。

奇异值来自 XᵀX 的特征值。前三个词组成的那一块可以直接验证。

· · ·

XᵀX 前三行三列 = | 1 0 1 |

                 | 0 1 1 |

                 | 1 1 2 |

乘以 (1, 1, 2) 得 (3, 3, 6) = 3 × (1, 1, 2)

特征值 3,奇异值 √3 ≈ 1.73

这一块另外两个特征值是 1 和 0

课堂那一列自成一块,特征值 4,奇异值 2

保留两个主题。主题 1 是课堂,奇异值 2;主题 2 的词权重是 (1, 1, 2) 缩放到长度为 1,城镇化 0.408、城市化 0.408、户籍 0.816。

· · ·

段 1 在主题 2 上的坐标 = 1×0.408 + 1×0.816 ≈ 1.22

段 2 在主题 2 上的坐标 = 1×0.408 + 1×0.816 ≈ 1.22

段 3 在主题 1 上的坐标 = 2

用两个主题重建段 1 = 1.22 × (0.408, 0.408, 0.816, 0) ≈ (0.5, 0.5, 1, 0)

重建出来的段 1,城市化一栏从 0 变成了 0.5。段 1 从没写过城市化,LSA 从段 2 学到城市化和户籍总是一起出现,推断段 1 也和城市化有关。两段在主题空间里的坐标完全相同,余弦相似度从 0.5 升到 1;城镇化和城市化在两个主题上的权重都是 (0, 0.41),方向一模一样。丢掉的误差是段 1 和段 2 各 0.5² + 0.5² = 0.5,合计 1,正好等于被丢掉的奇异值 1 和 0 的平方和。

TATOOLS 按【保留的主成分数量】做这一步,最多保留 10 个主题。

04

主题词、解释方差和片段坐标

主题词和主题名

V 的每一列是一个主题上所有词的权重,权重可正可负。TATOOLS 按权重从大到小取出每个主题的前 20 个词,【主题详情】和【词语重要性】把它们画出来。再去掉太短的词和主题、分析这类泛泛的词,取前三个拼成主题名,比如【户籍、城镇化、城市化相关主题】。

对没有减去均值的词语矩阵,第一个方向上所有词的权重同号,它常常由整份材料里最常见的一批词撑起,描述的是材料的总体用词。从第二个方向开始,权重有正有负,才开始区分不同的话题。读主题时,第一个主题的名字常常最宽泛,这是方法本身的性质。

解释方差

每个主题说明了多少差异,用解释方差比来看。

· · ·

解释方差比_k = 各段在主题 k 上坐标的方差 ÷ 原矩阵各列方差之和

接着上面的例子。四列的方差分别是 2/9、2/9、2/9 和 8/9,合计 14/9。三段在主题 1 上的坐标是 (0, 0, 2),方差 8/9;在主题 2 上是 (1.22, 1.22, 0),方差 3/9。

· · ·

主题 1:(8/9) ÷ (14/9) = 8/14 ≈ 57%

主题 2:(3/9) ÷ (14/9) = 3/14 ≈ 21%

累计 11/14 ≈ 79%

TATOOLS 报告的【累计方差解释率】把各主题的解释方差按编号依次累加成折线,【各主题方差贡献】把每个主题单独画成柱子。累计值偏低,说明材料的用词很分散,几个主题只说明了其中一部分,可以试着多保留几个主题。

片段坐标和主导主题

U × Σ 的每一行是一段在各主题上的坐标。TATOOLS 把每一段的坐标缩放到长度为 1,坐标最大的那个主题就是这一段的主导主题,最大的坐标就是主导权重。

· · ·

某段在三个主题上:(0.95, 0.20, 0.24)

长度 ≈ 1,主导主题 1,主导权重 0.95

第二高 0.24,两者相差 0.71,归属清楚

【主题分布】和【主题占比】统计每个主题分到了几段,【主题内容分析】按主题分页列出归到这个主题的代表段落和它们的主导权重。【主题相关性摘要】按主题汇总各段坐标的平均水平,【相关性极值】找出在某个主题上坐标最高和最低的段落。

05

跑偏段落和主题重叠

跑偏段落

一段的主导权重偏低,或者和第二高的主题相差很小,它的归属就不清楚。

· · ·

某段在三个主题上:(0.62, 0.58, 0.53)

主导权重 0.62,第二高 0.58,只差 0.04

这一段同时挨着三个主题,可能在做过渡,可能一段里讲了几件事,也可能离题了。TATOOLS 的【跑偏段落提示】把这类段落列出来,写明原因。主导权重低、差距又小,提示回看它是不是过渡或背景;只是权重偏低,提示检查信息是不是太少;只是差距小,提示它可能同时讨论了几个问题,可以考虑拆成两段。改一篇长文时,从这张表下手最快。

主题重叠诊断

两个主题的关键词重合太多,它们可能是一件事被分成了两半,也可能共用了一批泛泛的词。TATOOLS 用 Jaccard 系数(交集大小除以并集大小)衡量两个主题关键词的重合。

· · ·

主题 A 关键词:{户籍, 城镇化, 落户, 人口, 流动, 市民化}

主题 B 关键词:{户籍, 城镇化, 人口, 土地, 财政, 融资}

交集 3 个,并集 9 个,Jaccard = 3 / 9 ≈ 0.33

【主题重叠诊断】列出重合较多的主题对和它们共享的关键词。重合很高时,建议减少主题数或把两个主题合并解读;重合中等时,先看共享词是不是泛泛的词,是的话补进停用词重跑。【主题相似度热力图】给出所有主题两两之间的重合度,【主题关系网络图】把相近的主题连起来。

06

散点图和词汇网络

【文档降维散点】把每段在主题空间里的坐标再压到平面上,颜色是主导主题;【词汇降维散点】对词做同样的事,并按词在各主题上的权重把词分组,看词的分组和主题是否对得上。【主题核心词汇】为每个主题取权重最高的一批词,两个词在各主题上的权重方向接近,就连一条线,画成网络,并算出每个词的中心性,处在网络中间的词就是这个主题的核心。【词汇在不同主题中的权重分布】给出每个词在每个主题上的完整权重,方便查任何一个词。

TATOOLS 把这些图放在主题结构的诊断之后,作为查细节的工具。先用主题名、代表段落和跑偏段落把结构看清楚,有疑问再来这里找具体的词。

07

两种算法

截断奇异值分解有两种常用的算法,TATOOLS 的【算法】两种都提供。

算法 做法 适合 相关设置
randomized 先用随机投影把矩阵压小,再精确分解(Halko 等,2011) 段落多、词多的大材料 迭代次数,越多越准
arpack 用 Lanczos 迭代直接求最大的几个奇异值 中小材料,结果每次一致 容忍度,越小越准

一般用默认的 randomized 就够了。需要多次运行结果完全一致、材料又不大时,可以换成 arpack。

08

LSA 和相近方法的区别

方法 怎样分解 结果里的数
LSA 对 TF-IDF 矩阵直接做截断奇异值分解 可正可负的坐标和权重
主成分分析 先减去均值、标准化,再分解相关矩阵 可正可负的得分和载荷
LDA 主题模型 概率模型,每段是几个主题按比例混合 0 到 1 之间、加起来为 1 的比例

LSA 是一次矩阵分解,算得快,擅长把近义词拉到一起。LDA 的主题比例更容易直接解释成每段有百分之几在讲某个主题。两者可以对照着用。

09

分析场景模板和设置

工具页顶部的【分析场景模板】按材料预设了三组参数,选一个就自动填好,下面的设置仍可以微调。

模板 适合的材料 预设的做法
论文综述 文献笔记、论文草稿和综述 4 个主题,每段 250 字
访谈材料 访谈逐字稿、开放题回答 6 个主题,每段 180 字,保留更多词
政策长文 政策、公文、报告 5 个主题,每段 300 字,arpack 算法
设置 范围 影响什么
分词设置、词形合并 自己填写 哪些词参与分析
保留的主成分数量 最多 10 提取几个潜在主题
最大特征数 1 到 5000 保留的词数上限
最小文档频率 2 到 10 一个词至少出现在几段里
最大文档频率 0.01 到 0.99 出现在过多段落里的词被去掉
文档分段大小 100 到 500 每段多少字
算法 randomized 或 arpack 用哪种算法分解
迭代次数 5 到 100 randomized 的精度
容忍度 0.001 到 0.1 arpack 的精度

主题名里泛泛的词多,或者重叠诊断里共享词大多是通用词,就把它们补进停用词重跑;专有名词被切碎,就补进自定义词典;跑偏段落多、累计解释方差低,可以试着多保留一两个主题,或者调整分段大小。

10

报告怎么读

TATOOLS 的报告先给出整体的模型效果,再按文件依次展开。

区块 先看什么
总解释方差、当前模型参数、参数优化建议 几个主题一共说明了多少差异
主题结构摘要 结构判断和结论草稿
主题命名与代表段落 主题名对不对,代表段落是否说的是一回事
跑偏段落提示 哪些段落归属不清
主题重叠诊断 哪些主题可能该合并
主题详情、词语重要性 每个主题的前 20 个词
模型解读、主题相关性摘要、主题内容分析 每段归到哪个主题
累计方差解释率、各主题方差贡献 每个主题说明了多少
主题相似度热力图、主题关系网络图 主题之间有多近
散点图、主题核心词汇、完整权重表 查具体的段和词

【主题结构摘要】按最大主题覆盖了多少段落,判断材料是主题集中还是多议题并列,并给出一段结论草稿。【主题命名与代表段落】为每个主题列出权重最高的三段原文,主题名可以直接在输入框里改,改好的名字会同步到跑偏段落和重叠诊断里。点【导出摘要】,主题名、关键词、代表段落、跑偏段落和重叠诊断会一起导出成一份主题结构摘要。

读的顺序是先看主题命名与代表段落,改定每个主题的名字,再看跑偏段落和重叠诊断决定改哪里,最后回到解释方差确认主题数是否合适。结果可以下载,包括每段在各主题上的坐标和主导主题、每个主题的词语权重和各主题的解释方差。

11

把结果写进论文

LSA 适合在论文里用来描述一批文本的语义结构,或者作为检查长文结构的依据。下面是一段方法部分的写法示例,方括号里换成自己的数字。

本研究使用 TATOOLS 的 LSA 潜在语义分析处理 [文件数] 份文本。分词并去除停用词后,按每段约 [字数] 字切分为 [段落数] 段,以 TF-IDF 加权构建段落—词语矩阵,保留至少出现在 [最小文档频率] 段中的词,对矩阵做截断奇异值分解(Deerwester 等,1990),保留 [K] 个潜在主题,累计解释 [比例] 的方差。各主题依据权重最高的关键词与代表段落人工命名,每段以坐标最大的主题作为主导主题。

报告主题时,列出每个主题的名称、解释方差比、段落占比和前五个关键词,再各引一段代表段落,读者就能看出每个主题讲的是什么。

12

小结

LSA 对段落与词语的 TF-IDF 矩阵做截断奇异值分解,保留的 k 个方向就是 k 个潜在主题。

截断奇异值分解给出最接近原矩阵的低秩近似,经常和同一批词一起出现的近义词会落到相近的位置。

主题词是每个方向上权重最高的词,解释方差比说明每个主题说明了多少差异,段落坐标缩放到长度为 1 后,最大的一项是主导主题。

TATOOLS 为每个主题拟好名字、列出代表段落,标出主导权重偏低或和第二主题相差很小的跑偏段落,并用 Jaccard 系数诊断主题重叠。

主题名可以在报告里直接改,连同代表段落、跑偏段落和重叠诊断一起导出成主题结构摘要。

想看片段之间沿着哪几个方向拉开差异,可以用 TATOOLS 的【PCA 主成分分析】;想让每段的主题表示成加起来为 1 的比例,用【高级LDA主题模型】;想把段落直接按相似度分成几组,用【高级文本聚类】。

13

资料来源

Deerwester 等:Indexing by Latent Semantic Analysis,Journal of the American Society for Information Science,第 41 卷第 6 期,1990

Landauer 与 Dumais:A Solution to Plato’s Problem: The Latent Semantic Analysis Theory of Acquisition, Induction, and Representation of Knowledge,Psychological Review,第 104 卷第 2 期,1997

Landauer、Foltz 与 Laham:An Introduction to Latent Semantic Analysis,Discourse Processes,第 25 卷第 2–3 期,1998

Eckart 与 Young:The Approximation of One Matrix by Another of Lower Rank,Psychometrika,第 1 卷第 3 期,1936

Halko、Martinsson 与 Tropp:Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions,SIAM Review,第 53 卷第 2 期,2011

Lehoucq、Sorensen 与 Yang:ARPACK Users’ Guide,SIAM,1998

Salton 与 Buckley:Term-Weighting Approaches in Automatic Text Retrieval,Information Processing & Management,第 24 卷第 5 期,1988

Blei、Ng 与 Jordan:Latent Dirichlet Allocation,Journal of Machine Learning Research,第 3 卷,2003

Jaccard:The Distribution of the Flora in the Alpine Zone,New Phytologist,第 11 卷第 2 期,1912


END