注意模型对于命名实体识别的效果不佳

问题描述

我想开发一个具有神经网络的命名实体识别系统,首先我使用了简单的LSTM层,并且该模型基于Words作为标记,但我没有令人满意的准确性,

因此,我想到了一种基于字符作为标记的不同方法。 首先,我们将使用char生成训练数据。固定长度的序列(填充), 然后将其输入到Attention模型中,在该示例中,输出节点应等于单词或标签中的no,然后等于lstm和致密层, 所以基本上神经网络应该从字符中学习单词表示,这将在出现一些OOV或错误类型的单词时为我们提供帮助, 但是我实现的注意模型甚至比以前的lstm堆栈效果差。 那么这是实现问题还是其他问题?

注意力模型:

    class Attention_Model():
      def __init__(self,seq_length,units):
        self.seq_length=seq_length
        self.units=units
        self.lstm=LSTM(units=units,return_sequences=True,return_state=True)
        self.dense1=Dense(units=self.seq_length)
        self.dense2=Dense(units=self.seq_length)
        self.dense3=Dense(units=self.seq_length)
        self.softmax=Softmax(axis=1)
        self.outputs=[]
        
    
      def get_lstm_s(self,seq_no):
        input_lstm=tf.expand_dims(tf.reduce_sum(self.X*(self.alphas[:,:,seq_no:seq_no+1]),axis=1),axis=1)
        a,b,c=self.lstm(input_lstm)
        self.outputs.append(a)
        #self.output[:,seq_no,:].assign(a[:,:])
    
        return tf.concat([b,c],axis=-1)
    
      def __call__(self,X):
        self.X=X
        
        
        
    
        for i in range(self.seq_length+1):
          if i==0 :
            s=tf.zeros(shape=(self.X.shape[0],2*self.units))
          else :
            s=self.get_lstm_s(i-1)
          if(i==self.seq_length):
            break 
          
          
          s=tf.expand_dims(s,axis=1)
          s=tf.repeat(s,X.shape[1],axis=1)
          
          concate_X=(tf.concat([tf.cast(self.X,tf.float64),tf.cast(s,tf.float64)],axis=-1))
          
          self.alphas=self.softmax(self.dense1(self.dense2(self.dense3(concate_X))))
    
        
        output=tf.transpose(tf.squeeze(tf.convert_to_tensor(self.outputs),[2]),[1,2]) 
        self.outputs=[]
        
        return output

模型架构:


# Defining all Layers...

embd=Embedding(input_dim=len(vocab),output_dim=100,name="embd")

lstm1=Bidirectional(LSTM(units=100,name="lstm1"),name="bd1")
lstm2=Bidirectional(LSTM(units=100,name="lstm2"),name="bd2")

# Attention Layers to make seq-length=21 
# Developed by Gajesh Ladhar
attention_layer=Attention_Model(21,200)

lstm3=Bidirectional(LSTM(units=100,name="lstm3"),name="bd3")


dense1=Dense(units=150,name="dense1")
norm1=BatchNormalization()
act1=Activation('relu')

dense2=Dense(units=140,name="dense2")
norm2=BatchNormalization()
act2=Activation('relu')

dense3=Dense(units=130,name="dense3")
norm3=BatchNormalization()
act3=Activation('relu')

dense4=Dense(units=len(classes),name="dense4")
norm4=BatchNormalization()
output=Activation('softmax')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...