Python BiLSTM_CRF医学文本标注,医学命名实体识别,NER,双向长短记忆神经网络和条件随机场应用实例,BiLSTM_CRF实现代码

本文介绍了如何使用BiLSTM-CRF模型进行医学文本中的实体标注,包括设置随机种子、softmax函数、LogSumExp技巧、双向LSTM、CRF的实现及参数设置。通过训练和实例展示,展示了模型如何处理BIO标注并解决溢出问题。

具体参考的哪一位大神的代码记不清了,在此表示感谢一下:

进入正题

import torch
import torch.autograd as autograd
import torch.nn as nn
import torch.optim as optim

1.设置随机种子 

torch.manual_seed(1)

2.torch.max(input, dim) 函数

output = torch.max(input, dim)

输入

  • input是softmax函数输出的一个tensor
  • dim是max函数索引的维度0/10是每列的最大值,1是每行的最大值

输出

  • 函数会返回两个tensor,第一个tensor是每行的最大值,softmax的输出中最大的是1,所以第一个tensor是全1的tensor;第二个tensor是每行最大值的索引。
def argmax(vec):
    _,idx = torch.max(vec,1)
    return idx.item()

3.将 idxs(位置下标)的列表转化为tensor格式

def prepare_sequence(seq, to_ix):
    idxs = [to_ix[w] for w in seq]
    return torch.tensor(idxs, dtype=torch.long)

4. LogSumExp(LSE)技巧,主要解决计算Softmax或CrossEntropy2时出现的上溢(overflow)或下溢(underflow)问题。

 LSE被定义为参数指数之和的对数:

输入可以看成是一个n维的向量,输出是一个标量。 

def log_sum_exp(vec):
    max_score = vec[0, argmax(vec)]
    max_score_broadcast = max_score.view(1, -1).expand(1, vec.size()[1])
    return max_score + \
        torch.log(torch.sum(torch.exp(vec - max_score_broadcast)))

5.双向长短记忆神经网络和条件随机场 

class BiLSTM_CRF(nn.Module):

    def __init__(self, vocab_size, tag_to_ix, embedding_dim, hidden_dim):
        super(BiLSTM_CRF, self).__init__()
        self.embedding_dim = embedding_dim
        self.hidden_dim = hidden_dim
        self.vocab_size = vocab_size
        self.tag_to_ix = tag_to_ix
        self.tagset_size = len(tag_to_ix)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

医学小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值