一、序列标注的核心概念

1.定义与核心逻辑

序列标注是自然语言处理(NLP)中的基础任务,核心是对输入序列的的每个时间步(token)进行分类,输出对应的标签序列

  • 输入:长度为 n 的序列 X = [X_1, X_2, ..., X_n](如汉字、单词、字符等);

  • 输出:长度相同的标签序列 Y = [Y_1, Y_2, ..., Y_n](如边界标签、实体类型标签等)。

本质是建立“输入token -> 输出标签”的映射关系,且考虑序列的上下文关联性(如一个token的标签依赖于前后token的标签)

2.典型的应用场景

序列标注是众多NLP任务的底层支撑,核心应用包括

  • 中文分词:判断每个字是否为词边界;

  • 词性标注:标注每个词的语法属性(如名词、动词);

  • 句法分析:标注句子成分(如主语、谓语);

  • 命名实体识别(NER):识别文本中的人名、地名、机构名等实体;

  • 文本加标点:为无标点文本自动添加标点(粗粒度分词);

  • 句子级分类:对段落中的每句话进行类别标注。

二、核心应用场景

1.中文分词(基于序列标注)

(1)标注体系

通过标签定义词的边界和内部结构,常用标签集:

  • B(Begin):词的左边界;

  • E(End):词的右边界;

  • M(Middle):词的内部;

  • S(Single):单字成词。

(2)标注约束

  1. B后面不能直接跟S

  2. M后面不能跟S

  3. S后面不能跟M或E

(3)示例

输入文本:“跟着 Tfboys 学左手右手一个慢动作”

标注结果:跟 / B 着 / E Tfboys/S 学 / S 左 / B 手 / E 右 / B 手 / E 一 / B 个 / E 慢 / B 动 / M 作 / E

后处理结果:跟着 Tfboys 学 左手 右手 一个 慢动作

2.命名实体识别(NER)

(1)标注体系

针对不同实体类型(地址、机构、人名)设计专属边界标签,避免混淆:

  • 地址:BA(左边界)、MA(内部)、EA(右边界);

  • 机构:BO(左边界)、MO(内部)、EO(右边界);

  • 人名:BP(左边界)、MP(内部)、EP(右边界);

  • O:无关字(非实体)。

(2)示例

输入文本:“花园北路的北医三院里,昏迷三年的我听杨幂的爱的供养时起身关了收音机”

标注结果:花 /BA 园 /MA 北 /MA 路 /EA 的 /O 北 /BO 医 /MO 三 /MO 院 /EO 里 /O 杨 /BP 幂 / EP 的/O 爱/O 的/O 供/O 养/O 时/O 起/O 身/O 关/O 了/O 收/O 音/O 机/O 。/O

后处理结果:{花园北路 / Address} 的 {北医三院 / Org} 里,昏迷三年的我听 {杨幂 / PersonName} 的 爱 的 供 养 时 起 身 关 了 收 音 机 。

3.文本加标点任务

  • 背景:语音识别、机器翻译的输出常无标点,需自动补全以提升可读性;

  • 本质:粗粒度分词任务,通过序列标注判断 “是否需要添加标点”(如逗号、句号、感叹号);

  • 价值:降低文本阅读成本,为后续 NLP 任务(如句子级分类)提供基础。

4.句子级序列标注

  • 任务逻辑:对段落中的每句话进行分类(如情感类别、主题类别);

  • 流程:paragraph→sentence→token,先拆分句子,再对每个句子向量化,最后进行序列标注;

  • 特点:颗粒度比 token 级标注更粗,聚焦句子整体属性。

三、技术实现方案

1.基于深度学习的基础框架

核心思路:通过神经网络将每个token向量化,捕捉上下文特征后预测标签

  • 核心组件:常用BLSTM(双向长短期记忆网络)作为特征提取器,能同时利用前向和后向上下文信息
  • 流程:token->embedding(词嵌入)->BLSTM(特征提取)->标签分类

2.CRF(条件随机场)

