Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính

Phân tích ngôn ngữ tự nhiên và phân tích mã nguồn đều phải giải quyết một vấn đề cơ bản: từ một chuỗi đơn vị tuyến tính, xác định cấu trúc và quan hệ giữa các đơn vị đó.

Trong khoa học máy tính, quá trình này được hình thức hóa bằng các khái niệm như Lexer (bộ phân tích từ vựng), Token (đơn vị từ vựng), Parser (bộ phân tích cú pháp) và Semantic Analysis (phân tích ngữ nghĩa).

Trong ngôn ngữ học, các khái niệm tương ứng gồm 词法分析 (phân tích từ vựng), 词类 (từ loại), 句法分析 (phân tích cú pháp), 层次分析 (phân tích tầng bậc) và 语义分析 (phân tích ngữ nghĩa).

Hai hệ thống không đồng nhất. Việc đối sánh chỉ nhằm làm rõ các tầng khác nhau của quá trình phân tích.

Khoa học máy tính Ngôn ngữ tự nhiên
Source Code 语言材料
↓ ↓
Lexical Analysis 词法分析
↓ ↓
Tokens 词 / 词类
↓ ↓
Parsing 句法分析
↓ ↓
Parse Tree / AST 层次结构
↓ ↓
Semantic Analysis 语义分析

Quan hệ giữa hai hệ thống nên được hiểu là tương đồng về phương pháp phân tích, không phải quan hệ tương đương tuyệt đối.

1. Từ chuỗi tuyến tính đến cấu trúc

Mã nguồn và ngôn ngữ tự nhiên đều xuất hiện dưới dạng chuỗi tuyến tính.

Mã nguồn:

a + b * c
我 喜欢 学习 汉语
A → B → C → D
Linear Sequence
↓
Hierarchical Structure

Đây là điểm tương đồng cơ bản giữa parsing trong khoa học máy tính và 层次分析 trong phân tích ngữ pháp.

2. Lexer và 词法分析: nhận diện đơn vị

Trong compiler, Lexical Analysis nhận một chuỗi ký tự và phân chia nó thành các Token.

Characters
↓
Lexical Analysis
↓
Tokens

Ví dụ:

value + 10
IDENTIFIER("value")
PLUS("+")
INTEGER(10)

Trong phân tích ngôn ngữ tự nhiên, 词法分析 cũng phải xác định các đơn vị từ vựng và thuộc tính của chúng.

Ví dụ:

我喜欢学习汉语
我 / 喜欢 / 学习 / 汉语
我 代词
喜欢 动词
学习 动词
汉语 名词

Có thể đối sánh ở mức phương pháp:

Lexical Analysis ≈ 词法分析
Token ≈ 词法单位
Token Category ≈ 词类

Dấu ≈ biểu thị sự tương đồng phục vụ phân tích, không biểu thị hai khái niệm hoàn toàn đồng nhất.

3. Token và 词类 không xác định toàn bộ cấu trúc

Biết loại của từng Token chưa đủ để xác định cấu trúc của chương trình.

Tương tự, biết 词类 của từng từ chưa đủ để xác định cấu trúc của câu.

Một chuỗi:

Noun + Verb + Noun
Noun
├── ?
Verb
├── ?
Noun

cũng chưa xác định quan hệ ngữ nghĩa giữa ba đơn vị.

Trong ngôn ngữ tự nhiên, cùng một từ còn có thể thuộc nhiều từ loại hoặc có chức năng khác nhau tùy môi trường sử dụng. Việc xác định từ loại vì vậy cũng có thể phụ thuộc vào cấu trúc lớn hơn.

Phân loại đơn vị là điều kiện cần cho phân tích, nhưng không phải kết quả cuối cùng của phân tích.

4. Parser và 句法分析: xác định cấu trúc

Trong khoa học máy tính, Parser sử dụng Grammar để xác định cách các Token kết hợp thành cấu trúc.

Tokens
↓
Parser
↓
Syntactic Structure

Trong ngôn ngữ học, 句法分析 xác định quan hệ cấu trúc giữa các đơn vị của câu.

词
↓
句法分析
↓
句法结构

Có thể đối sánh:

Parser / Parsing ≈ 句法分析
Structure
/ \
Unit A Structure
/ \
Unit B Unit C

