具体参考的哪一位大神的代码记不清了,在此表示感谢一下:
进入正题
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函数输出的一个tensordim是max函数索引的维度0/1,0是每列的最大值,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)
深度学习与序列标注:BiLSTM-CRF在医学文本识别中的应用

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





