2

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から実装されたレイヤー クラスを持っています。以下の 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 を下回りましたが、予測はひどいものでした。最大 30 個の WordPiece トークンを使用し、同じデータを予測する 5 つのサンプルで構成される開発セットに取り組んでいるため、最初のトークンまたはおそらく 2 つのトークンのみを正しく取得し、最後に見たトークン、または [PAD] を繰り返すだけです。トークン。

4

2 に答える 2

1

テキストを要約するためのさまざまな方法があります。つまり、抽出的および抽象的です。

抽出要約とは、テキストの重要なセクションを特定し、それらを逐語的に生成して、元のテキストから文のサブセットを生成することを意味します。一方、抽象的要約 は、高度な自然言語技術を使用してテキストを解釈および検査した後、重要な資料を新しい方法で再現し、元のテキストから最も重要な情報を伝える新しい短いテキストを生成します。

トランスフォーマー ベースのアプローチでは、エンコーダー/デコーダー モデルに追加できる追加のアテンション レイヤーが必要なだけです。または、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 ) があります。

于 2020-06-25T12:28:28.267 に答える