Điều quan trọng không nằm ở hình dạng của cây, mà ở thông tin mà cây biểu diễn:

A + B + C
(A + B) + C
A + (B + C)
Parse Tree ≈ 层次结构的形式表示
Parsing ≈ 层次关系的识别

Tuy nhiên, 层次分析 không phải AST của ngôn ngữ tự nhiên. Hai khái niệm chỉ cùng chia sẻ nguyên tắc biểu diễn cấu trúc theo tầng bậc.

6. AST và sự trừu tượng hóa cấu trúc

Abstract Syntax Tree – AST (cây cú pháp trừu tượng) giữ lại những quan hệ cấu trúc cần thiết và loại bỏ một phần chi tiết hình thức.

Ví dụ:

a + b * c
Add
├── a
└── Multiply
├── b
└── c

Giá trị của AST nằm ở việc biến một chuỗi tuyến tính thành một mô hình có quan hệ rõ ràng.

Trong phân tích ngôn ngữ tự nhiên cũng có nhu cầu tương tự. Một câu không chỉ được mô tả bằng thứ tự từ mà còn bằng cấu trúc và quan hệ giữa các thành phần.

Vì vậy, AST có thể được sử dụng như một phép đối chiếu về phương pháp biểu diễn, nhưng không phải một mô hình tương đương hoàn toàn với cấu trúc cú pháp của ngôn ngữ tự nhiên.

7. Grammar Rule và 语法规则

Trong khoa học máy tính, Grammar Rule (quy tắc ngữ pháp hình thức) xác định những cấu trúc mà Parser được phép xây dựng.

Ví dụ:

Expression → Expression + Expression
Grammar Rule ≈ 语法规则
Specification
↓
Grammar
↓
Valid Structure

Trong nghiên cứu natural language:

Language Data
↓
Observation
↓
Generalization
↓
Grammatical Description

Grammar của ngôn ngữ lập trình thường là một bộ phận của specification. Grammar mô tả của ngôn ngữ tự nhiên chủ yếu là mô hình được xây dựng từ dữ liệu ngôn ngữ.

8. Pattern không phải Grammar Rule

Pattern (mẫu cấu trúc) là một dạng hình thức có thể quan sát được trong dữ liệu.

Ví dụ tổng quát:

A + B + C
A + [B + C]
Observed Pattern
↓
Structural Hypothesis

với:

Observed Pattern
≠
Proven Structure

Trong khoa học máy tính, Parser có thể dựa trên một Grammar đã được xác định trước.

Trong nghiên cứu ngôn ngữ tự nhiên, chính Grammar thường là kết quả cần được mô tả hoặc kiểm chứng từ dữ liệu.

Đây là một khác biệt phương pháp luận quan trọng giữa hai lĩnh vực.

9. Candidate Structure: cấu trúc cần được kiểm tra

Từ một Pattern có thể hình thành một hoặc nhiều Candidate Structure (cấu trúc ứng viên).

Ví dụ một chuỗi:

A B C
[A B] C
A [B C]
Surface Pattern
↓
Candidate Structures
↓
Analysis

Việc một Candidate Structure có thể được vẽ thành cây chỉ chứng minh rằng ta đã xây dựng được một mô hình cấu trúc.

Nó chưa chứng minh mô hình đó phản ánh đúng các quan hệ trong dữ liệu ngôn ngữ.

10. Syntactic Ambiguity và 句法歧义

Syntactic Ambiguity (mơ hồ cú pháp) xuất hiện khi một biểu thức có thể được phân tích thành nhiều cấu trúc cú pháp.

Trong tiếng Trung, thuật ngữ tương ứng là 句法歧义 (mơ hồ cú pháp).

Mô hình tổng quát:

Input
├── Parse A
└── Parse B

Hai cách parse có thể sử dụng cùng:

  • từ;
  • thứ tự từ;
  • từ loại;

nhưng tạo ra các quan hệ cấu trúc khác nhau.

Do đó:

Same Tokens
≠
Same Structure

và:

Same Surface Pattern
≠
Unique Analysis

层次分析 có vai trò xác định các khả năng cấu trúc này. Tuy nhiên, cấu trúc cú pháp chưa phải tầng cuối cùng của quá trình phân tích.

