首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本摘要的BERT

文本摘要的BERT
EN

Stack Overflow用户
提问于 2019-08-21 18:31:12
回答 2查看 1.5K关注 0票数 2

我正在尝试使用Keras中的seq2seq架构来构建一个文本摘要模型。我遵循了本教程的https://keras.io/examples/lstm_seq2seq/,并使用嵌入层实现了它,它工作得很好。但现在我想用BERT。在这样的任务中可以使用预训练的BERT嵌入吗,通常我看到的是文本分类,而不是BERT使用的编码器-解码器架构。

我从TF集线器访问BERT模型,并从本教程https://github.com/strongio/keras-bert/blob/master/keras-bert.ipynb中实现了一个层类,我还相应地使用BERT标记器进行标记化,下面是我的模型

代码语言:javascript
复制
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令牌。

EN

回答 2

Stack Overflow用户

发布于 2020-06-25 20:28:28

摘要文本有不同的方法,即抽象法和抽象法。

抽象摘要摘要(

Extractive subset )是指识别文本的重要部分并逐字生成它们,从原始文本中生成句子的子集;而抽象摘要摘要( abstractive )在使用高级自然语言技术对文本进行解释和检查后,以一种新的方式再现重要材料,以生成新的较短的文本,该文本传达了原始文本中最关键的信息。

对于基于转换器的方法,你只需要一个额外的关注层,你可以将它添加到编码器-解码器模型中,或者你可以使用预先训练好的转换器(可能会对它们进行微调),比如BERT,GPT,T5等。

你可以看看:https://huggingface.co/transformers/

对于抽象摘要,T5工作得很好。这里有一个很好的简单的例子:https://github.com/faiztariq/FzLabs/blob/master/abstractive-text-summarization-t5.ipynb

要获取摘要,您可以查看:https://pypi.org/project/bert-extractive-summarizer/

有一篇论文(Attention Is All You Need)很好地解释了转换器,你也可以看看它:https://arxiv.org/abs/1706.03762

票数 1
EN

Stack Overflow用户

发布于 2020-01-11 17:54:20

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

希望这能对你有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57589625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档