人工智能之语言领域
第二章 语言学基础
前言:语言学基础
自然语言处理(NLP)虽是计算机科学的分支,但其根基深深扎在语言学之中。无论是分词、句法分析,还是语义理解,都离不开对人类语言结构规律的认知。本章将系统介绍 NLP 所依赖的核心语言学知识,涵盖词汇、句法、语义、语用及篇章层面,并说明这些知识如何指导实际 NLP 系统的设计与实现。
2.1 词汇学基础
2.1.1 词的构成:语素、词根、词缀
语素(Morpheme) 是语言中最小的有意义单位。
- 自由语素:可独立成词,如"书"、"跑"。
- 黏着语素:必须依附于其他语素,如中文的"们"(我们)、英语的 "-ed"(played)。
词根(Root) :承载核心语义的部分。
词缀(Affix):附加在词根上改变意义或语法功能,分为:
- 前缀(prefix):如 "un-"(unhappy)
- 后缀(suffix):如 "-ness"(happiness)
- 中缀、环缀(较少见)
🌰 中文例子:"可爱" = "可"(前缀,表可能性) + "爱"(词根)
英文例子:"unbelievable" = un- + believe + -able
词
语素
自由语素: 书, 跑
黏着语素
前缀: un-, 可-
后缀: -ed, -们
💡 NLP 应用:词形还原(Lemmatization) 和 词干提取(Stemming) 都依赖形态分析。例如将 "running" 还原为 "run"。
python
# 示例:使用 NLTK 进行英文词干提取与词形还原
import nltk
from nltk.stem import PorterStemmer, WordNetLemmatizer
nltk.download('wordnet')
stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()
word = "running"
print("Stem:", stemmer.stem(word)) # run
print("Lemma:", lemmatizer.lemmatize(word, pos='v')) # run
⚠️ 中文无严格词形变化,但需处理构词(如"老师"≠"老"+"师"语义叠加),常通过分词+词性标注间接处理。
2.1.2 词类划分:实词、虚词及其语法功能
词类(Part-of-Speech, POS) 是按语法功能对词的分类。
| 类别 | 说明 | 示例 |
|---|---|---|
| 实词 | 有实际词汇意义,可独立充当句子成分 | 名词(苹果)、动词(吃)、形容词(红) |
| 虚词 | 无实在意义,主要起语法连接作用 | 介词(在)、连词(和)、助词(的)、语气词(吗) |
常见英文 POS 标签(Penn Treebank):
NN:名词单数(dog)VB:动词原形(eat)JJ:形容词(red)IN:介词(in, on)
中文常用词性标注集(如 PKU、CTB):
n:名词(北京)v:动词(学习)a:形容词(美丽)u:助词(的、了)
python
# 示例:中文词性标注(使用 LTP 或 spaCy 中文模型)
# 这里以 jieba + 自定义规则简化演示(实际推荐使用 LAC、HanLP 或 spaCy)
import jieba.posseg as pseg
text = "我喜欢自然语言处理"
words = pseg.cut(text)
for word, flag in words:
print(f"{word} / {flag}")
输出(近似):
我 / r
喜欢 / v
自然语言处理 / nz
🔍 注:
nz表示"其他专有名词",说明未登录词识别仍是挑战。
2.1.3 词汇语义:同义词、反义词、上下位词
- 同义词(Synonyms):意义相近 → "快乐" ≈ "高兴"
- 反义词(Antonyms):意义相反 → "大" ↔ "小"
- 上下位关系(Hyponymy/Hypernymy) :
- 上位词(Hypernym):更泛化 → "水果"
- 下位词(Hyponym):更具体 → "苹果"、"香蕉"
📚 语言资源:
- 英文:WordNet(结构化语义网络)
- 中文:HowNet、同义词词林(Cilin)
python
# 示例:使用 NLTK 访问 WordNet 查找同义词集(synsets)
from nltk.corpus import wordnet as wn
nltk.download('wordnet')
syns = wn.synsets('car')
print("Synsets for 'car':", [s.name() for s in syns])
# 输出:['car.n.01', 'car.n.02', ...]
# 获取第一个同义词集的所有同义词
lemmas = syns[0].lemma_names()
print("Lemmas:", lemmas) # ['car', 'auto', 'automobile', ...]
💡 NLP 应用:语义相似度计算、问答系统中的词汇扩展、文本增强。
2.2 句法学基础
2.2.1 短语结构规则与句法树
短语结构语法(Phrase Structure Grammar) 用规则描述句子如何由短语构成。
例如英语句子生成规则:
S → NP VP
NP → Det N
VP → V NP
Det → the
N → cat, dog
V → chased
生成句子 "The cat chased the dog" 的句法树(Parse Tree):
S
NP
VP
Det: the
N: cat
V: chased
NP
Det: the
N: dog
📌 中文也适用类似结构,但语序更灵活(如话题优先)。
2.2.2 依存句法与成分句法
| 类型 | 特点 | 代表 |
|---|---|---|
| 成分句法(Constituency Parsing) | 基于短语结构,生成树状层次 | Penn Treebank |
| 依存句法(Dependency Parsing) | 以词为节点,用有向边表示语法关系 | Stanford Dependencies |
依存关系示例("我吃苹果"):
- "吃" 是根(ROOT)
- "我" → nsubj(主语)
- "苹果" → obj(宾语)
吃 ROOT
我 nsubj
苹果 obj
✅ 依存句法更简洁,适合信息抽取;成分句法更适合语言学分析。
python
# 示例:使用 spaCy 进行英文依存句法分析
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("I eat an apple.")
for token in doc:
print(f"{token.text} <--{token.dep_}-- {token.head.text}")
输出:
I <--nsubj-- eat
eat <--ROOT-- eat
an <--det-- apple
apple <--dobj-- eat
. <--punct-- eat
🌐 中文可用 LTP 、HanLP 或 spaCy + zh_core_web_sm 实现类似功能。
2.2.3 语法范畴:时态、语态、性数格
语法范畴(Grammatical Categories) 是语言中通过形态或位置表达的抽象语法属性:
| 范畴 | 说明 | 示例 |
|---|---|---|
| 时态(Tense) | 动作发生时间 | eat(现在), ate(过去) |
| 语态(Voice) | 主语与动作关系 | active(I wrote) vs passive(It was written) |
| 性(Gender) | 名词/代词的性别属性 | 法语 le(阳性)/ la(阴性) |
| 数(Number) | 单复数 | cat / cats |
| 格(Case) | 名词在句中的语法角色 | 德语 der(主格)/ den(宾格) |
📝 中文特点:
- 无严格形态变化:时态靠副词("昨天吃了")、语态靠"被"字句。
- 无数、无格、无性(除少数方言或古汉语残留)。
💡 NLP 挑战:中文需通过上下文推断时态/语态,而英文可通过动词形式直接识别。
2.3 语义学与语用学
2.3.1 语义表示:词义、句义、篇章义
- 词义(Lexical Semantics):单个词的含义(如"bank"有"河岸"和"银行"两义)。
- 句义(Sentential Semantics):句子整体真值条件(如"猫在垫子上"为真当且仅当......)。
- 篇章义(Discourse Semantics):跨句语义连贯(如代词指代、逻辑衔接)。
🧩 语义表示方法:
- 逻辑形式(Logic Form)
- 语义角色标注(Semantic Role Labeling, SRL)
- 向量空间模型(Word Embedding)
Embedding
BERT
Coreference
Word
Vector
Sentence
ContextualVector
Discourse
EntityChain
2.3.2 语用规则:语境、预设、言语行为理论
语用学(Pragmatics) 研究语言在语境中的使用。
-
语境(Context):同一句话在不同场景含义不同
"你能关窗吗?" → 不是问能力,而是请求。
-
预设(Presupposition):话语隐含的前提
"他不再抽烟了" → 预设"他以前抽烟"。
-
言语行为理论(Speech Act Theory):说话即做事
- 表述类(Assertives):陈述事实("地球是圆的")
- 指令类(Directives):请求/命令("请关门")
- 承诺类(Commissives):承诺未来行为("我明天来")
💡 NLP 应用:对话系统需识别用户真实意图(如将疑问句识别为请求)。
2.4 篇章语言学
2.4.1 篇章结构与连贯性
篇章(Discourse) 指大于句子的语言单位(段落、文章)。
- 结构:引言--主体--结论;新闻的"倒金字塔"结构。
- 连贯性(Coherence) :语义逻辑流畅
- 通过衔接手段实现:指代、省略、连接词("因此"、"然而")
📖 例子:
"张三迟到了。他错过了会议。" → "他"指代"张三",保证连贯。
2.4.2 指代消解与核心链分析
指代消解(Coreference Resolution):找出代词或名词短语指向的实体。
- 核心链(Coreference Chain):同一实体的所有提及组成一个链。
例句:
"[马云]₁ 创立了阿里巴巴。[他]₂ 是中国著名企业家。[这位创始人]₃ 改变了电商。"
→ 核心链:{[马云], [他], [这位创始人]}
python
# 示例:使用 spaCy 的神经指代消解(需安装 spacy-coref)
# 注意:官方 spaCy 不直接支持,需第三方插件或使用 transformers 模型
# 此处展示 HuggingFace 的 neuralcoref 替代方案(已归档)或使用 newer models
# 推荐使用:https://huggingface.co/facebook/bart-large-coref
# 以下为伪代码示意
from transformers import pipeline
coref = pipeline("coreference-resolution", model="facebook/bart-large-coref")
result = coref("马云创立了阿里巴巴。他是中国著名企业家。")
print(result.clusters) # [[(0,2), (5,6)], ...] 表示指代关系
🔧 实际工程中,中文指代消解仍具挑战,常用规则+模型混合方法。
2.5 语言学知识在 NLP 中的应用
2.5.1 规则制定的语言学依据
早期 NLP 系统高度依赖语言学规则:
- 分词规则:中文"动词+趋向补语"("走出去"不应切为"走/出/去")
- 句法模板:问答系统匹配"谁发明了X?" → 提取"发明者"关系
- 语义角色标注:基于 FrameNet 定义"购买"框架包含 Buyer、Goods、Money
✅ 优势:可解释性强;❌ 劣势:覆盖有限,维护成本高。
2.5.2 模型设计中的语言学启发
现代深度学习模型虽"端到端",但仍受语言学启发:
| 语言学概念 | 模型设计体现 |
|---|---|
| 层次结构 | Transformer 的多层编码器模拟短语嵌套 |
| 依存关系 | Attention 权重可近似依存弧(可视化显示) |
| 语义角色 | SRL 任务作为 BERT 的下游任务微调 |
| 篇章连贯 | Longformer、BigBird 引入长距离注意力 |
提供结构先验
Linguistics
ModelDesign
BERT
Transformer
GNN-for-Parsing
🌟 典型案例:
- Syntax-aware BERT:在预训练中加入句法距离约束
- Graph Neural Networks for Parsing:将句法树建模为图结构
中文语言学特殊性
- 无空格分词:需专门分词工具(jieba、PKUSeg、LAC)
- 意合为主:少用连接词,靠语义连贯("下雨了,带伞。")
- 量词丰富:"一本书"、"一张纸"、"一条狗"
- 话题优先:"这本书,我很喜欢"(话题"这本书"前置)
💡 NLP 建议:处理中文时,务必使用中文语言学资源(如《现代汉语语法信息词典》)。
小结
语言学为 NLP 提供了结构化认知框架 :从词的构成到篇章的连贯,每一层都对应着具体的 NLP 任务。尽管大模型弱化了显式规则,但理解语言本质 仍是设计高效、鲁棒、可解释 NLP 系统的关键。未来的方向是语言学知识与数据驱动方法的深度融合。
资料关注
咚咚王
《Python 编程:从入门到实践》
《利用 Python 进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第 3 版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow 机器学习实战指南》
《Sklearn 与 TensorFlow 机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习 +(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第 2 版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨 +&+ 张孜铭
《AIGC 原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战 AI 大模型》
《AI 3.0》