CFR是序列标注的核心模块,解决“标签上下文依赖”问题(如 “B” 后不能直接接 “B”,需接 “M” 或 “E”),常与BLSTM结合使用(BLSTM-CRF)

(1)核心定义

  • 目标:找到使概率p(y|X;\theta )最大的标签序列y
  • 关键概念:

    • 发射矩阵(Emitter Matrix):shape 为「序列长度 × 标签数」,表示每个 token 对应每个标签的概率;

    • 转移矩阵(Transition Matrix):shape 为「标签数 × 标签数」,表示从一个标签转移到另一个标签的概率;

    • 归一化项Z(X):确保概率之和为 1;

    • 特征函数f(y_{i-1}, y_i, X_i):捕捉标签转移和 token 特征的关联。

(2)转移矩阵示例

以 “人名(Person)” 和 “机构(Organization)” 为例,转移矩阵中的值表示标签间转移的概率(或权重):

从 \ 到 START B-Person I-Person B-Org I-Org END
START 0 0.8 0.007 0.7 0.9 0.08
B-Person 0.9 0.0006 0.6 0.009 -1 0.5
I-Person 0.0003 0.008 ... ... ... ...

注:负值表示该转移几乎不可能(如 B-Person 后直接接 END)。

(3)Loss计算

  • 核心逻辑:最大化正确标签序列的对数概率,最大化loss
  • 公式:

输入序列X,输出序列为y的分数:

s(X,y) = \sum_{i=0}^{n}A_{y_i,y_{i+1}}+\sum_{i=1}^{n}P_{i,y_i}

输入序列X,预测输出序列为y的概率:

p(y|X)=\frac{e^{s(X,y)}}{\sum_{\widetilde{y}\in Y_X}e^{s(X,\widetilde{y})}}

对上式取log,目标为最大化该值

对上式取相反数做loss,目标为最小化该值:

3.解码算法(序列预测阶段)

解码是根据模型输出(发射矩阵+转移矩阵)找到最优标签序列的过程,常用两种算法

(1)维特比解码(Viterbi Decoding)

  • 核心思想:动态规划,通过“局部最优->全局最优”,在每个时间步记录最优路径
  • 复杂度:O(n*D_2)(n为序列长度,D为标签数)
  • 特点:高效,精确,是序列标注的首选解码算法

(2)束搜索(Beam Search)

  • 核心思想:每一步保留概率最高的B个路径(B为束宽),避免局部最优陷阱
  • 复杂度:O(n*D*B)(B为束宽,通常B\leq 10
  • 特点:比维特比更灵活,适合复杂序列,但需权衡束宽(B越大,复杂度越高)

(3)效率对比

算法 复杂度 特点
穷举路径 O(D^n) 复杂度极高,不可用
维特比解码 O(nD^2) 高效、精确,首选
束搜索 O(nDB) 灵活,适合复杂场景

4.基于规则的方法

(1)核心逻辑

通过正则表达式、词表匹配等规则直接标注序列,无需训练模型。

  • 适用场景:规则能明确覆盖的简单任务(如匹配手机号、邮箱、固定格式的实体);

  • 优势:无需标注数据,速度快,解释性强;

  • 原则:“规则能处理好的,尽量不用模型”。

(2)正则表达式基础

正则表达式是规则方法的核心工具,用于描述字符串匹配模式,关键要素包括:

类型 示例与说明
基础匹配 ab:匹配字符串中的 “ab” 子串(re.search("ab", "abb")返回 True)
位置匹配 ^ab:匹配字符串开头的 “ab”(re.match("ab", "abb")返回 True)
元字符 \d:匹配数字,\s:匹配空白字符,\w:匹配字母 / 数字 / 下划线
量词 *(0 次及以上)、+(1 次及以上)、?(0 次或 1 次)、{n,m}(n-m 次)
贪婪 / 非贪婪 n.*w(贪婪,匹配最长符合串)、n.*?w(非贪婪,匹配最短符合串)
修饰符 re.I(大小写不敏感)、re.M(多行匹配)、re.S.匹配换行)

