文章目錄
什麼是TextRCNN
如下圖所示,就是TEXTRCNN的架構。
簡而言之就是在詞嵌入的基礎上加上了上下文環境作爲新的詞嵌入表示。
而左側和右側的context是通過前向和後向兩層RNN的中間層輸出得到的。
這些中間層的輸出和原始的詞嵌入拼接形成新的詞嵌入y。然後送入池化層。
給人一種詞嵌入的感覺,結合上下文的詞嵌入的感覺。
本意是通過RNN取代TextCNN的特徵提取,因爲卷積的作用是提取特徵,這裏用RNN的中間層輸出來表示所謂的特徵,所以叫做RCNN。
看下錶中題目叫做Recurrent =>(convolutional)
tf 實現
def design_model(self,hiden_size=32,with_fc=False):
input_layer=L.Input(shape=(None,),name='feature_input')
w=L.Embedding(input_dim=self.emb.wordCount,output_dim=self.emb.wordDim,input_length=self.emb.sequenceLength)(input_layer)
x=w
lx,rx=L.Bidirectional(L.LSTM(hiden_size,dropout=0.4,return_sequences=True),merge_mode=None)(x)
x=L.concatenate([lx,w,rx])
x=L.Dense(x.shape[-1],activation="tanh")(x)
#x=L.Conv1D(filters=1,kernel_size=3,activation="relu")(x)
x=L.GlobalMaxPool1D()(x)
if with_fc:
x=L.Dense(hiden_size,activation='relu')(x)
output_layer=L.Dense(2,activation='softmax')(x)
model=K.models.Model(inputs=[input_layer],outputs=[output_layer],name=self.name)
self.model=model
model.summary()
return model