11. Semantic Analysis và 语义分析

Trong compiler, Semantic Analysis kiểm tra các điều kiện mà Parser không thể xác nhận chỉ bằng cấu trúc cú pháp.

Ví dụ:

"hello" - 5
Subtract
├── String
└── Integer

nhưng vẫn bị bác bỏ nếu toán tử - không được định nghĩa cho String.

Trong ngôn ngữ học, 语义分析 (phân tích ngữ nghĩa) cũng kiểm tra thông tin mà cấu trúc hình thức đơn thuần chưa thể biểu đạt đầy đủ.

Một phân tích cú pháp phải được đối chiếu với các câu hỏi như:

  • thành phần nào mô tả thành phần nào;
  • hành động liên hệ với đối tượng nào;
  • thuộc tính được gán cho thực thể nào;
  • các thành phần có tương thích về nghĩa hay không;
  • cách phân tầng có bảo toàn cách hiểu của câu hay không.

Có thể đối sánh ở mức phương pháp:

Semantic Analysis ≈ 语义关系与语义限制的分析
A kết hợp với B
A có quan hệ gì với B?
Words
↓
Tree

mà còn bao gồm:

Words
↓
Structure
↓
Relations

Cây là phương tiện biểu diễn cấu trúc, không phải bằng chứng độc lập cho tính đúng đắn của cấu trúc đó.

13. Semantic Constraints và 语义限制

Trong khoa học máy tính, một node có thể đứng ở vị trí hợp lệ về syntax nhưng không đáp ứng semantic constraint.

Ví dụ:

Subtract
├── String
└── Integer

có hình dạng cú pháp hợp lệ nhưng có thể vi phạm yêu cầu về type.

Trong ngôn ngữ tự nhiên cũng tồn tại 语义限制 (ràng buộc ngữ nghĩa) đối với sự kết hợp giữa các thành phần.

Một Predicate có thể yêu cầu đối tượng mà nó mô tả phải có một số đặc tính ngữ nghĩa nhất định. Một Verb cũng có thể đặt điều kiện đối với các thành phần tham gia vào quan hệ mà nó biểu thị.

Có thể mô hình hóa:

Syntactic Position
↓
Semantic Requirement
↓
Compatible / Incompatible

Phép đối sánh này không có nghĩa semantic constraint của compiler và 语义限制 của natural language là cùng một cơ chế. Điểm chung nằm ở nguyên tắc:

Khả năng xuất hiện trong một cấu trúc hình thức không tự động bảo đảm tính tương thích về ngữ nghĩa.

14. Vì sao Pattern không đủ để xác nhận một phân tích?

Pattern chỉ cung cấp bằng chứng về hình thức.

Giả sử quan sát được:

A + B + C
A + [B + C]
1. B và C có tạo thành một constituent hay không?
2. Rule nào cho phép cấu trúc đó?
3. B và C có quan hệ cú pháp gì?
4. B và C có quan hệ ngữ nghĩa gì?
5. Cấu trúc này có bảo toàn interpretation của toàn biểu thức hay không?

Do đó:

Pattern Match
↓
Candidate Structure
↓
Syntactic Analysis
↓
Semantic Analysis

khác với:

Pattern Match
↓
Conclusion

Một nhãn ngữ pháp cũng không thể tự chứng minh cấu trúc mà nhãn đó giả định. Cấu trúc phải được xác lập bằng quan hệ giữa các thành phần.

15. Pattern + Structure + Semantics

Một mô hình phân tích đầy đủ hơn có thể biểu diễn:

Form
↓
Pattern
↓
Candidate Structure
↓
Syntactic Relations
↓
Semantic Relations
↓
Interpretation

Mỗi tầng trả lời một câu hỏi khác nhau.

Form (hình thức):

Những đơn vị nào xuất hiện?

Pattern (mẫu cấu trúc):

Chúng có hình thức phân bố như thế nào?

Structure (cấu trúc):

Chúng được tổ chức theo tầng bậc nào?

Syntactic Relations (quan hệ cú pháp):

Các thành phần có chức năng và quan hệ cú pháp gì?

Semantic Relations:

Các thành phần liên hệ với nhau về nghĩa như thế nào?

Interpretation (cách hiểu):

Toàn bộ cấu trúc được hiểu như thế nào trong ngữ cảnh?

