自然語言分析與原始碼分析都需要處理一個基本問題:如何從線性的單位序列中,確定各單位之間的結構與關係。
在電腦科學中,這一過程可以用 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),討論這一術語的定義、判定條件、分析範圍以及不同語法分析之間的差異。