用于文本摘要的BERT

问题描述 投票:0回答:1

我正在尝试在Keras中使用seq2seq体系结构构建文本摘要模型。我遵循了本教程https://keras.io/examples/lstm_seq2seq/,并使用Embeddings层将其实现,效果很好。但是现在我想使用BERT。是否可以在这样的任务中使用预训练的BERT嵌入,通常我会看到文本分类,但是不能与BERT一起使用的编码器-解码器体系结构。

我从TF Hub访问BERT模型,并从本教程https://github.com/strongio/keras-bert/blob/master/keras-bert.ipynb中实现了Layer类,我还使用BERT标记程序对了标记,下面是我的模型

enc_in_id = Input(shape=(None, ), name="Encoder-Input-Ids")
enc_in_mask = Input(shape=(None, ), name="Encoder-Input-Masks")
enc_in_segment = Input(shape=(None, ), name="Encoder-Input-Segment-Ids")
bert_encoder_inputs = [enc_in_id, enc_in_mask, enc_in_segment]

encoder_embeddings = BertLayer(name='Encoder-Bert-Layer')(bert_encoder_inputs)
encoder_embeddings = BatchNormalization(name='Encoder-Batch-Normalization')(encoder_embeddings)
encoder_lstm = LSTM(latent_size, return_state=True, name='Encoder-LSTM')
encoder_out, e_state_h, e_state_c = encoder_lstm(encoder_embeddings)
encoder_states = [e_state_h, e_state_c]

dec_in_id = Input(shape=(None,), name="Decoder-Input-Ids")
dec_in_mask = Input(shape=(None,), name="Decoder-Input-Masks")
dec_in_segment = Input(shape=(None,), name="Decoder-Input-Segment-Ids")
bert_decoder_inputs = [dec_in_id, dec_in_mask, dec_in_segment]

decoder_embeddings_layer = BertLayer(name='Decoder-Bert-Layer')
decoder_embeddings = decoder_embeddings_layer(bert_decoder_inputs)
decoder_batchnorm_layer = BatchNormalization(name='Decoder-Batch-Normalization-1')
decoder_batchnorm = decoder_batchnorm_layer(decoder_embeddings)

decoder_lstm = LSTM(latent_size, return_state=True, return_sequences=True, name='Decoder-LSTM')
decoder_out, _, _ = decoder_lstm(decoder_batchnorm, initial_state=encoder_states)
dense_batchnorm_layer = BatchNormalization(name='Decoder-Batch-Normalization-2')
decoder_out_batchnorm = dense_batchnorm_layer(decoder_out)
decoder_dense_id = Dense(vocabulary_size, activation='softmax', name='Dense-Id')
dec_outputs_id = decoder_dense_id(decoder_out_batchnorm)

模型建立,经过几个时期后,精度提高到1,损耗降到0.5以下,但预测很糟糕。由于我正在开发一个包含5个样本的开发集,最多包含30个WordPiece令牌并根据相同的数据进行预测,因此我只正确获得了第一个或两个令牌,然后仅重复了最后看到的令牌或[PAD]令牌。

tensorflow keras deep-learning word-embedding seq2seq
1个回答
0
投票

[我认为this work可能被证明是有用的,您可以尝试许多其他文本摘要模型here,它们也包含自己的blogs,以详细讨论它们的制作方法

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.