两百份地方政府工作报告,分词以后有上千个不同的词。想知道这批材料主要沿着哪几个方向拉开差距,一个词一个词去比没有尽头。有的报告大谈招商引资和产业园区,有的反复讲生态修复和河湖治理,还有的集中在社区养老和就业帮扶。这些差别藏在几百个词的此消彼长里。
主成分分析(Principal Component Analysis,PCA)就是用来找这种主要差异方向的。它把上千个彼此相关的词压缩成少数几个新变量,每个新变量是一组词的加权组合,叫主成分。第一个主成分抓住材料之间最大的差异,第二个抓住剩下的差异里最大的那部分,依次类推。
在 TATOOLS 的【PCA 主成分分析】里【上传文档】,TATOOLS 先分词,再把文本切成片段,用 TF-IDF 把每个片段表示成一行词语权重,然后做主成分分析。报告给出碎石图、载荷图和得分散点图,为每个主成分起一个命名建议,把高贡献的词送回原文片段,并按这次的实际数据给出参数预检。
这篇教程先讲主成分分析要解决什么问题,再讲文本怎样变成一张数字表、主成分怎样从这张表里算出来,接着讲特征值和碎石图,再讲载荷、得分和命名,最后讲参数预检、报告的读法和论文里的写法。
01
主成分分析要解决什么问题
一张表有几百列,列和列之间又高度相关,【房租】多的片段【押金】往往也多,【课程】多的片段【学生】往往也多。这时候几百列里真正独立的信息远没有几百份。Pearson 1901 年提出用一条直线或一个平面去最贴近地拟合高维空间里的点,Hotelling 1933 年把它发展成主成分分析,找一组相互垂直的新坐标轴,第一根轴沿着数据散开最大的方向,第二根轴沿着剩下的方向里散开最大的方向。
用在文本上,每个片段是一个点,每个词是一个维度。主成分分析找出片段之间差异最大的几个方向,每个方向由一组一起升降的词撑起来。语言学里类似的思路由来已久,Biber 1988 年的多维分析用因子分析处理几十项语言特征,归纳出口语和书面语、叙述和说明等几个变异维度;Deerwester 等人 1990 年的潜在语义分析对词语和文档的矩阵做奇异值分解,找出潜在的语义维度,和主成分分析在数学上是近亲。
TATOOLS 的【PCA 主成分分析】做的就是这件事,只是把表从材料里自动建好,并把每个方向落回到具体的词和片段上。
02
文本怎样变成一张数字表
分词和过滤
TATOOLS 先按工具页的分词设置切词。【自定义词典】保证领域术语不被切碎,【使用系统停用词】和【自定义停用词】去掉泛泛的词,【分词模式】决定切分方式,打开词性过滤还可以只留选定的词性。单字和纯数字不进入分析。【词形合并】把几种写法并成一种再计数,比如把 AI 和人工智慧都并到人工智能。
切成片段
分词后的词语序列按【文档分段大小】设定的词数切成片段,相邻片段重叠一半,一个话题跨在切点上也能被完整看到。分段大小取 100 时,片段是这样排的。
片段 1:第 1 到 100 个词
片段 2:第 51 到 150 个词
片段 3:第 101 到 200 个词
……
每个片段是一个样本点,也是主成分分析的分析单位(Unit of Analysis,一次统计针对的对象)。分段小,能看到一篇文章内部不同部分的差异;分段大,看的是更宏观的整体走向。
用 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 = 40 时,出现在 4 个片段里的词,idf = ln(41 / 5) + 1 ≈ 3.10;出现在 36 个片段里的词,idf = ln(41 / 37) + 1 ≈ 1.10。到处都有的词权重被压低,集中出现的词权重被抬高。
进入分析之前还有两道筛选。【最小文档频率】要求一个词至少出现在这么多个片段里,【最大文档频率】去掉出现在过多片段里的词,比如取 0.95 时,出现在 95% 以上片段里的词不进入分析。在全部片段里累计权重太低的词也会被去掉。筛完剩下的词太少时,TATOOLS 会自动放宽最小文档频率,并在报告的【参数预检与自动推荐】里写明放宽到了多少。
标准化
最后,TATOOLS 把每个词的 TF-IDF 列缩放到方差为 1。高频词的权重本来波动就大,不做这一步,主成分会被少数几个高频词主导。标准化以后,每个词在分析里的起点一样,主成分分析实际上是在词和词的相关矩阵上进行的。
03
主成分怎样算出来
标准化以后,词和词两两之间的相关系数组成一个相关矩阵 R。主成分就是 R 的特征向量,对应的特征值是这个方向上的方差。
R × w = λ × w
w:特征向量,每个分量是一个词的系数
λ:特征值,这个方向上的方差
用只有两个词的例子手算一次。【房租】和【押金】在 40 个片段里的相关系数是 0.8。
R = | 1 0.8 |
| 0.8 1 |
特征值:λ₁ = 1 + 0.8 = 1.8,λ₂ = 1 − 0.8 = 0.2
特征向量:w₁ = (0.707, 0.707),w₂ = (0.707, −0.707)
第一主成分解释 1.8 / 2 = 90% 的方差
两个词高度相关,第一主成分给它们相同的系数,代表住房开支多还是少这一个共同方向,一个方向就说明了 90% 的差异。两个词呈负相关时,比如相关系数是 −0.6,第一主成分的特征值是 1.6,特征向量变成 (0.707, −0.707),两个词站到了这个方向的两端,这个主成分代表的就是两者的此消彼长。
真实的材料有几百个词,道理相同。TATOOLS 按【主成分数量】提取前几个特征值最大的方向,范围是 2 到 10 个。片段或词语太少、撑不起这么多主成分时,TATOOLS 会自动减少,并在参数预检里说明实际提取了几个。
04
特征值、解释方差和碎石图
每个主成分解释了多少差异,用解释方差比来看。
解释方差比_k = λ_k / Σ_j λ_j
累计解释方差 = 前 k 个主成分的解释方差比之和
标准化以后每个词的方差都是 1,所有特征值加起来等于词的个数。拿一个 10 个词的例子。
| 主成分 | 特征值 | 解释方差比 | 累计 |
|---|---|---|---|
| PC1 | 3.0 | 30% | 30% |
| PC2 | 2.0 | 20% | 50% |
| PC3 | 1.2 | 12% | 62% |
| PC4 | 0.9 | 9% | 71% |
| PC5 | 0.7 | 7% | 78% |
保留几个主成分,有两个常用的判断办法。Kaiser 1960 年提出,特征值大于 1 的主成分值得保留,因为标准化以后一个词本身的方差就是 1,特征值不到 1 的主成分,解释的差异还不如一个单独的词多。上表里前三个主成分的特征值大于 1,累计解释 62%。Cattell 1966 年提出碎石检验,把特征值从大到小连成折线,找折线突然变平的拐点,拐点以前的主成分保留,拐点以后的像山脚下的碎石。
TATOOLS 报告的【主成分分析碎石图】画出前 10 个主成分的特征值和累计解释方差,下方的图表解读写明有几个主成分的特征值大于 1、它们累计解释了多少,以及第一、第二主成分各解释了多少。想看分得更细,就把【主成分数量】调到 Kaiser 规则建议的个数再跑一次。
05
载荷:每个主成分由哪些词撑起来
特征向量的每个分量,是一个词在这个主成分上的载荷(Loading)。载荷的绝对值越大,这个词对这个方向的贡献越大;正负号说明它站在这个方向的哪一端。
| 词 | PC1 载荷 | PC2 载荷 |
|---|---|---|
| 招商 | 0.32 | 0.05 |
| 园区 | 0.29 | −0.02 |
| 生态 | −0.27 | 0.18 |
| 河湖 | −0.25 | 0.21 |
| 养老 | 0.03 | −0.30 |
这是一个示例。PC1 一端是招商、园区,另一端是生态、河湖,它刻画的是发展导向和生态导向的对照;PC2 主要由养老这一类民生词在负向一侧推动。一个主成分的正负号本身可以整体翻转,读载荷时看的是哪些词站在一起、哪些词站在对面。
TATOOLS 报告的【主成分载荷图】把对第一主成分贡献最大的 20 个词画在两个主成分构成的平面上,横轴和纵轴可以切换成任意两个主成分,离原点越远的词对这两个方向的贡献越大。
【主成分命名建议】为每个主成分取正向载荷最高和负向载荷最高的几个词,自动拼出一个名字。两端都有突出的词时,命名成【招商 / 园区 与 生态 / 河湖 的对照维度】;只有一端突出时,命名成某几个词的相关维度。每条建议下面列出正向和负向的高载荷词,以及这个主成分的解释方差比。命名建议是读载荷的起点,最终名字要对照原文片段来定。
06
得分:每个片段落在哪里
每个片段在一个主成分上的得分,是它的标准化权重和这个主成分特征向量的内积。
得分_k(d) = Σ_t w_(k,t) × x_(d,t)
x_(d,t):片段 d 里词 t 的标准化权重(减去均值以后)
接着上面两个词的例子,某个片段的【房租】和【押金】标准化后分别是 1.2 和 0.9。
PC1 得分 = 0.707 × 1.2 + 0.707 × 0.9 ≈ 1.485
PC2 得分 = 0.707 × 1.2 − 0.707 × 0.9 ≈ 0.212
这个片段在住房开支这个方向上明显偏高,在两个词此消彼长的方向上几乎居中。
TATOOLS 报告的【主成分得分散点图】把每个片段画成一个点,两个坐标轴可以切换成任意两个主成分,轴标题上写着各自的解释方差。鼠标停在点上能看到它的得分,点一下能看到这个片段来自哪个文件的第几段,以及它 TF-IDF 最高的三个关键词和内容预览。离原点很远的点是某个方向上最极端的片段,最值得回原文去读。上传多个文件时,合并视图里的点按文件着色,一眼能看出不同材料是否落在不同的区域。
07
回到原文核对
主成分是词语的数学组合,名字对不对,要看它在原文里的样子。TATOOLS 报告的【高贡献词语回到文本定位】列出对第一主成分贡献最大的一批词,点选一个词,就列出含有这个词、在各主成分上得分最极端的几个片段,并标出来源文件、段序号和最强得分。
一个主成分被命名成发展导向与生态导向的对照,就点开招商和生态,看它们所在的片段是不是真的一边在讲项目落地,一边在讲生态修复。这一步把统计结果和文本内容连起来,是命名可信的依据。
08
参数预检与自动推荐
同一套参数放在不同的材料上,效果可能差很多。TATOOLS 在每次任务完成后,按这次的实际数据检查几件事,写进报告的【参数预检与自动推荐】。
| 检查项 | 提示什么 |
|---|---|
| 片段数量 | 片段太少时散点和主成分不稳定,建议上传更长文本或调小分段 |
| 可用词语数量 | 词太少时命名可能不稳定,建议调低最小文档频率或补充词典 |
| 最小文档频率 | 被自动放宽时写明放宽到了多少 |
| 最大特征数 | 可用词语接近这个数时给出提示 |
| 主成分数量 | 实际提取数少于设定数时说明原因 |
| 累计解释方差 | 偏低时建议增加主成分或清理噪声,较高时提示可以开始解读 |
片段很多时,图表最多展示前 100 个点,全部片段的结果可以下载结果表后筛选。
09
工具页上的设置一览
| 设置 | 范围 | 默认 | 影响什么 |
|---|---|---|---|
| 分词设置、词形合并 | 自己填写 | 空 | 哪些词参与分析 |
| 主成分数量 | 2 到 10 | 2 | 提取几个主要方向 |
| 最大特征数 | 100 到 5000 | 1000 | 可用词语接近它时给出提示 |
| 最小文档频率 | 2 到 1000 | 5 | 一个词至少出现在几个片段里 |
| 最大文档频率 | 0.01 到 0.99 | 0.95 | 出现在过多片段里的词被去掉 |
| 文档分段大小 | 100 到 500 | 100 | 每个片段含多少个词 |
主成分数量先用默认的 2 跑一遍,看碎石图上特征值大于 1 的有几个,再调到那个数重跑。载荷图里泛泛的词太多,就补进停用词或调低最大文档频率;专有名词被切碎,就补进自定义词典。
10
多个文件怎样分析
上传多个文件时,TATOOLS 对每个文件单独做一次主成分分析,再把所有文件合在一起做一次。合并分析里,每个片段仍然记着来自哪个文件,得分散点图可以按文件着色。报告顶部的【多文件对比】列出每个文件的片段数、前几个主成分的累计解释方差和第一个主成分的命名建议。
比较不同材料时看合并分析。几份材料在合并后的得分散点图上分成几团,说明它们在用词上沿着这几个主成分拉开了;混在一起,说明主要差异不在材料之间,而在每份材料内部。
11
报告怎么读
TATOOLS 的报告自上而下是这几块。
| 区块 | 先看什么 |
|---|---|
| 这份结果说明了什么 | 片段数、词语数、累计解释方差 |
| 多文件对比 | 各文件的解释方差和命名建议 |
| 主成分分析碎石图 | 几个主成分的特征值大于 1,拐点在哪 |
| 主成分载荷图 | 哪些词离原点最远,站在哪一端 |
| 主成分得分散点图 | 哪些片段最极端,文件是否分开 |
| 主成分命名建议 | 正负两端的高载荷词 |
| 参数预检与自动推荐 | 有没有需要调整的参数 |
| 高贡献词语回到文本定位 | 高载荷词所在的原文片段 |
读的顺序是先碎石图定主成分的个数,再用载荷图和命名建议给每个主成分起名,然后看得分散点找极端片段,最后回到原文核对名字。报告末尾还给出几个下一步可以用的工具,比如把主成分得分交给文本聚类。
12
把结果写进论文
主成分适合在论文里作为描述材料内部差异结构的依据,得分也可以作为后续回归或聚类的输入变量。下面是一段方法部分的写法示例,方括号里换成自己的数字。
本研究使用 TATOOLS 的 PCA 主成分分析处理 [文件数] 份文本。分词并去除停用词后,按每段 [词数] 个词、相邻片段重叠一半切分为 [片段数] 个片段,以 TF-IDF 加权构建片段—词语矩阵,保留至少出现在 [最小文档频率] 个片段中的 [词数] 个词,标准化后进行主成分分析(Hotelling,1933)。依据 Kaiser 准则与碎石图保留 [K] 个主成分,累计解释 [比例] 的方差。各主成分依据正负两端的高载荷词命名,并回到高得分片段逐一核对。
报告主成分时,列出每个主成分的解释方差比和正负两端载荷最高的几个词,读者就能看出它代表的是哪一组词的此消彼长。
13
小结
主成分分析把上千个相关的词压缩成少数几个相互独立的方向,第一个主成分抓住最大的差异,依次递减。
TATOOLS 先分词,再按词数把文本切成相邻重叠一半的片段,用 TF-IDF 加权、筛词、标准化,得到片段—词语矩阵。
主成分是相关矩阵的特征向量,特征值是这个方向上的方差,解释方差比等于特征值除以特征值之和。
保留几个主成分可以看 Kaiser 准则和碎石图的拐点。
载荷说明每个主成分由哪些词撑起来,正负两端的词构成一组对照;得分说明每个片段落在这个方向的哪里。
报告自动给出主成分命名建议,把高贡献词送回原文片段,并按实际数据给出参数预检。
想把片段按相似度直接分成几组,可以用 TATOOLS 的【高级文本聚类】;想做和主成分分析同源的潜在语义分析,可以用【LSA 潜在语义分析】;表格里的数值列要做主成分分析,用【PCA 主成分降维】。
14
资料来源
Jolliffe:Principal Component Analysis(第 2 版),Springer,2002
Cattell:The Scree Test for the Number of Factors,Multivariate Behavioral Research,第 1 卷第 2 期,1966
Biber:Variation across Speech and Writing,Cambridge University Press,1988
END
