自然语言分析与原始码分析都需要处理一个基本问题:如何从线性的单位序列中,确定各单位之间的结构与关系。
在电脑科学中,这一过程可以用 Lexer(词法分析器)、Token(词法单位)、Parser(语法分析器)、Semantic Analysis(语义分析)等概念描述。
在语言学中,相应的分析概念包括词法分析(lexical analysis)、词类(part of speech)、句法分析(syntactic analysis)、层次分析(hierarchical analysis)与语义分析(semantic analysis)。
两套系统并不等同。本文的对照只用于区分分析过程中的不同层次。
两者之间的关系应理解为分析方法上的相似性,而不是概念上的完全等价。
1. 从线性序列到层次结构
原始码与自然语言在表层上都表现为线性序列。
原始码:
这是电脑科学中的 Parsing 与语言分析中的层次分析之间最基本的共同点。
2. Lexer 与词法分析:辨识单位
在 Compiler(编译器)中,Lexical Analysis 将字元序列划分为 Token。
例如:
自然语言的词法分析同样需要辨识词法单位及其属性。
例如:
在分析方法上,可以作如下对照:
符号 ≈ 表示分析方法上的相似性,不表示两个概念完全相同。
3. Token 与词类不能决定完整结构
知道每个 Token 的类型,不足以确定程式的完整结构。
同样,知道每个词的词类,也不足以确定句子的结构。
例如:
也不能确定三个单位之间的语义关系。
在自然语言中,同一个词还可能具有不同的词类或句法功能,具体判断可能依赖更大的结构与语境。
因此,单位分类是分析的基础,但不是分析的最终结果。
4. Parser 与句法分析:确定结构
在电脑科学中,Parser 根据 Grammar(形式文法)分析 Token,确定它们如何形成结构。
在语言学中,句法分析用于确定句中各单位之间的结构关系。
在方法上可以表示为:
重要的不是树本身的形状,而是树所表示的结构资讯。
例如:
但是,层次分析并不是自然语言的 AST。两者只是共享以层次方式表示结构的基本思想。
6. AST 与结构抽象化
Abstract Syntax Tree,AST(抽象语法树)保留重要的结构关系,同时省略部分不再需要的形式细节。
例如:
AST 的作用之一,是把线性序列转换成具有明确关系的结构模型。
自然语言分析也需要区分表层词序与内部结构。句子的分析不能只记录词语出现的先后顺序,还需要表示各成分之间的结构关系。
因此,AST 可以作为结构表示方法上的对照,但不能直接等同于自然语言的句法结构。
7. Grammar Rule 与语法规则
在电脑科学中,Grammar Rule(形式文法规则)规定 Parser 可以建立哪些结构。
例如:
在 Natural Language(自然语言)的研究中:
程式语言的 Grammar 通常是 Specification(规格)的一部分。自然语言的描述语法则主要是研究者根据语言资料建立的分析模型。
8. Pattern 不等于 Grammar Rule
Pattern 是在资料中可以观察到的形式模式。
例如:
与:
在电脑科学中,Parser 通常可以依据已经确定的 Grammar 进行分析。
在自然语言研究中,Grammar 本身往往正是需要根据资料建立、描述或检验的模型。
这是两种分析方法之间的重要差异。
9. Candidate Structure:需要检验的结构
一个 Pattern 可以产生一个或多个 Candidate Structure(候选结构)。
例如:
能够把某个 Candidate Structure 画成树,只表示分析者已经建立了一个可能的结构模型。
它本身不能证明该模型正确反映了语言材料中的实际关系。
10. Syntactic Ambiguity 与句法歧义
Syntactic Ambiguity(句法歧义)是指同一个表达形式可以具有多种句法分析。
一般模型为:
不同分析可以具有完全相同的:
- 词语;
- 词序;
- 词类;
但建立不同的结构关系。
因此:
以及:
层次分析可以用来确定这些不同的结构可能性。但是,句法结构仍然不是分析的最后一个层次。
11. Semantic Analysis 与语义分析
在 Compiler 中,Semantic Analysis 用于检查 Parser 仅依靠句法结构不能确定的限制。
例如:
但如果 - 没有被定义为可以作用于 String,这个表达式仍然会被拒绝。
在语言学中,语义分析同样处理形式结构本身不能完整回答的问题,例如:
- 哪个成分描述哪个成分;
- 动作与哪些参与者发生关系;
- 属性被赋予哪个对象;
- 各成分在意义上是否相容;
- 某种层次分析是否保存了整个表达式的解读。
在方法上,可以作如下对照:
而是:
树是表示结构的工具,不是证明某一结构分析正确的独立证据。
13. Semantic Constraints 与语义限制
在电脑科学中,一个 Node(节点)可以出现在句法允许的位置,却不符合 Semantic Constraint(语义限制)。
例如:
可以具有合法的句法形状,但可能违反 Type(型别)要求。
自然语言中,各成分之间的组合也受到语义限制。
某个 Predicate(谓词)可能要求它所描述的对象具有特定的语义性质。某个 Verb(动词)也可能对参与其语义关系的成分提出一定条件。
可以抽象表示为:
这并不表示 Compiler 的 Semantic Constraint 与自然语言中的语义限制具有完全相同的机制。
共同原则是:
能够出现在某个形式结构中,不等于在语义上必然相容。
14. 为什么 Pattern 不足以确认一种分析?
Pattern 只提供形式上的资讯。
假设观察到:
因此:
不能简化为:
语法名称本身也不能证明该名称所预设的结构。结构必须由成分之间实际存在的关系来支持。
15. Pattern + Structure + Semantics
较完整的分析模型可以表示为:
每一层处理不同的问题。
Form(形式)
出现了哪些单位?
Pattern(模式)
这些单位具有什么形式分布?
Structure(结构)
这些单位具有什么层次组织?
Syntactic Relations(句法关系)
各成分具有什么句法功能与关系?
Semantic Relations
各成分在意义上如何互相关联?
Interpretation(解读)
整个结构在具体语境中如何被理解?
后一层不能仅依靠前一层的名称自动推导出来。
16. 概念对照
| 电脑科学 | 自然语言分析 | 对照重点 |
|---|---|---|
| Source Code(原始码) | 语言材料 | 输入资料 |
| Lexical Analysis(词法分析) | 词法分析 | 辨识单位 |
| Token(词法单位) | 词 / 词法单位 | 分析单位 |
| Token Category(Token 类型) | 词类 | 单位分类 |
| Parser(语法分析器) | 句法分析 | 确定结构 |
| Parse Tree(语法分析树) | 层次结构 | 表示层次关系 |
| AST(抽象语法树) | 抽象结构模型 | 省略非必要形式细节 |
| Grammar Rule(形式文法规则) | 语法规则 | 描述组合可能性 |
| Syntactic Ambiguity(句法歧义) | 句法歧义 | 同一形式存在多种结构 |
| Semantic Analysis(语义分析) | 语义分析 | 分析意义关系 |
| Semantic Constraint(语义限制) | 语义限制 | 对组合施加条件 |
表中的各组概念都是方法上的对照,不是完全等价的定义。
17. 对照模型的限制
Programming Language 是人为设计的形式系统。Natural Language 则是在语言共同体的使用与历史演变中形成的系统。
Compiler 通常可以提出:
而在自然语言研究中,关系通常更加复杂:
描述语法不是自然语言的「原始码」。它是研究者为解释语言资料而建立的模型。
Compiler 的对照价值主要在于区分分析层次与分析步骤,而不是把两种系统视为相同。
18. 总结:Form → Pattern → Structure → Semantics
分析一个语言表达式,不能停留在辨识 Pattern。
完整的分析过程可以抽象为:
可以由此得到三个基本原则:
Pattern 可以提供提出结构假设的依据。结构需要由句法关系支持,句法关系还需要与语义关系及语义限制相互验证。
这是 Compiler 分析方法与自然语言语法分析之间最重要的方法论交集。
下一篇将把这一分析框架应用于现代汉语中的具体语法问题:主谓谓语句(subject-predicate predicate sentence),讨论这一术语的定义、判定条件、分析范围以及不同语法分析之间的差异。