2074 字
10 分钟
词法分析:分词、命名实体识别与词性标注

词法分析的任务#

词法分析聚焦于词汇层面,把连续的字符序列转换为带有词汇信息的符号序列。常见的三个任务是:

  1. 分词(Word Segmentation):确定词的边界。
  2. 命名实体识别(Named Entity Recognition, NER):识别文本中的实体及其类别。
  3. 词性标注(Part-of-Speech Tagging, POS):为每个词标注语法类别。

这三个任务不是孤立的:分词错误会传播到 NER 和词性标注;反过来,词性信息也能帮助消解分词歧义。现代系统常用一个序列标注模型联合完成分词和词性标注。

分词#

英文用空格天然分隔单词,中文没有显式词边界。分词首先要面对两个问题:

  1. 分词规范:什么是“词”并没有唯一答案。“北京大学”是一个词还是“北京/大学”两个词,取决于任务和应用。
  2. 切分歧义:同一串字符存在多种合法的切分方式。

两类切分歧义#

  • 交集型歧义:相邻的多个词共享字符。例如“中国人为了实现梦想”,可以切成“中国/人为”或“中国人/为了”。
  • 组合型歧义:某些词或短语组合后产生多种切分。例如“门把手弄坏了”,可以切成“门/把手”或“门/把/手”。

除此之外,还有 未登录词(Out-of-Vocabulary, OOV)问题:人名、地名、新词、网络用语等不可能全部收进词典。

基于词典的最大匹配#

最大匹配法用一个词典,每次从句子中取最长可能的词进行匹配。正向最大匹配(FMM)从句首向句尾扫描:

def max_match(sentence, dictionary):
max_len = max(len(word) for word in dictionary)
result = []
i = 0
while i < len(sentence): # i 是当前扫描位置
for length in range(max_len, 0, -1): # 先匹配长词
word = sentence[i:i + length] # 切片,算上扫描位置一共 length 个字符
if word in dictionary:
result.append(word)
i += length # 移动扫描位置
break
else:
result.append(sentence[i])
i += 1
return result

比如“我喜欢吃襄阳牛肉面” 在词典={“我”, “喜欢”, “吃”, “襄阳”, “牛肉面”} 下,FMM 会切成“我/喜欢/吃/襄阳/牛肉面”。

逆向最大匹配(BMM)从句尾向句首扫描。两种方法的分歧往往出现在歧义字段上,因此有双向最大匹配(BiMM):分别做 FMM 和 BMM,再按规则选择结果。常见的取舍规则是:

  1. 分词数量越少越好;
  2. 分词数量相同时,单字词越少越好。

最大匹配的优点和局限:

  • 优点:简单、速度快;
  • 局限:无法处理歧义和未登录词,且严重依赖词典质量。

基于统计与神经网络的分词#

统计分词把分词看作序列标注或词边界分类问题。给定字符序列,模型为每个位置预测“是否是一个词的结尾”,常用模型包括:

  • n-gram 语言模型:枚举所有切分,选择使句子概率最大的切分。
  • HMM / CRF:把分词转化为 BMES(B/M/E/S)序列标注。
  • 神经网络:BiLSTM-CRF、Transformer 等,用字符嵌入和上下文表示自动学习边界特征。

子词分词(BPE、WordPiece 等)#

子词分词是另一条路线:它不追求语言学意义上的“词”,而是把文本切成高频子词单元,从而彻底规避 OOV。这属于预训练模型的分词器设计,见 子词分词。

命名实体识别#

命名实体是句子中具有特定语义类别的片段。通用领域通常包括:

  • 人名(PER)
  • 地名(LOC)
  • 组织机构名(ORG)
  • 时间、日期、货币、数量等数值型实体

这些实体的难点不同:

  • 人名、地名、机构名:形式多样、边界模糊,是 NER 的主要难点;
  • 数值型实体:规律较强,可以用规则和正则表达式处理。

基于规则的方法#

