使用 lstm + crf 实现NER

news/2024/10/4 6:55:09/

条件随机场CRF

前言

  • CRF是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布的模型。
  • 特点:假设输出随机变量构成马尔卡夫随机场。
  • CRF可以用于不同的预测问题。
  • 但是主要讨论线性链条件随机场,这时问题变成了由输入序列对输出序列的判别模型,形式为对数线性模型,学习方法通常是极大似然估计火正则化的极大似然估计
  • 三个基本问题:概率计算问题,学习问题,预测问题

Step1:概率无向图模型

概率无向图又称马尔可夫随机场。是一个可以由无向图表示的联合概率分布。

1.模型定义

定义无向图表示的随机变量之间存在成对马尔可夫性,局部马尔可夫性,全局马尔可夫性。

  • 成对马尔可夫性:u和v式无向图G中任意两个没有边连接的节点,对应Y_u和Y_v。其他所有节点为O,对应Y_o。成对马尔可夫性指给定Y_o的条件下Y_u和Y_v是条件独立的

P ( Y u , Y v ∣ Y O ) = P ( Y u ∣ Y O ) P ( Y v ∣ Y O ) P(Y_u,Y_v|Y_O)=P(Y_u|Y_O)P(Y_v|Y_O) P(Yu,YvYO)=P(YuYO)P(YvYO)

  • 局部马尔可夫性:

在这里插入图片描述

  • 全局马尔可夫性:

在这里插入图片描述

2.概率无向图模型

无向图G中,联合概率分布满足成对,局部或全局马尔可夫性,就称此联合概率分布为概率无向图模型或马尔可夫随机场

3.因子分解

概率无向图模型最大的特点就是易于因子分解。

  • 团与最大团的概念

概率无向图模型的联合概率可以表示为最大团上的随机变量的函数的乘积的形式。

在这里插入图片描述

Step2:条件随机场的定义

1.定义

在这里插入图片描述

2.参数化形式

在这里插入图片描述

3.简化形式

在这里插入图片描述

4.矩阵形式

在这里插入图片描述

Step3:概率计算

给定条件随机场P(Y|X),输入序列 x 和输出序列 y ,计算条件概率P(Y_i=y_i | x),P(Y_{i-1} = y_{i-1} , Y_i = y_i | x)以及相应的数学期望的问题。

1.前向-后向算法

  • 前向向量 α i ( x ) \alpha_i(x) αi(x)

在这里插入图片描述

递推公式:

或

  • 后向向量 β i ( x ) \beta_i(x) βi(x),同理

在这里插入图片描述

  • Z(x)由前向-后向向量得到

在这里插入图片描述

2.概率计算

在这里插入图片描述

3.期望值计算

在这里插入图片描述

Step4:学习算法

具体优化实现算法:改进迭代尺度法IIS、梯度下降法、拟牛顿法

1.改进迭代尺度法

在这里插入图片描述

其中,

δ = ( δ 1 , δ 2 , . . . , δ K ) T \delta=(\delta_1,\delta_2,...,\delta_K)^T δ=(δ1,δ2,...,δK)T为向量增量,更新参数为 w + δ w+\delta w+δ

在这里插入图片描述

2.BFGS法

在这里插入图片描述

Step5:预测算法

给定条件随机场 P ( Y ∣ X ) P(Y|X) P(YX)和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列) y ∗ y^* y

即对观测序列进行标注

维特比算法

在这里插入图片描述

  • 其中,

在这里插入图片描述

在这里插入图片描述

Step6:PyTorch-crf

note : pytorch-crf 暴露为一个单个 CRF 类,这个类继承自 Pytorch 的 nn.Module

  • 所以他能做到一个普通的网络都能能做到的事情
    • 比如,把 module 转到 设备中
    • 前向传播和反向传播
    • module 的参数管理等
  • 知道以上那一点,一切都好说了

在这里插入图片描述

在这里插入图片描述

计算概率

给定发射分数的,计算一个序列标签的对数概率

在这里插入图片描述

如果有填充,需要传递掩码矩阵张量

在这里插入图片描述

Step7:使用 LSTM + Pytorch-CRF 实现 NER

1.数据集

在这里插入图片描述

