通俗易懂的BiLSTM-CRF,用命名实体识别任务来解释CRF(一)

2024-02-23 17:32

本文主要是介绍通俗易懂的BiLSTM-CRF,用命名实体识别任务来解释CRF(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BiLSTM上的CRF,用命名实体识别任务来解释CRF

  • 0 导读
  • 预备知识
  • 1.介绍
    • 1.1 开始之前
    • 1.2 BiLSTM-CRF模型
    • 1.3 如果没有CRF层会怎么样
    • 1.4 CRF层可以训练数据中学习约束
  • 2. CRF层
    • 2.1 Emission得分
    • 2.2 Transition得分
    • 2.3 损失函数
    • 2.4 实际路径得分
    • 2.5所有可能的路径的得分
  • 参考链接

0 导读

看了很多的CRF的介绍和讲解,这个感觉是最清楚的,结合实际的应用场景,让你了解的用处和用法。

预备知识

你需要知道的唯一的事情是什么是命名实体识别,如果你不知道神经网络,CRF或任何其他知识,请不要担心,后面会做直观解释。

1.介绍

对于命名实体识别任务,基于神经网络的方法非常普遍。例如,这篇文章https://arxiv.org/abs/1603.01360提出了使用一个使用词和字嵌入的BiLSTM-CRF命名实体识别模型。下文将以本文中的模型为例来解释CRF是如何工作的。
如果你不知道BiLSTM和CRF的细节,请记住它们是命名实体识别中的两个不同层。

1.1 开始之前

我们假设,我们有一个数据集,其中有两个实体类型,Person和Organization。但是,事实上,在我们的数据集上,我们有5个标签:

  • B-Person
  • I-Person
  • B-Organization
  • I-Organization
  • O

此外,x是包含5个单词的句子,w0,w1,w2,w3,w4。更重要的是,在句子x中,{w0,w1}是一个Person实体,[w3]是一个Organization实体,其他都是“O”。

1.2 BiLSTM-CRF模型

下文将对这个模型西做一个简单介绍。
如下图所示:

  • 首先,将句子x中的每个单词表示为一个向量,其中包括单词的嵌入和字符的嵌入。字符嵌入式随机初始化的。词嵌入通常是一个预训练的词嵌入文件导入的。所有的嵌入将在训练过程中进行微调。
  • 其次,BiLSTM-CRF模型的输入是这些嵌入,输出是句子x中的单词的预测标签。
    -在这里插入图片描述
    虽然不需要知道BiLSTM层的细节,但是为了更容易的理解CRF层,我们需要知道BiLSTM层输出的意义是什么。
    在这里插入图片描述
    上图说明BiLSTM层的输出是每个标签的分数,例如,对于w0,BiLSTM节点的输出为1.5(B-Person)、0.9(I-Person)、0.1(B-Organization)、0.08(I-Organization)和0.05(O),这些分数将作为CRF层的输入。
    然后,将BiLSTM层预测的所有分数输入CRF层,在CRF层中,选择预测得分最高的标签序列作为最佳答案。

1.3 如果没有CRF层会怎么样

你可能已经发现,即使没有CRF层,也就是说,我们可以训练一个BiLSTM命名实体识别模型,如下图所示:
在这里插入图片描述
因为每个单词的BiLSTM输出是标签的分数,我们可以选择每个单词得分最高的标签。
例如,对于w0,“B-Person”得分最高(1.5),因此我们可以选择“B-Person”作为其最佳预测标签。同样,我们可以为w1选择“I-Person”,为w2选择“O”,为w3选择“B-Organization”。为w4选择“O”。
虽然在这个例子中我们可以得到正确的句子x的标签,但是并不总是这样,再试一下下图图片中的例子。
在这里插入图片描述
显然这次的输出是无效的,“I-ORganization I-Person”和“B-Organization I-Person”。

1.4 CRF层可以训练数据中学习约束

CRF层可以向最终的预测标签添加一些约束,以确保它们是有效的。这些约束可以由CRF层再训练过程中从训练数据集自动学习。
约束条件可以是:

  • 句子中第一和单词的标签应该以“B-”或“O”开头,而不是“I-”
  • “N-label I-label2 I-label I-…”,在这个模式中,label1、label2、label3…应该是相同的命名实体标签。例如,“B-Person I-Person”是有效的,但是“B-Person I-Organization”是无效的。
  • “O I-label”无效。一个命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效模式应该是“O B-label”

有了这些有用的约束,无效预测标签序列的数量将显著减少。

2. CRF层

在CRF层的损失函数中,我们有两种类型的分数。这两个分数是CRF层的关键概念。

2.1 Emission得分

第一个emission分数。这些emission分数来自BiLSTM。例如,如下图所示,标记为B-Person的w0的分数为1.5。
在这里插入图片描述
为方便起见,我们将给每一个标签一个索引号,如下图所示。
在这里插入图片描述
我们用 x i y i x_{iy_i} xiyi来表示emission分数。i是word的索引, y i y_i yi是label的索引。如上图所示, x i = 1 , y = 2 = x w 1 , B − O r g a n i z a t i o n = 0.1 , = 1 x_{i=1,y=2}=x_{w_{1,B-Organization}}=0.1,=1 xi=1,y=2=xw1,BOrganization=0.1,=1,即w1作为B-Oraganization的得分为0.1。

2.2 Transition得分

我们使用 t y i y j t_{y_iy_j} tyiyj来表示transition分数。例如, t B − P e r s o n , I − P e r s o n = 0.9 t_{B-Person,I-Person}=0.9 tBPerson,IPerson=0.9表示标签的transition,B-Person —>I-Person得分为0.9.因此,我们有一个transition得分矩阵,它存储了所有标签之间的所有得分。
为了是transition评分矩阵更健壮,我们将添加另外两个标签,START和END。START是指一个句子的开头,而不是第一个单词。END代表一个句子的结尾。
下面是一个transition得分矩阵的例子,包括额外添加的START和END标签。
在这里插入图片描述
如上表所示,我们可以发现transition矩阵已经学习了一些有用的约束。

  • 句子中第一个单词的标签应该以“B-”或“O”开头,而不是“I-”开头**(从“START”到“I-person”或I-Organization的分数非常低。)**
  • “B-label1 I-label2 I-label3 I-…”,在这个模式中,label1、label2、label3…应该是相同的命名实体标签。例如,“B-Person I-Person”是有效的,但是“B-Person I-Organization”是无效的。(例如,从“B-Organization”到“I-Person”的分数只有0.0003,比其他分数低很多)
  • O I-label”无效。一个被命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效的模式应该是“O B-label”(同样,t_{O,I-Person}的分数非常小)

你可能想问一个关于矩阵的问题。在哪里或如何得到transition矩阵?

实际上,该矩阵是BiLSTM-CRF模型的一个参数。在训练模型之前,可以随机初始化矩阵中的所有transition分数。所有的随机分数将在你的训练过程中自动更新。换句话说,CRF层可以自己学习这些约束。我们不需要手动构建矩阵。随着训练迭代次数的增加,分数会逐渐趋于合理。

2.3 损失函数

CRF损失函数由真实路径得分和所有可能路径的总得分组成。在所有可能的路径中,真实路径的得分应该是最高的。
例如,如果我们的数据集中有如下表所示的这些标签:
在这里插入图片描述
我们还是有一个5个单词的句子。可能的路径是:

  • 1)START B-Person B-Person B-Person B-Person B-Person END
  • 2)START B-Person I-Person B-Person B-Person B-Person END
  • 10)START B-Person I-Person O B-Organization O END
  • N)O O O O O O O
    在这里插入图片描述

2.4 实际路径得分

在这里插入图片描述
在这里插入图片描述

2.5所有可能的路径的得分

在这里插入图片描述在这里插入图片描述
步骤2: 回忆一下Emission和Transition得分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考链接

原文链接:1,2

这篇关于通俗易懂的BiLSTM-CRF,用命名实体识别任务来解释CRF(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739366

相关文章

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启