一位作家早年的几部短篇和晚年的一部长篇放在一起,想比较两个时期的用词是越写越开放,还是渐渐收敛到一套熟悉的词表里。算不同的词占总词数的比例,长篇几乎一定吃亏,文章越长,常用词重复得越多,新词出现得越慢。
计量语言学用两条经验规律描述这种现象。Heaps 定律描述词表怎样随文本变长而增长,Zipf 定律描述词频怎样随排名递减。两条规律各有一个参数,β 衡量新词冒出来的速度,s 衡量少数高频词占主导的程度,它们刻画的是整条曲线的形状,受文本长短的影响比简单比例小得多。
在 TATOOLS 的【词汇增长曲线分析】里【上传文档】,TATOOLS 沿文本逐段累计词数和不同词数,画出词汇增长曲线并拟合 β,再把词按频次排队拟合 s,两项拟合都附 R²,β 和 s 各配一句定性说明,多份文件可以横向对比。
这篇教程先讲词汇增长曲线怎样画,再用小例子手算 β、s 和 R²,讲清拟合时为什么保留停用词,最后讲报告的读法和论文里的写法。
01
词汇增长曲线
从文本开头往后读,每读一个词,累计词数 N 加 1;遇到前面没出现过的词,不同词数 V 也加 1。把每个时刻的 N 和 V 画成一条曲线,就是词汇增长曲线。
N:累计读到的词数(形符数)
V:累计出现过的不同词数(类符数)
曲线开头几乎是一条斜率为 1 的直线,每个词都是新词;越往后越平,常用词反复出现,新词越来越少。不同的文本,曲线弯下来的快慢不一样,这正是要比较的东西。
TATOOLS 每隔固定的词数记一个点,工具页的【Heaps(新词随文本变长增加的规律)曲线采样步长】默认每 100 个词记一次,文本末尾再补一个点。报告的【词汇增长曲线】可以在线性坐标和双对数坐标之间切换。
02
Heaps 定律与 β
Herdan 1960 年和 Heaps 1978 年先后发现,V 和 N 之间近似是幂函数关系。
V = K × N^β
K:比例系数;β:增长指数,通常在 0 到 1 之间
β 是用词开放度。β 越接近 1,文本越是不断引入新词;β 越小,用词越收敛在一套固定的词表里。β = 0.5 时,文本长到原来的 4 倍,词表只长到原来的 2 倍。
两边取对数,幂函数变成一条直线,斜率就是 β。
log V = log K + β × log N
TATOOLS 在双对数坐标下用最小二乘法拟合这条直线。手算一个例子,三个采样点(示例)。
N V log₁₀N log₁₀V
100 50 2 1.699
1000 150 3 2.176
10000 500 4 2.699
β = Σ(x − x̄)(y − ȳ) ÷ Σ(x − x̄)²
= (0.492 + 0 + 0.508) ÷ 2 = 0.50
K = 10^(2.191 − 0.50 × 3) ≈ 4.9
文本从 100 词长到 10000 词,长了 100 倍,词表从 50 长到 500,只长了 10 倍。
β 和不同词占比的关系也能看清。不同词占比等于 V ÷ N,也就是 K × N^(β − 1),β 小于 1 时,文本越长,这个比例越低,这个例子从 0.5 降到 0.05。β 描述的是整条曲线增长的快慢,长短不同的文本,β 比不同词占比更适合拿来比较。
报告的【当前文件指标】把 β 叫作用词开放度,附一句定性说明,下方的位置条把 β 标在极封闭到极开放的刻度上。
03
Zipf 定律与 s
把全部不同的词按出现次数从多到少排队,第一名的排名 r 是 1,第二名是 2,依此类推。Zipf 1949 年总结出,一个词的频次和它的排名近似成反比。
f(r) = C × r^(−s)
log f = log C − s × log r
f:频次;r:排名;s:分布陡峭度
在自然语言里,s 常常接近 1,排第二的词出现次数大约是第一名的一半,排第三的约三分之一。
| 排名 | s = 1 时的频次 | s = 1.2 时的频次 |
|---|---|---|
| 1 | 1000 | 1000 |
| 2 | 500 | 435 |
| 3 | 333 | 268 |
| 4 | 250 | 189 |
s 越大,曲线越陡,少数几个高频词占的份额越大;s 越小,分布越平,低频词构成的长尾越重。从第一名和第四名就能反推 s。
s = log(f₁ ÷ f₄) ÷ log 4
s = 1 时 log(1000 ÷ 250) ÷ log 4 = 1
s = 1.2 时 log(1000 ÷ 189) ÷ log 4 ≈ 1.20
TATOOLS 同样在双对数坐标下用最小二乘法拟合,只用排名最前的 N 个词,工具页的【Zipf(词频随排名递减的规律)拟合用前 N 个高频词】默认 5000 个。排名靠后的词大多只出现一两次,几千个词挤在同一个频次上,在双对数图上是一段段水平的台阶,把它们全部放进来会把拟合拉偏。报告的【Zipf(词频随排名递减的规律)双对数图】画出每个词的排名和频次,虚线是拟合直线,斜率就是 −s。
04
R²:拟合得好不好
两条规律都是在双对数坐标下拟合直线,R² 说明数据点离这条直线有多近。
R² = 1 − 残差平方和 ÷ 总平方和
残差:每个点的实际值和直线预测值之差
接着 Heaps 的例子,拟合直线在三个点上的预测值和实际值只差 0.008、0.015 和 0.008,R² ≈ 0.999,三个点几乎落在一条直线上。
R² 越接近 1,β 或 s 越能概括这份文本的规律。R² 偏低,多半是文本太短,或者一份文件里混杂了体裁差别很大的内容,前后半段的用词习惯不一样。TATOOLS 在【当前文件指标】里把两项 R² 中较低的一个标为拟合可信度,【专业指标说明】里写明了两项拟合的公式和常见区间。
05
拟合为什么保留停用词
的和是这类功能词在几乎每篇文本里都排在前面。TATOOLS 的停用词设置和词性过滤只作用于报告里的高频词表,β 和 s 始终用包含全部词的完整词流计算。
两条规律描述的是自然语言的整体统计性质,功能词本来就是它的一部分。拟合前删掉停用词,N 会大幅减少,V 却几乎不变,β 会被抬高;Zipf 分布最稳定的头部被砍掉,s 会明显变小。这样算出的 β 和 s 就没法和其他研究对照。
报告的【当前文件 Top 高频词】列出频次最高的 50 个词,【隐藏停用词】默认打开,表里只显示实词,原始排名一栏写明它在完整排名里排第几;表头写明前 10 名的词占全部词频的比例,这个比例按完整排名计算。
06
切分单位与多份文件
中文按词切分和按字切分,得到的 β 和 s 差别很大,只有同一种切分单位下的结果才能相互比较。【切分单位】默认按词,按字适合古汉语和字本位研究;按词切分时可以打开【自动补充词典】,TATOOLS 先把分词词典不认识的新词找出来加进词典。【词形合并】把同一个词的不同写法并成一个再计数,并入以后的写法算作同一个类符。
上传多份文件时,TATOOLS 默认每份文件各画一条曲线、各拟合一组参数,报告的【多文件横向对比】列出每份文件的词数、不同词数和不同词占比,β 和 s 连同两项 R² 也并排列出,【文件选择】切换当前查看的文件。打开【合并所有文件再拟合】,所有文件按上传顺序拼成一条词流,另外给出一组整体参数。
07
工具页上的设置一览
| 设置 | 选项或范围 | 默认 | 影响什么 |
|---|---|---|---|
| 文本语言 | 自动检测、中文、英文 | 自动检测 | 怎样切词 |
| 切分单位 | 按词、按字 | 按词 | 以词还是以字为单位统计 |
| 自动补充词典 | 开或关 | 关 | 新词是否先加进分词词典 |
| Heaps 曲线采样步长 | 20 到 2000 个词 | 100 | 增长曲线每隔多少词记一点 |
| Zipf 拟合用前 N 个高频词 | 100 到 20000 | 5000 | 参与 s 拟合的词数 |
| 合并所有文件再拟合 | 开或关 | 关 | 是否另给一组整体参数 |
| 使用系统停用词 | 开或关 | 开 | 高频词表里是否隐藏功能词 |
| 词形合并 | 一行一组写法 | 空 | 哪些写法算作同一个词 |
停用词和词性过滤只影响高频词表的展示,TATOOLS 的全部拟合结果都不受它们影响。
08
报告怎么读
| 区块 | 先看什么 |
|---|---|
| 这份结果说明了什么 | β、s 和拟合情况的一句话结论 |
| 当前文件指标 | 用词开放度、分布陡峭度、词汇丰富度和拟合可信度 |
| 词汇增长曲线 | 曲线弯下来的快慢,双对数下是否接近直线 |
| Zipf 双对数图 | 点是否贴着虚线,头部和尾部偏离多少 |
| 当前文件 Top 高频词 | 最常用的词是什么,前 10 名占多少 |
| 多文件横向对比 | 各文件的 β 和 s 谁高谁低 |
读的顺序是先看拟合可信度,R² 足够高,β 和 s 才有解释的意义;再看 β 和 s 的数值和位置条;然后在两张图上看数据点贴不贴拟合线;最后用高频词表看这份文本最常用哪些词。
TATOOLS 下载的结果里,每份文件有两张表,一张是增长曲线的全部采样点,一张是完整的词频排名表,可以拿去自己作图或做进一步的统计。
09
把结果写进论文
下面是一段常见的写法示例,方括号里换成自己的内容。
本研究使用 TATOOLS 的词汇增长曲线分析,以词为单位对 [语料] 进行统计,每 [步长] 个词记录一次累计词数与不同词数,在双对数坐标下以最小二乘法拟合 Heaps 定律(V = K · N^β),得到 β = [值](R² = [值]);取频次最高的 [N] 个词拟合 Zipf 分布,得到 s = [值](R² = [值])。拟合基于包含功能词的完整词流。
论文里比较几份语料时,写明切分单位和拟合用的词数,并列出每份语料的词数和不同词数,β 和 s 的比较才站得住。
10
小结
词汇增长曲线记录读到 N 个词时出现了多少个不同的词,Heaps 定律用 V = K × N^β 描述它,β 是用词开放度。
Zipf 定律用 f = C × r^(−s) 描述词频随排名递减,s 是分布陡峭度,自然语言里常接近 1。
两条规律都在双对数坐标下用最小二乘法拟合,R² 说明数据点离拟合直线有多近。
拟合保留功能词,停用词只影响高频词表的展示,这样 β 和 s 才能和其他研究对照。
TATOOLS 每份文件各给一组 β、s 和 R²,也可以合并拟合,结果能下载成表。
想用九项指标比较几份文本的用词丰富度,可以用 TATOOLS 的【词汇多样性分析】;想找出一份语料相对另一份明显多用的词,用【语料对比关键词分析】。
11
资料来源
Zipf:Human Behavior and the Principle of Least Effort,Addison-Wesley,1949
Herdan:Type-Token Mathematics,Mouton,1960
Heaps:Information Retrieval,Computational and Theoretical Aspects,Academic Press,1978
Baayen:Word Frequency Distributions,Kluwer,2001
END
