昇思25天学习打卡营第12天 |昇思MindSpore LSTM+CRF 序列标注学习笔记

一、概述

  1. 序列标注是给输入序列中的每个 Token 标注标签的过程,常用于信息抽取任务。
  2. 以命名实体识别为例,介绍了常见的标注方法,如“BIOE”标注。

二、条件随机场(CRF)

  1. 对于序列标注,不能简单视为多分类问题,因为相邻 Token 存在关联关系。
  2. 条件随机场是适合处理这种关联关系的概率图模型。
  3. 输出序列 y 的概率计算公式:P(y|x) = exp(Score(x,y)) / ∑_{y'∈Y} exp(Score(x,y'))
  4. 定义发射概率函数 ψ_EMIT 和转移概率函数 ψ_TRANS 来计算 Score

三、CRF 实现

  1. Score 计算
    • 函数:compute_score(emissions, tags, seq_ends, mask, trans, start_trans, end_trans)
      • 参数emissions (发射概率矩阵),tags (标签),seq_ends (序列结束位置),mask (掩码矩阵),trans (转移概率矩阵),start_trans (起始转移概率向量),end_trans (结束转移概率向量)。
      • 功能:计算正确标签序列的得分。
      • 例句score = compute_score(emissions_matrix, tags_vector, seq_ends_index, mask_matrix, trans_matrix, start_trans_vector, end_trans_vector)
  2. Normalizer 计算
    • 函数:compute_normalizer(emissions, mask, trans, start_trans, end_trans)
      • 参数emissions (发射概率矩阵),mask (掩码矩阵),trans (转移概率矩阵),start_trans (起始转移概率向量),end_trans (结束转移概率向量)。
      • 功能:计算所有可能输出序列的对数指数和。
      • 例句normalizer = compute_normalizer(emissions_matrix, mask_matrix, trans_matrix, start_trans_vector, end_trans_vector)
  3. Viterbi 算法
    • 函数:
      • viterbi_decode(emissions, mask, trans, start_trans, end_trans)
        • 参数emissions (发射概率矩阵),mask (掩码矩阵),trans (转移概率矩阵),start_trans (起始转移概率向量),end_trans (结束转移概率向量)。
        • 功能:计算最大概率得分和标签历史。
        • 例句score, history = viterbi_decode(emissions_matrix, mask_matrix, trans_matrix, start_trans_vector, end_trans_vector)
      • post_decode(score, history, seq_length)
        • 参数score (得分),history (标签历史),seq_length (序列长度)。
        • 功能:根据得分和历史计算最佳预测序列。
        • 例句best_tags_list = post_decode(score, history, seq_length_vector)
  4. CRF 层
    • 函数:sequence_mask(seq_length, max_length, batch_first=False)
      • 参数seq_length (序列实际长度),max_length (最大长度),batch_first (是否 batch 在前,默认为 False)。
      • 功能:根据序列实际长度和最大长度生成掩码矩阵。
      • 例句mask = sequence_mask(seq_length_vector, max_length_value, batch_first=True)
    • 类:CRF
      • 参数num_tags (标签数量),batch_first (是否 batch 在前,默认为 False),reduction (损失计算方式,如 ‘um’ )。
      • 功能:实现完整的 CRF 层,包括前向训练和解码。
      • 例句crf_layer = CRF(num_tags_value, batch_first=True, reduction='sum')

四、BiLSTM+CRF 模型

  1. 模型结构:nn.Embedding -> nn.LSTM -> nn.Dense -> CRF
    • Embedding 层:将单词转换为向量。
    • LSTM 层:提取序列特征。
    • Dense 层:变换获得发射概率矩阵。
    • CRF 层:处理序列标注的关联关系。
  2. 模型训练
    • 生成训练数据和构造词表、标签表。
    • 实例化模型和优化器。
    • 定义 train_step 函数进行梯度计算和参数更新。
    • 使用 prepare_sequence 函数将数据打包成 Batch 并填充。
    • 进行模型训练和预测。

五、操作流程

  1. 准备数据:生成训练数据,构造词表和标签表。
  2. 模型构建:实例化 BiLSTM+CRF 模型。
  3. 优化器设置:选择合适的优化器。
  4. 训练模型:将数据打包成 Batch,进行梯度计算和参数更新,完成多轮训练。
  5. 模型预测:观察训练后的模型效果,进行预测和结果分析。

六、调用库及功能

  1. mindspore :构建模型、计算梯度、优化参数等。
  2. mindspore.nn :提供神经网络层和模块。
  3. mindspore.ops :操作符和函数。
  4. mindspore.numpy :类似 NumPy 的操作。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值