• 大小: 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.xml
     文件         301  2019-10-24 10:35  ChineseNRE\.idea\misc.xml
     文件         293  2019-10-24 10:35  ChineseNRE\.idea\modules.xml
     文件       29995  2019-10-30 11:37  ChineseNRE\.idea\workspace.xml
     文件        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个文件信息

评论

共有 条评论

相关资源