【NLP】文本分类TextRNN

一、理论

二、代码

TextRNN(tf2.0实现,主要使用其中的keras包)

run.py
model = MyModel(config)
model.build(input_shape=(None, sentence_len)) # 句子长度

代码中具体参数可参考:传送门

model.py
from tensorflow.keras.layers import Dense, Embedding, LSTM, Dropout, Flatten**

### model类
class MyModel(tf.keras.Model):
    def __init__(self, config):
        super(MyModel, self).__init__()
        self.config = config
        self.embedding = Embedding(self.vocab_size, self.embedding_dim, 
                         input_length=self.sentence_len, 
                         weights=[self.embedding_pretrained],trainable=False)
        
        ### LSTM层。
        # units:LSTM隐藏层
        # return_sequences:Ture返回全部step的hidden state值,False返回最后一个,
          !当True时增加Flatten层,False去掉Flatten层。!
        self.RNN = LSTM(units=self.hidden_size,return_sequences=True,activation='relu',)
        
        ### BiLSTM 双向LSTM层。
        #self.biRNN = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True,
                             activation='relu',))
        ###
        
        ### 多层BiLSTM层
        #self.biRNN = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True
                             activation='relu',))
        #self.dropout = Dropout(self.dropout)
        #self.biRNN2 = Bidirectional(LSTM(units=self.hidden_size,return_sequences=True
                             activation='relu',))
        #self.dropout = Dropout(self.dropout)
        ###
        
        self.dropout = Dropout(self.dropout)
        self.flatten = Flatten()
        self.out_put = Dense(units=self..num_classes, activation='softmax')

def build(self, input_shape):
  super(MyModel, self).build(input_shape)    

def call(self, x):
    x = self.embedding(x)
    x = self.RNN(x)
    x = self.dropout(x)
    x = self.flatten(x)
    x = self.out_put(x)
    return x

你可能感兴趣的:(NLP)