신경 기계 번역

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

David Cecchini

Data Scientist

인코더와 디코더

신경 기계 번역 아키텍처. 이 구조는 입력 언어용 인코더와 출력 언어용 디코더로 나뉩니다. 인코더는 입력 언어의 언어 모델을, 디코더는 출력 언어의 언어 모델을 학습합니다. 인코더의 최종 상태가 디코더로 전달되며, 디코더에는 다른 입력이 없습니다.

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

인코더 예시

# Instantiate the model
model = Sequential()

# Embeding layer for input language model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Add LSTM layer model.add(LSTM(128))
# Repeat the last vector model.add(RepeatVector(output_language_len))
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

디코더 예시

# Right after the encoder
model.add(LSTM(128, return_sequences=True))

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

데이터 준비

인코더와 디코더의 텍스트 준비. 인코더에서는 입력 언어를 숫자 인덱스 시퀀스로 변환하고, 디코더에서는 출력 언어에 대해 동일하게 처리하며 각 인덱스를 원-핫 인코딩합니다.

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

입력 언어 데이터 준비

# Import modules
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Use the Tokenizer class
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Text to sequence of numerical indexes X = tokenizer.texts_to_sequences(input_texts_list)
# Pad sequences X = pad_sequences(X, maxlen=length, padding='post')
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

출력 언어 토크나이즈

# Use the Tokenizer class
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Text to sequence of numerical indexes Y = tokenizer.texts_to_sequences(output_texts_list)
# Pad sequences Y = pad_sequences(Y, maxlen=length, padding='post')
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

출력 언어 원-핫 인코딩

# Instantiate a temporary variable
ylist = list()

# Loop over the sequence of numerical indexes for sequence in Y:
# One=hot encode each index on current sentence encoded = to_categorical(sequence, num_classes=vocab_size)
# Append one-hot encoded values to the list ylist.append(encoded)
# Transform to np.array and reshape Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

학습과 평가 참고

모델 학습:

model.fit(X, Y, epochs=N)

평가:

  • BLEU 사용
    • nltk.translate.bleu_score
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

연습해 봅시다!

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

Preparing Video For Download...