(3)常用正则函数

  • re.search(pattern, string):查找字符串中是否存在匹配 pattern 的子串;

  • re.match(pattern, string):判断字符串开头是否匹配 pattern;

  • re.findall(pattern, string):返回所有匹配的子串列表;

  • re.sub(pattern, repl, string):替换匹配的子串;

  • re.split(pattern, string):按匹配的子串分割字符串。

四、评价指标

序列标注的评价需区分 “token 级准确率” 和 “实体级准确率”,核心指标如下:

1. 基础指标(实体级)

实体需完整命中(边界和类型均正确)才算有效,指标定义:

  • 准确率(Precision):P = \frac{TP}{TP + FP}(预测为正且实际为正的实体数 / 所有预测为正的实体数);

  • 召回率(Recall):R = \frac{TP}{TP + FN}(预测为正且实际为正的实体数 / 所有实际为正的实体数);

  • F1 值:F1 = 2 \times \frac{P \times R}{P + R}(平衡准确率和召回率,核心评价指标)。

2. 宏平均(Macro-F1)与微平均(Micro-F1)

  • Macro-F1:对所有类别的 F1 值取算术平均,不考虑类别样本数量差异;

  • Micro-F1:将所有类别的 TP、FP、FN 合并计算 P 和 R,再求 F1,受样本量大的类别影响更大;

  • 适用场景:类别样本不均衡时,Micro-F1 更能反映整体性能,Macro-F1 更关注小众类别的表现。

五、进阶拓展与问题解决

1. 实体标签重叠问题

(1)问题描述

同一文本片段可能属于多个实体类型(如 “北京博物馆” 既是 “地点” 也是 “机构”):

  • 输入:“我周末去了北京博物馆看展览”;
  • 地点标注:北 / B 京 / E 博 / O 物 / O 馆 / O(简化);
  • 机构标注:北 / B 京 / M 博 / M 物 / M 馆 / E。

(2)解决方案

  • 独立模型法:为每种实体类型训练单独的序列标注模型,避免标签冲突;
  • 生成式模型法:直接生成实体及其类型,而非依赖标签序列,从根源上解决重叠问题。

2. 事件抽取(序列标注的高阶应用)

事件抽取是 “结构化信息提取” 任务,核心是从文本中识别事件(如地震、融资、夺冠)及相关要素(角色),本质是基于序列标注的复杂扩展。

(1)核心概念

  • 触发词(Trigger):触发事件的核心词(如 “地震”“融资”);
  • 事件类型(Event Type):事件的具体类别(如 “灾害 / 意外 - 地震”“财经 / 交易 - 融资”);
  • 事件角色(Argument Role):事件的组成要素(如 “时间”“地点”“融资方”“融资金额”)。

(2)示例

输入文本:“泰安今早发生 2.9 级地震!靠近这个国家森林公园”事件抽取结果:

{
  "event_list": [
    {
      "trigger": "地震",
      "trigger_start_index": 10,
      "class": "灾害/意外",
      "event_type": "灾害/意外-地震",
      "arguments": [
        {"role": "时间", "argument": "今早", "argument_start_index": 2}
      ]
    }
  ]
}

(3)常见事件类型与角色

类别 事件类型 核心角色
财经 / 交易 融资 时间、融资方、融资金额、融资轮次、领投方
产品行为 发布 时间、发布方、发布产品
交往 会见 时间、地点、会见主体、会见对象
竞赛行为 夺冠 时间、冠军、夺冠赛事

3. 远程监督(弱监督标注方法)

(1)核心假设

若知识库中两个实体存在某种关系,则所有提及这两个实体的句子都表达该关系。

(2)流程

知识库中的实体对 → 检索包含该实体对的语料 → 自动标注为 “表达该关系” 的样本 → 用于训练序列标注模型;

(3)优势

解决标注数据稀缺问题,降低人工标注成本,适用于关系抽取、NER 等任务。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