-
大小: 33.6MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-07-16
- 语言: 其他
- 标签:
资源简介
基于BiLSTM + Attention实现的简单的关系抽取模型,代码效果并不十分理想,代码上传目的是为大家提供基本的实现思路。
代码片段和文件信息
import torch
import torch.nn as nn
import torch.nn.functional as F
torch.manual_seed(1) #为CPU设置种子用于生成随机数,以使得结果是确定的
class BiLSTM_ATT(nn.Module):
def __init__(selfinput_sizeoutput_sizeconfigpre_embedding):
super(BiLSTM_ATTself).__init__()
self.batch = config[‘BATCH‘]
self.input_size = input_size
self.embedding_dim = config[‘embedDING_DIM‘] # 词向量长度
self.hidden_dim = config[‘HIDDEN_DIM‘]
self.tag_size = output_size # 最终结果状态数,即分类数
self.pos_size = config[‘POS_SIZE‘]
self.pos_dim = config[‘POS_DIM‘] #位置编码向量长度
self.pretrained = config[‘pretrained‘]
if self.pretrained:
# freeze = False 表示训练过程中会更新这些词向量,默认为True 也就是不更新
self.word_embeds = nn.embedding.from_pretrained(torch.FloatTensor(pre_embedding)freeze=False)
else:
self.word_embeds = nn.embedding(self.input_sizeself.embedding_dim)
self.pos1_embeds = nn.embedding(self.pos_sizeself.pos_dim) # 实体1的embedding
self.pos2_embeds = nn.embedding(self.pos_sizeself.pos_dim) # 实体2的embedding
self.dense = nn.Linear(self.hidden_dimself.tag_sizebias=True)
self.relation_embeds = nn.embedding(self.tag_sizeself.hidden_dim)
‘‘‘
LSTM 输入变为 pos1_dim + pos2_dim + embedding_dim
LSTM的output 保存了最后一层,每个time step的输出h,如果是双向LSTM,每个time step的输出h = [h正向 h逆向]
TODO 这里hidden_size=hidden_dim/2 保证了后面BiLSTM输出的维度为(seq_lenbatch_sizehidden_dim)
注意hidden_size 与 hidden_dim的区分
hidden_size是单向的LSTM输出的维度
‘‘‘
self.lstm = nn.LSTM(input_size=self.embedding_dim+self.pos_dim*2hidden_size=self.hidden_dim//2num_layers=1 bidirectional=True)
self.hidden2tag = nn.Linear(self.hidden_dimself.tag_size)
‘‘‘
在嵌入层,LSTM层和倒数第二层上使用drop_out。
‘‘‘
self.dropout_emb = nn.Dropout(p=0.5)
self.dropout_lstm = nn.Dropout(p=0.5)
self.dropout_att = nn.Dropout(p=0.5)
self.hidden = self.init_hidden()
# nn.Parameter 类型表示会算入计算图内进行求梯度
self.att_weight = nn.Parameter(torch.randn(self.batch1self.hidden_dim))
self.relation_bias = nn.Parameter(torch.randn(self.batchself.tag_size1))
def init_hidden(self):
return torch.randn(2 self.batch self.hidden_dim // 2)
def init_hidden_lstm(self):
return (torch.randn(2 self.batch self.hidden_dim // 2)
torch.randn(2 self.batch self.hidden_dim // 2))
‘‘‘
BiLSTM 最后一层的输出 (seq_lenbatch_sizehidden_dim)
attention的参数H是经过转置的结果:(batch_sizehidden_dimseq_len)
attention 目的就是根据不同词得到不同词的权重,然后根据权重组合得到整个句子级别的表示
‘‘‘
def attention(selfH):
M = torch.tanh(H) # 非线性变换 size:(batch_sizehidden_dimseq_len)
a = F.softmax(torch.bmm(self.att_weightM)dim=2) # a.Size : (batch_size1seq_len)
a = torch.transpose(a12) # (batch_sizeseq_len1)
return to
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-10-26 19:33 ChineseNRE\
目录 0 2019-10-30 11:37 ChineseNRE\.idea\
文件 478 2019-10-24 10:38 ChineseNRE\.idea\ChineseNRE-master.iml
文件 138 2019-10-24 10:35 ChineseNRE\.idea\encodings.xm
文件 301 2019-10-24 10:35 ChineseNRE\.idea\misc.xm
文件 293 2019-10-24 10:35 ChineseNRE\.idea\modules.xm
文件 29995 2019-10-30 11:37 ChineseNRE\.idea\workspace.xm
文件 5300 2019-10-26 19:33 ChineseNRE\BiLSTM_ATT.py
文件 2069 2019-10-26 12:37 ChineseNRE\README.md
目录 0 2019-10-26 13:52 ChineseNRE\__pycache__\
文件 3192 2019-10-26 13:52 ChineseNRE\__pycache__\BiLSTM_ATT.cpython-36.pyc
文件 4628 2019-10-26 10:06 ChineseNRE\__pycache__\main.cpython-36.pyc
文件 450 2019-10-26 13:46 ChineseNRE\__pycache__\params_config.cpython-36.pyc
文件 6247 2019-10-26 11:39 ChineseNRE\__pycache__\utils.cpython-36.pyc
目录 0 2019-10-26 09:50 ChineseNRE\backup\
文件 2943945 2019-10-26 04:00 ChineseNRE\backup\model_0005_no_drop_att_score55.pkl
文件 2943943 2019-10-26 01:39 ChineseNRE\backup\model_lr_0001.pkl
文件 2943959 2019-10-25 23:00 ChineseNRE\backup\model_lr_005.pkl
目录 0 2019-10-26 12:35 ChineseNRE\data\
目录 0 2019-10-28 18:45 ChineseNRE\data\people-relation\
文件 8213 2019-10-28 18:45 ChineseNRE\data\people-relation\data_util.py
文件 119 2019-10-26 10:13 ChineseNRE\data\people-relation\relation2id.txt
文件 32392893 2019-04-21 14:41 ChineseNRE\data\people-relation\train.txt
文件 2909442 2019-10-26 12:35 ChineseNRE\data\people_relation_test.pkl
文件 13815237 2019-10-26 12:35 ChineseNRE\data\people_relation_train.pkl
文件 2909442 2019-10-26 12:35 ChineseNRE\data\people_relation_validate.pkl
文件 9047 2019-10-26 15:41 ChineseNRE\main.py
目录 0 2019-10-26 15:07 ChineseNRE\model\
文件 2948058 2019-10-26 15:07 ChineseNRE\model\model_best.pkl
文件 2948058 2019-10-26 15:07 ChineseNRE\model\model_final.pkl
文件 772 2019-10-26 13:45 ChineseNRE\params_config.py
............此处省略2个文件信息
- 上一篇:PowerDesigner16.5汉化文件.zip
- 下一篇:msysGit
评论
共有 条评论