
语言学离不开数学这不是一句口号而是现代语言学研究里每天都在发生的事。不管你做语音学、句法学、社会语言学还是心理语言学只要涉及真实语言数据就一定会碰到信号处理、统计建模、概率推断这些数学工具。从傅里叶变换到混合效应模型这条路径几乎是当代语言学研究者绕不开的技术主线。这篇文章主要面向三类人正在读语言学专业、却搞不懂为什么课程表里有统计课的学生已经进入语言学研究、但在处理实验数据时发现 Excel 图表不足以支撑结论的年轻研究者以及做自然语言处理、语音识别等应用方向、想回头补一补基础理论的开发者。最值得关注的点是数学在语言学里不是装饰它直接决定了你能从数据里挖出什么结论也决定了你的论文结论能不能经得起同行检验。下面我不按教材顺序讲而是按照“声音数据怎么变成数字 → 数字怎么变成统计模型 → 模型怎么回答语言问题 → 中间哪些地方最容易翻车”这条实际工作路径来拆。1. 语言学里的“数学”不是选修课而是基本功1.1 语言材料的本质决定了必须用数学语言学家面对的材料本质上只有两种一段声音或一段文本。声音是连续的物理信号文本虽然看起来是离散符号但它在不同人群、不同语境下的分布又带有明显的随机性。这两种材料都有一个共同点它们不能靠肉眼直接读出规律。打开一段录音你能听到元音高低不同但你没办法直接确定这个元音的“高”到底是高到哪个频率。翻开 500 个受访者的语料你能感觉到方言差异但你说不出这个差异是不是系统性的还是抽样误差造成的。这些问题的答案只有靠数学工具才能给出。传统语言学重视描写讲究把语言现象记录下来、分类好。但描写只是第一步。当研究进入“为什么会有这种现象”“哪些因素在影响这种现象”“两个方言之间的差异是否显著”这个层面时就必须引入量化方法。这也是近二三十年国际主流语言学刊物最明显的变化一篇没有统计分析的实证论文很难通过审稿。1.2 语言学里的数学不是一门课而是一组工具包很多人听到“语言学数学”就觉得要学高数、要会证明定理。实际上语言学研究者真正高频使用的数学工具范围很明确信号处理侧的傅里叶变换、短时傅里叶变换、滤波器设计用于分析语音的频谱特性。统计推断侧的假设检验、方差分析、回归模型用于判断数据差异是否可信。进阶建模侧的混合效应模型、广义线性模型、广义可加模型用于处理语言数据的复杂嵌套结构。理论建模侧的信息论、概率论、形式语言与自动机理论用于解释语言结构本身的性质。这些工具不是每个语言学分支都要全用。做语音学的必须熟悉傅里叶变换和频谱分析做实验语言学的必须掌握混合效应模型做理论句法的可能更常接触形式化和计算复杂度做社会语言学的一定要用回归和分类模型。但无论哪个分支你都需要至少具备“理解量化结论”的能力。1.3 为什么现在才强调数学能力这不是语言学变难了而是语言学研究的方式变了。过去的研究一个学者带着录音机去乡村调查回来整理音系表就可以发表。这种田野描写工作到今天仍然重要但它已经不再是唯一的知识生产方式。现在一个社会语言学项目可能收集了 200 个受访者、每人 50 个词条的录音总时长几十个小时一个心理语言学的反应时实验可能有 80 个被试、每人几千条试次。数据量到了这个规模人工判读完全不可能必须写脚本批处理、上统计模型。另外语言现象本身是多个因素共同作用的结果。发音时长可能同时受元音类型、语境、说话人语速、前后音段、重复次数等多重因素影响。传统的单因素分析方法没法处理这种多因素交叉作用必须用回归类的模型框架。这也是混合效应模型能成为当下语言学统计主力的根本原因。一句话总结这一节数学不是语言学的对立面而是语言学家处理真实材料的“外挂器官”。没有它你连一段三秒的元音录音都讲不清楚。2. 傅里叶变换把声音变成可计算的数据2.1 声音为什么需要“拆解”声音是什么物理量从传感器角度看它是一串随时间变化的空气压力值。录音设备采样之后这段压力波就变成了一串数字序列。问题是这串数字序列本身很难直接回答语言学问题。举个例子普通话里“衣”和“乌”的差别主要在于舌位前后和圆唇与否这些发音动作最终会反映在声道的共振特性上。但如果你把“衣”和“乌”的波形放在一起看普通人根本看不出明显区别两条波形看起来都是乱七八糟的曲线。只有把这段时域波形转换到频域计算出不同频率成分的能量分布才能看出“衣”的高频共振峰位置和“乌”明显不同。这就是傅里叶变换的核心作用它把一个时域信号分解成若干个不同频率的正弦波的叠加。转换之后你能看到这段声音在哪个频率上能量最强、在哪个频率上衰减得厉害。这个“频率—能量”的谱才是语音学研究真正要用的数据形态。2.2 傅里叶变换到底做了什么用一句话概括傅里叶变换把信号从时间域变到频率域。原始录音是横轴为时间、纵轴为振幅的波形。经过傅里叶变换后你得到横轴为频率、纵轴为能量或幅度的频谱图。如果一段声音里有一个 300Hz 的成分很强频谱图在 300Hz 的位置就会出现一个峰。但这里有一个关键问题一段语音并不是稳定不动的。同一个元音在发音过程中声带的振动频率会变化共振峰位置也在动态移动。如果对整段录音做一次傅里叶变换得到的是整段时间内的平均频谱动态信息全丢了。所以语音分析里实际使用的是短时傅里叶变换STFT把声音切成许多个小窗每个窗内假设信号近似平稳再对每个窗做傅里叶变换。窗口长度是一个需要仔细设置的参数。窗口太短频率分辨率差频谱上峰不够清晰窗口太长时间分辨率差元音之间的边界就模糊了。语音分析软件默认值通常能应付大多数情况但做精细测量时建议根据研究目标手动调整。2.3 语谱图和共振峰语音标注的数学依据经过短时傅里叶变换后把所有时间窗的频谱按时间顺序拼在一起就得到语谱图。语谱图的横轴是时间纵轴是频率颜色深浅表示能量强弱。你可以直接在语谱图上看清楚一条一条的共振峰横带。这些深色横带就是共振峰理论上对应声道的共振频率。语音学里最常用的是前三个共振峰记作 F1、F2、F3。F1 和舌位高低强烈相关舌位越高F1 越低。F2 和舌位前后、圆唇程度相关舌位越靠前F2 越高。所以语图中测量 F1、F2就成了判断元音音色最可靠的操作手段。实操时要注意几点采样率要足够。做语音分析至少用 22050Hz 的采样率常见用 44100Hz。采样率太低高频共振峰信息会被截断。共振峰追踪并不总是全自动可靠的。噪声大、说话人口音特殊、音段过短都可能导致追踪错误。我一般会在批量提取之前先手动抽查几十个样本对比自动测量值和语谱图实际位置。共振峰数量设置要考虑性别和声道长度。成年男声和女声的声道长度不同同一套追踪参数不一定都适用。注意不要直接相信软件默认提取的共振峰数值。先看语谱图再听声音文件确认追踪曲线没有跳到其他频率区域再进入批量处理。这一步漏掉后面整个数据集都可能被污染。2.4 除了共振峰傅里叶变换还用在哪儿傅里叶变换在语言学里的应用远不止元音共振峰测量。它还广泛用于基频提取声带振动的基本频率即语音学里常说的 F0。普通话的声调、英语的句调主要就是靠 F0 曲线来描述的。提取 F0 也依赖频域分析。噪声分析浊音和清音的区分本质上是频谱中周期性成分和噪声成分的比例差异。语音合成与识别无论是传统滤波器组还是现代神经网络特征提取底层都离不开频域变换。方言口音比较通过比较不同说话人在相同字音上的频谱形状可以量化口音差异。可以说任何涉及“这段声音听起来像什么”的问题第一步几乎都是把声音拆到频域里。3. 语言学实验中的统计模型为什么不能只看平均数3.1 语言数据的独特之处做过语言实验的人都知道语言数据有几个让人头疼的特点。第一是嵌套结构一个说话人发了很多个字一个字可能出现在多个语境里语境又可能来自不同实验材料。数据点之间不是互相独立的同一个说话人的发音天然带有个人特质。第二是变量混杂影响了反应时的因素可能包括词频、词长、是否熟悉、上下文预测性而且这些因素彼此相关。第三是极端值多受试按错键、麦克风瞬间爆音、反应时因为走神变成 3 秒都是常见情况。这些特点决定了你不能简单地对两组数据进行 t 检验然后根据 p 值下结论。t 检验默认数据是独立的但语言数据里同一个被试的多个数据点根本不独立。直接把所有数据点当作独立样本去算会严重夸大自由度得出过于“显著”的结论。3.2 回归模型是更顺手的框架现在的语言学研究基本共识是使用回归模型。回归模型的核心逻辑是你有一个因变量比如反应时、元音时长、共振峰频率还有一组自变量比如词频、语境类型、被试年龄、方言背景模型试图用这些自变量来解释因变量的变化。最简单的线性回归数学形式其实不难理解因变量 截距 系数1 × 自变量1 系数2 × 自变量2 … 误差项每个系数表示在其他变量不变的情况下这个自变量每变化一个单位因变量平均变化多少。这个框架比传统方差分析灵活得多因为你可以同时放入连续变量和分类变量也可以加入交互项来考察两个变量是否共同影响结果。3.3 回归模型输出里该看什么用 R 或 Python 跑完回归后你会得到一张系数表。新手容易只盯着星号看显著不显著但有经验的用户会先看这几个东西系数方向是否符合理论预测。比如词频越高反应时越短系数的正负号应该在合理方向。系数大小是否有实际意义。一个变量的系数是 0.001 毫秒即使显著也说明影响微弱。模型整体拟合情况比如 R 方或条件 R 方用来判断模型解释了多少变异。残差分布是否正常。如果残差呈现明显喇叭状说明方差齐性假设可能不满足。有没有多重共线性问题。两个高度相关的自变量同时放进模型系数会被互相拉扯很难解读。很多新手把“显著”当作研究的终点实际上显著只是起点。一个显著的效应还要继续追问效应量多大稳健性如何换个说话人群体还会不会出现这些问题靠一次回归是回答不完的。4. 混合效应模型处理个体差异的王牌工具4.1 固定效应和随机效应的区别混合效应模型英文是 mixed-effects model也叫多水平模型或分层模型。名字里的“混合”指的是模型同时包含固定效应和随机效应。固定效应是你关心的、希望在研究中重复验证的变量比如实验条件、词频、声调类型。随机效应是你不想逐一解释、但必须纳入考虑的背景变量最常见的两个是“被试”和“项目”刺激材料。为什么要设随机效应道理很直接不同被试的反应时基线不一样。有人整体快有人整体慢。如果模型不把被试差异纳入考虑那么一个恰好来了几位反应极快被试的实验组就可能被误判为“条件更有效”。反过来项目的差异也要处理。有些词特别常用反应天然快有些词生僻反应天然慢。这些差异不归因于你的实验操作但你要把它们“吸收”掉才能把真正的实验效应从噪声里分离出来。4.2 一个实际的模型长什么样以语音研究为例。假设你要研究普通话声调对元音时长的影响邀请了 30 位说话人每人读 100 个单字。因变量是元音时长自变量是声调类型。如果你把所有数据混在一起跑 ANOVA等于假装每一个字音都来自一个全新的、彼此无关的说话人这明显不符合数据真实结构。正确的做法是建立一个混合效应模型把说话人当作随机截距library(lme4) model1 - lmer( duration ~ tone (1 | speaker) (1 | item), data speech_data )这个公式的意思是duration 是因变量即元音时长tone 是固定效应我们想知道不同声调是否带来时长差异(1 | speaker) 表示每个说话人拥有自己独立的基线水平(1 | item) 表示每个字或词语也有自己独立的基线。跑完模型后你想知道声调是否显著影响时长。可以先做似然比检验比较包含 tone 和不包含 tone 的两个模型model0 - lmer(duration ~ 1 (1 | speaker) (1 | item), data speech_data) anova(model0, model1, test Chisq)如果检验的 p 值小于设定的显著性水平才能说声调对时长的效应是统计上可靠的。4.3 随机斜率需要时再上但别当摆设很多刚接触混合效应模型的人把模型简化成了“(1 | speaker) (1 | item)”这一个老配方。这在多数场景下够用但有一个潜在风险它假设声调对不同说话人的效应大小是完全一样的。这显然不一定成立。声调可能对一部分说话人影响大对另一部分说话人影响小。如果你只放随机截距这些个体化的斜率差异就会被强行压到误差里可能导致标准误估计偏小结论偏乐观。更完整的做法是为关键固定效应按被试设置随机斜率model2 - lmer( duration ~ tone (1 tone | speaker) (1 | item), data speech_data )但随机斜率的代价是模型变复杂收敛难度上升而且数据量不足时容易过度参数化。实际使用时我的建议是如果你的设计是重复测量设计且每个被试在每个条件下都有多次观测那就值得尝试随机斜率如果某个被试在某个条件下缺失数据模型可能不收敛那就退回随机截距模型并在论文里说明。混合效应模型的真正价值是让你不再“把个体差异当作麻烦而是当作结构”。个体差异不再是噪声而是模型显式承认的层级结构。这也是它成为当代实验语言学标准方法的原因。5. 不止傅里叶和混合效应更广的数学工具图谱5.1 信息论语言结构可以用“熵”衡量信息论在语言学里的应用最早可以追溯到香农对英语文本信息量的估计。信息论里最重要的概念是熵entropy用来衡量一个系统的不确定程度。在语言学里熵的应用场景很直观。一个位置的词预测性越高它的信息量就越低。拼音输入法的候选排序、语音识别里的语言模型打分、心理语言学里对阅读时间的预测背后都是同一个逻辑高频、高预测性的词认知加工成本更低。现在很多阅读实验研究会把词在语料库中的信息量以比特为单位作为预测变量放进回归模型用来判断“阅读时间是否受信息量驱动”。这已经是心理学和语言学的交叉前沿而且比单纯的词频指标更精细因为它同时考虑了上下文。5.2 贝叶斯统计从“显著性”走向“可信区间”频率学派统计以 p 值为核心在语言学界仍是主流但贝叶斯方法正在快速渗透。贝叶斯方法的优势在于它可以直接给出参数的后验分布你可以说“这个效应有多大概率落在这个区间内”而不是只能给出一个容易误读的 p 值。语言数据往往样本量不大、数据结构复杂贝叶斯方法处理这类数据更加灵活。R 里的 brms 包就是专门用来跑贝叶斯混合效应模型的语法和 lme4 非常接近上手门槛不算太高。当然贝叶斯方法也有自己的成本先验怎么设、链是否收敛、运算时间比频率派方法长不少。如果不是特别需要可以先从频率派混合效应模型入手等熟悉了再扩展。5.3 广义可加模型与曲线类数据语言数据里有一类特别常见的形态非线性曲线。比如一个音节的基频曲线、共振峰轨迹、阅读时的眼动路径。这些数据不是单一数值而是一条随时间变化的曲线。传统回归模型处理曲线数据比较吃力除非你把曲线切割成多个时间点分别建模但那样又会造成多重比较问题。广义可加模型GAM就能很好地处理这种情况。它允许因变量和自变量之间的关系是平滑的非线性函数直接对整条曲线建模。R 里的 mgcv 包加上专门为时变数据设计的 itc 扩展包在语调研究和语音韵律研究里越来越常用部分国际期刊甚至已经开始要求声明 GAM 的平滑项参数选择过程。5.4 计算语言学与形式语言理论如果你走的是计算语言学方向数学工具更不可能缺。上下文无关文法、自动机理论、乔姆斯基层级这些概念本质上是数学结构。统计语言模型里的 n-gram 概率、隐马尔可夫模型、条件随机场全部依赖概率论和线性代数。这几年大语言模型兴起之后词向量、注意力机制、Transformer 这些概念的背后都是矩阵运算和高维空间几何。虽然很多语言学专业的学生不需要亲手实现这些模型但理解它们的基本数学原理有助于判断模型的输出为什么是这个样子以及在哪些情况下模型会系统性出错。6. 完整实操链路从录音到统计模型6.1 实验设计和数据采集阶段就要想好数学很多人到了数据分析阶段才想起统计问题这是最容易走弯路的地方。一位语言学专业学生如果在实验设计阶段没有考虑“我需要多少个说话人、每个人读多少材料、材料怎么平衡”后面跑模型时往往会发现效应不显著但说不清是效应真的不存在还是统计功效不足。参考经验值是做反应时实验每个条件下每个被试至少有 20 到 30 个试次做语音产出实验每个条件和每个说话人的组合至少要保证 5 到 10 个重复。样本量不是越大越好因为每个说话人的录音和分析都要花费大量人工时间但太少又会导致模型无法收敛。建议先做一次小规模预实验用预实验数据估算效应量再决定正式实验规模。6.2 从录音到声学参数常用工具链语音分析最常用的工具是荷兰阿姆斯特丹大学开发的 Praat免费、跨平台、可脚本化。基本操作流程如下录音或获取现有语料库音频格式建议用 WAV采样率 44100Hz 或 22050Hz。在 Praat 里打开文件生成 TextGrid标记每个音段的起始和时间点。这一步可以手动标注也可以用自动对齐工具辅助但边界需要人工检查。提取 F0、共振峰、时长、强度等声学参数。可以用 Praat 的菜单操作也可以用脚本批量处理。批量处理一定要加异常值标记比如基频提取失败时返回的 undefined 值。如果没有手写脚本的习惯可以先录制一个 Praat 脚本或者使用现成的开源脚本比如收集数据时给每个文件命名的格式建议包含说话人编号、性别、方言点和材料编号比如SP012_F_SH_032.wav。命名规范了后面合并数据时会省非常多的体力。6.3 数据处理清洗永远先于建模拿到一堆声学参数后第一件事不是建模而是清洗。清洗包括检查缺失值Praat 提取失败的参数会被标为 undefined要决定是删除还是插补。检查极端值时长超过 3 秒的元音、F0 低于 50Hz 的高尖峰多半是提取错误建议先删除再跑核心分析。检查数据分布连续变量最好画直方图看是否严重偏态。偏态明显的可以取对数变换再入模型。确认数据结构每个说话人有多少数据点、每个条件下是否平衡这些信息要和实验记录比对。注意数据清洗的每一步都要留痕。删除多少样本、为什么删除、删除后模型结论是否有变化这些信息写论文时需要如实报告。审稿人对“选择性删除样本”非常敏感。6.4 建立你的第一个混合效应模型假设你最终的数据表叫phonetics.csv包含列speaker、item、tone、duration。用 R 的典型流程是library(lme4) library(lmerTest) library(emmeans) data - read.csv(phonetics.csv) model - lmer( duration ~ tone (1 | speaker) (1 | item), data data ) summary(model)lmerTest包会额外给出固定效应的 p 值适合习惯显著性的研究者。如果模型出现“模型收敛失败”警告优先做这几件事看数据量是否太少看自变量是否高度共线看随机效应结构是否过于复杂使用lmerControl(optimizer bobyqa)尝试换优化器对自变量做中心化处理。跑完模型后如果 tone 效应显著再用 emmeans 包做事后两两比较。注意多水平比较的结果也要做多重比较校正不能只看原始 p 值。6.5 结果解读时最容易犯的错误统计结果出来了不等于研究做完了。解读阶段最大的坑是因果推断过度。混合效应模型本质上是观测数据的相关性建模你做的是实验设计也好、语料库分析也好都要小心受访者只是语言使用者不是被操纵的实验对象。语料库数据里的相关关系不等于因果关系。另外不要只报告“显著”和“不显著”。现在很多期刊要求同时报告效应量、置信区间或贝叶斯因子。你的结论里至少要说清楚声调对时长的影响有多大具体是哪些声调之间有差异差异有多大毫秒个体差异在多大程度上影响结果。这些信息才能让读者判断你的结论是不是重要的。7. 常见瓶颈与学习路径建议7.1 模型不收敛时先别急着怪数据模型不收敛是混合效应模型最常被讨论的问题。网上最常见的建议是“简化随机结构”。这个思路没错但简化之前先检查几件事自变量是否需要中心化。交互项加入后变量间的相关性可能骤增中心化可以明显改善收敛。数据中是否有大量缺失组合。如果某个被试在某个条件下没有数据随机斜率就可能无法估计。是否使用了过小数的小数精度。有时把变量单位从毫秒改成秒数值范围变小优化器就更容易收敛。是否真的需要最复杂模型。并不是所有随机斜率都必须保留关键是看你的实验设计是否支撑得起这个复杂度。如果以上都检查过还是收敛失败那就在论文里报告“简化版模型因为它能收敛完整版模型结果方向一致但收敛失败”。这不是丢人的事透明报告是学术界的正确做法。7.2 数学基础薄弱从哪里补语言专业背景的学生看到矩阵和积分容易犯怵。但按语言学研究的实际需求你不需要学完数学系的所有内容。推荐的学习顺序是先学会看公式结构不要求会推导。理解一个线性公式中每个符号代表什么。补概率论基础随机变量、分布、均值、方差、相关和回归。这些是统计模型的基石。学一点线性代数的直观理解矩阵就是一张数据表矩阵乘法就是多个变量同时变换不需要做大量计算题。边用边学统计建模先跑最简模型再看文档、看报错、搜别人怎么解决比先从教材第一页读到最后一页更有效。声音处理方向额外补信号与系统重点是傅里叶变换的物理意义和语谱图读法。实操层面R 是当前语言学统计的主流平台原因是生态完善lme4、brms、mgcv、tidyverse 这些包让从数据清洗到建模的链路非常顺畅。建议每天花半小时读一份公开语音语料库的文档说明再对照 R 教程跑一遍一个月能建立基本手感。7.3 语言学的数学还有一个“看不见”的作用数学不仅给语言学提供工具还在影响语言学的问题意识。当你知道可以用混合效应模型拆解个体差异时你就不会再满足于“有一个发音特别标准的人这么发”这种孤例观察。当你知道可以用信息论量化语境预测性时你就不再只关心语法正确与否而会关心“为什么这个结构在真实使用中更常出现”。数学训练最大的回报是帮你建立一种“数据感”知道什么结论站得住什么结论只是巧合。不少年轻研究者对数学的抗拒其实来自对“做错计算”的恐惧。但语言学研究里的数学不是纸面演算而是与数据对话。模型结果不符合预期不一定是你算错了可能是数据告诉你之前忽略了一个变量p 值不显著也不一定是研究失败可能意味着效应本身很小或者样本量不足。这种把异常结果当作线索而不是失败的心态比背会任何公式都重要。回到最初的问题语言学为什么离不开数学因为语言本身就是一个在物理、认知、社会三个层面同时展开的现象。物理层面需要信号处理认知层面需要实验设计和统计推断社会层面需要模型来厘清群体差异和个体差异。傅里叶变换帮你看见声音里的结构混合效应模型帮你从人与人的差异中挑出真正的语言规律。它们不是语言学的外来入侵者而是这门学科走向精确化、可验证化时自然长出来的工具。如果你现在正准备开始一个语言实验我最具体的建议是先下载一个语料库样本用 Praat 提取一个元音的共振峰再在 R 里跑一个最简混合效应模型哪怕用的不是你自己采集的数据。把这条链路完整走通一遍你对“语言学为什么需要数学”这个问题就有了比任何教材都更实在的答案。