领域专家手工编写规则、模板和实体词典,将文本与规则匹配。优点和局限:

  • 优点:启动快、可解释性强;
  • 局限:需要大量人力,移植性差,难以覆盖复杂场景。

基于统计学习的方法#

把 NER 转化为 序列标注 问题:为每个 token 分配一个标签,再由标签序列还原实体边界。常用的标注体系是 BIOES:

B (Begin) 实体开始
I (Inside) 实体内部
O (Outside) 实体外部
E (End) 实体结束
S (Single) 单独构成实体

例如“张三在北京大学读书”可以标注为:

张/B-PER 三/E-PER 在/O 北/B-ORG 京/I-ORG 大/I-ORG 学/E-ORG 读/O 书/O

常用的统计模型包括 HMM、最大熵(MaxEnt)和条件随机场(CRF)。CRF 是判别式模型,直接建模 P(Y∣X)P(Y \mid X),能够利用丰富的局部特征并保证标签序列的全局一致性,在深度学习普及之前是 NER 的主流方法。

特征工程通常包括:

  • 字符本身、前后字符、字符 n-gram;
  • 词性、词形(大小写、数字、标点);
  • 词典特征(是否出现在人名/地名列表中);
  • 上下文窗口内的词和标签。

基于深度学习的方法#

神经网络自动学习特征,常见结构是 BiLSTM + CRF 或 Transformer + CRF:

  1. 用字符/子词嵌入表示输入;
  2. 用 BiLSTM 或 Transformer 编码上下文;
  3. 用 CRF 层建模标签之间的转移约束;
  4. 用 Viterbi 算法解码最优标签序列。

深度学习方法的泛化能力强,但依赖大量标注数据,计算成本也更高。

NER 的评价#

NER 通常按 实体级别 计算精确率、召回率和 F1:预测实体与真实实体边界和类别都一致才算正确。详细的指标定义见 NLP 评价指标。

词性标注#

词性标注为每个词分配一个语法类别,如名词、动词、形容词、副词、介词等。词性是连接词法与句法的桥梁:句法分析需要知道每个词的词性,词性又依赖上下文。

词性标注集#

不同标注集的类别数量和符号不同。中文通常先分实词和虚词:

  • 实词:名词、代词、动词、形容词、数词、量词等;
  • 虚词:介词、连词、助词、语气词等。

英文常用 Penn Treebank 标注集,例如 NN(名词)、VB(动词)、JJ(形容词)、RB(副词)。

核心挑战:词性兼项#

同一个词在不同上下文中可能有不同词性。例如:

Time flies like an arrow.

“Time”可以是名词也可以是动词,“flies”可以是动词也可以是名词。词性标注必须结合上下文消歧。

标注方法#

  1. 基于规则/有限状态机:用词典和上下文规则消歧。速度快、可解释,但规则难以穷尽。
  2. 基于统计模型:HMM、最大熵、CRF 等。把词性标注看作序列标注,利用标注数据学习 P(标签序列∣词序列)P(\text{标签序列} \mid \text{词序列})。
  3. 神经网络:BiLSTM-CRF、Transformer 等,自动学习上下文表示。

统计方法常用的特征包括:

  • 当前词本身;
  • 前后窗口内的词;
  • 前一个或前几个词的词性(标签历史);
  • 词形特征(前缀、后缀、词根、大小写、数字);
  • 词频以及该词在不同词性下的频率。

分词与词性标注的联合建模#

分词和词性标注互相影响。联合模型把“词边界 + 词性”组合成一个标签集,例如用 B-NN、E-NN 表示名词的开始和结束,一次性完成两个任务,可以避免错误传播。现代预训练模型通常把分词交给子词 tokenizer,再在子词序列上做词性标注或其他序列标注任务。

相关阅读#

词法分析:分词、命名实体识别与词性标注
https://biscuit0613.github.io/posts/nlp/03-02-lexical-analysis/
作者
Biscuit
发布于
2026-10-13
许可协议
CC BY-NC-SA 4.0
GCN:图神经网络
句法分析与语义角色标注