NLP实践项目三:基于BiLSTM-CRF的实体识别(pytorch实现)

本文介绍了使用BiLSTM-CRF进行实体识别的NLP实践项目,通过PyTorch实现。内容包括数据预处理,将Conll2003数据集转化为CSV格式,以及模型定义,探讨了BiLSTM融合上下文信息和CRF考虑标签序列约束的重要性。

直接看代码:github传送门
数据集:Conll2003

1. 数据预处理

将txt中的文件读出然后将句子和对应的标签序列存入csv文件中,便于使用torchtext完成数据读取。

2. 模型定义

在这里插入图片描述
上图是BiLSTM的结构图,数据流向由下往上。命名实体识别是一个序列标注任务,也就是对于句子中的每一个单词都有一个对应的标签。对于每一个单词而言,对它的标签的预测其实也就是一个多分类任务,下面通过提问的方式解构这个模型。
为什么需要BiLSTM ?:对于单词的多分类任务,最简单的处理方式就是在得到单词对应的词向量表示后通过全连接层+softmax得到预测为各个标签的概率,选择概率最大的标签作为预测标签,这样的处理方式存在的问题就是单词对应的向量表示没有很好地融合单词上下文信息,使用BiLSTM地目的就是融合单词的上下文信息。
为什么需要CRF以及CRF是怎么工作的 ?:上一步已经有了BiLSTM,能够在获取单词的向量表示时融入上下文信息,模型被认为能够很好地提取单词的语义信息并进行标签预测,注意直到现在我们也没有考虑标签序列自身包含的一些约束条件,例如标签序列 O O B-PER I-PER O O 肯定比 O O I-PER B-PER O O更加合理,单纯的使用BiLSTM是不能考虑这样的约束的,只能寄希望于BiLSTM能够从语义中学习到这些信息(当然,这不太现实),怎么更好地处理这个问题,之所以我们觉得第二个序列不合理是因为标签序列中出现了 O I-PER 这样的子序列,为了限制这样的不合法转移,使用线性链条件随机场模型。它是怎么工作的?假设在经过BiLSTM+全连接层后得到一个NxK的矩阵U,N为单词个数,K为标签种类数,U被称为发射矩阵, U [ i ] [ j ] U[i][j] U[i][j]表示第 i i i个单词被预测为标签 j j j的得分,另外为了限制不合法转移,设置一个KxK的T矩阵, T [ i ] [ j ] T[i][j] T[i][j]表示由标签 i i i转移到标签 j j j的得分,给定一个单词序列x,当对应的预测标签序列为y时将得分定义为:

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值