在这里插入图片描述

  • 格式

    • 貌似是个 tsv,可以利用这一点对文件进行分析
    • 空行表示一个句子结束
    • 乍一看数据集质量貌似不太好
  • 思路

    • 数据集不多,类别分的那么多没必要,把NAM和NOM合并好了,只保留 GPE, LOC, ORG, PER
    • 用空行表示一句的隔断
    • 写一个 脚本 吧~把数据保存成字典(代码在上方资源处自取)

    在这里插入图片描述

    • 后来又写了两个,把词汇表和类别顺便加上了

    在这里插入图片描述

2.代码

  • 上方资源处自取

  • 这里我嫌收敛太慢了,使用了学习率调度器,调度策略采用了第一次退火到最大学习率的学习率调度器。

    scheduler = OneCycleLR(optimizer, max_lr=0.05, steps_per_epoch=len(train_loader), epochs=num_epochs)
    
    • 最大学习率是 0.05,优化器学习率是 5e-4 ,目的是前期加速收敛
    • 也就是说,学习率会从 0.0001 上升到 0.01 再慢慢退回到 0.0001

    在这里插入图片描述

  • 分为标准的 训练集,开发集,测试集

    • 每轮打印信息

      在这里插入图片描述

  • 最终结果,貌似没有完全收敛

    • 因为这我的 colab 突然坏掉了,不能用 gpu,所以这次是用自己电脑跑的,苹果的M 芯片还是慢了点,不如 A100。而且这周有事,我就训练了两次就不整了

    在这里插入图片描述

  • 最后,我把双向改单向貌似效果好多了,但是没时间了,有急事要出去了

    • 10轮就差点干了之前50轮的效果
  • 在这里插入图片描述


http://www.ppmy.cn/news/1533774.html

相关文章

[RabbitMQ] RabbitMQ介绍,安装与快速上手

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

高斯消元 笔记

高斯消元 高斯消元:解线性方程组 有 n n n 个未知数: x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1​,x2​,...,xn​ a 1 1 x 1 1 a 1 2 x 1 2 . . . a 1 n x 1 n b 1 a_{1_1}x_{1_1}a_{1_2}x_{1_2}...a_{1_n}x_{1_n}b_1 a11​​x11​​a12​​x1…

开源模型应用落地-qwen2.5-7b-instruct-LoRA微调-LLaMA-Factory-单机单卡-V100(十八)

一、前言 本篇文章将使用LLaMA-Factory去高效微调(命令和界面方式)QWen2.5系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 QWen2系列模型微调: 开源模型应用落地-qwen2-7b-instruct-LoRA微调-LLaMA-Factory-单机单…

Spring Boot 进阶-如何自定义SpringBoot日志配置?

在之前的文章中我们介绍了Spring Boot中的日志框架,并且也介绍了SpringBoot日志框架中日志级别的调整。这篇文章我们主要来介绍关于如何让日志框架更加符合我们自己的需求。那么首先我们就来看一下日志文件输出路径的配置。 如何指定日志文件的输出位置 在Spring Boot中日志是…

leetcode刷题day29|贪心算法Part03( 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列)

134. 加油站 思路&#xff1a; 暴力解法&#xff1a;for循环适合模拟从头到尾的遍历&#xff0c;while循环适合模拟环形遍历&#xff01;但是会超出leetcode的时间限制。 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {for(int i0;i<gas.length…

CMU 10423 Generative AI:lec13/13.5(text-to-image models:三大类方法、评估标准、图像编辑原理)

1 文章目录 1 lec13和lec13.5概述2 Text-to-Image Generation 概念、主要方法、挑战、发展历程1. **基本概念**2. **主要技术方法**2.1. **生成对抗网络&#xff08;GAN&#xff09;**2.2. **自回归模型&#xff08;Autoregressive Models&#xff09;**2.3. **扩散模型&#x…

opencv-如何获取图像区域特定像素区域大小

需求 通过鼠标框选某个区域&#xff0c;返回这个区域的像素大小。 源码 # e:path\to\cal_rectangle_area.py import cv2 import numpy as np # 初始化变量 image cv2.imread(./vlcsnap-2024-09-25-10h51m27s007.png) if image is None: print("Error: Image cou…

自建RustDesk服务器:详细步骤与操作指南

在远程办公和协作日益普及的今天&#xff0c;远程桌面软件成为了不可或缺的工具。然而&#xff0c;许多知名的远程桌面软件&#xff0c;在免费使用一段时间后&#xff0c;会通过限制连接数量、时长或在特定网络环境下的可用性来促使用户付费升级&#xff0c;而且其会员非常昂贵…