Không tầng nào có thể được suy ra hoàn toàn chỉ từ tên gọi của tầng trước.

16. Bảng đối sánh

Các khái niệm chính có thể được tổng hợp như sau:

| Khoa học máy tính | Phân tích ngôn ngữ | Điểm đối sánh |

|---|---|---|

| Source Code (mã nguồn) | 语言材料 (ngữ liệu) | Dữ liệu đầu vào |

| Lexical Analysis (phân tích từ vựng) | 词法分析 (phân tích từ vựng) | Nhận diện đơn vị |

| Token (đơn vị từ vựng) | 词 / 词法单位 (từ / đơn vị từ vựng) | Đơn vị được phân tích |

| Token Category (loại token) | 词类 (từ loại) | Phân loại đơn vị |

| Parser (bộ phân tích cú pháp) | 句法分析 (phân tích cú pháp) | Xác định cấu trúc |

| Parse Tree (cây phân tích cú pháp) | 层次结构 (cấu trúc tầng bậc) | Biểu diễn quan hệ tầng bậc |

| AST (cây cú pháp trừu tượng) | Mô hình cấu trúc trừu tượng | Lược bỏ chi tiết không cần thiết |

| Grammar Rule (quy tắc ngữ pháp hình thức) | 语法规则 (quy tắc ngữ pháp) | Mô tả khả năng kết hợp |

| Syntactic Ambiguity (mơ hồ cú pháp) | 句法歧义 (mơ hồ cú pháp) | Nhiều cấu trúc cho cùng biểu thức |

| Semantic Analysis (phân tích ngữ nghĩa) | 语义分析 (phân tích ngữ nghĩa) | Kiểm tra quan hệ về nghĩa |

| Semantic Constraint (ràng buộc ngữ nghĩa) | 语义限制 (ràng buộc ngữ nghĩa) | Điều kiện đối với sự kết hợp |

Các cặp trong bảng là đối sánh phương pháp, không phải định nghĩa tương đương.

17. Giới hạn của phép đối sánh

Programming language là hệ thống được thiết kế. Natural language là hệ thống hình thành và biến đổi trong quá trình sử dụng của cộng đồng ngôn ngữ.

Compiler thường có thể hỏi:

Cấu trúc này có phù hợp với specification không?
Dữ liệu này cho thấy hệ thống đang vận hành như thế nào?
Grammar
↓
Parser
↓
Accepted / Rejected

Trong nghiên cứu ngôn ngữ tự nhiên, quan hệ thường phức tạp hơn:

Data
↓
Possible Analysis
↓
Comparison
↓
Generalization
↓
Grammatical Model

Ngữ pháp mô tả không phải mã nguồn của ngôn ngữ tự nhiên. Nó là mô hình được xây dựng để giải thích dữ liệu ngôn ngữ.

Phép đối sánh với compiler có giá trị ở phương pháp phân tầng vấn đề, không phải ở việc đồng nhất hai hệ thống.

18. Tổng kết: Form → Pattern → Structure → Semantics

Phân tích một biểu thức không kết thúc ở việc nhận ra một Pattern.

Mô hình tổng quát là:

Form
↓
Pattern
↓
Candidate Structure
↓
Syntactic Relations
↓
Semantic Relations
↓
Interpretation

Từ góc nhìn này, có thể thiết lập ba nguyên tắc:

Pattern ≠ Structure
Structure ≠ Semantic Validity
Possible Analysis ≠ Established Analysis

Một Pattern cung cấp cơ sở để đề xuất cấu trúc. Cấu trúc phải được kiểm tra bằng quan hệ cú pháp. Quan hệ cú pháp tiếp tục phải được đối chiếu với quan hệ và ràng buộc ngữ nghĩa.

Đây là điểm giao nhau quan trọng nhất giữa phương pháp phân tích của compiler và phương pháp phân tích ngữ pháp tự nhiên.

Bài tiếp theo sẽ áp dụng khung phân tích này vào một vấn đề cụ thể của ngữ pháp tiếng Hán: 主谓谓语句 (câu có vị ngữ chủ-vị) — cách xác định cấu trúc, phạm vi của thuật ngữ và những cách phân tích khác nhau trong nghiên cứu ngữ pháp hiện đại.