Open njs03332 opened 10 months ago
assign roles -s 0104 -c 1 2 3
0 | 1 | 2 | |
---|---|---|---|
member | 주선미 | 한단비 | 김유리 |
chapter | 1 | 2 | 3 |
beam_width = 10
# 모든 (10개) 디코더 셀을 감싼 BeamSearchDecoder를 만듦
decoder = tfa.seq2seq.beam_search_decoder.BeamSearchDecoder(cell=decoder_cell, beam_width=beam_width, output_layer=output_layer)
# 각 디코더를 위해 인코더의 마지막 상태를 복사
decoder_initial_state = tfa.seq2seq.beam_search_decoder.tile_batch(encoder_state, multiplier=beam_width)
# 시작과 종료 토큰과 함께 이 상태를 디코더에게 전달
outputs, _, _ = decoder(embedding_decoder, start_tokens=start_tokens, end_token=end_token, initial_state=decoder_initial_state)
sequence to sequence
영어 문장을 인코더로 주입하면 디코더는 프랑스어 번역을 출력
영어 문장은 인코더로 주입되기 전에 거꾸로 뒤집힘
단어는 초기에 1차원으로 표현, 그 다음으로 단어 임베딩이 반환됨
그리고 이 단어 임베딩이 인코더와 디코더로 주입됨
각 단계마다 디코더는 출력 어휘 사전(즉 프랑스어)에 있는 단어에 대한 점수를 출력
그리고 소프트맥스 층이 이 점수를 확률로 바꿈
기본적인 인코더-디코더 모델을 만드는 코드
import tensorflow_addons as tfa
encoder_inputs = keras.layers.Input(shape=[None], dtype=np.int32)
decoder_inputs = keras.layers.Input(shape=[None], dtype=np.int32)
sequence_lengths = keras.layers.Input(shape=[], dtype=np.int32)
embeddings = keras.layers.Embedding(vocab_size, embed_size)
encoder_embeddings = embeddings(encoder_inputs)
decoder_embeddings = embeddings(decoder_inputs)
encoder = keras.layers.LSTM(512, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_embeddings)
encoder_state = [state_h, state_c]
sampler = tfa.seq2seq.sampler.TrainingSampler()
decoder_cell = keras.layers.LSTMCell(512)
output_layer = keras.layers.Dense(vocab_size)
decoder = tfa.seq2seq.basic_decoder.BasicDecoder(decoder_cell, sampler,
output_layer=output_layer)
final_outputs, final_state, final_sequence_lengths = decoder(
decoder_embeddings, initial_state=encoder_state,
sequence_length=sequence_lengths)
Y_proba = tf.nn.softmax(final_outputs.rnn_output)
model = keras.models.Model(
inputs=[encoder_inputs, decoder_inputs, sequence_lengths],
outputs=[Y_proba])
the Queen of the United Kingdom
, the queen of hearts
, the queen bee
queen
을 올바르게 인코딩하려면 위 구 단어들을 알아야 함keras.layers.Bidirectional(keras.layers.GRU(10, return_sequences=True))