Tradução Neural de Máquinas

Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

David Cecchini

Data Scientist

Codificadores e decodificadores

Arquitetura de Tradução Neural de Máquinas. Esta arquitetura é dividida em partes de codificador e decodificador para os idiomas de entrada e saída, respectivamente. O codificador aprende um modelo de linguagem para o idioma de entrada e o decodificador aprende um modelo de linguagem para o idioma de saída. O estado final do codificador é passado ao decodificador, que não tem outra entrada.

Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Exemplo de codificador

# Instantiate the model
model = Sequential()

# Camada Embedding para o idioma de entrada model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Adicionar camada LSTM model.add(LSTM(128))
# Repetir o último vetor model.add(RepeatVector(output_language_len))
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Exemplo de decodificador

# Logo após o codificador
model.add(LSTM(128, return_sequences=True))

# Adicionar TimeDistributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Preparação dos dados

Preparação de texto para codificador e decodificador. No codificador, é preciso transformar o idioma de entrada em uma sequência de índices numéricos; no decodificador, fazemos o mesmo para o idioma de saída e também aplicamos one-hot em cada índice

Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Preparação dos dados para o idioma de entrada

# Import modules
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Usar a classe Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Texto para sequência de índices numéricos X = tokenizer.texts_to_sequences(input_texts_list)
# Preencher sequências (padding) X = pad_sequences(X, maxlen=length, padding='post')
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Tokenizar o idioma de saída

# Usar a classe Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Texto para sequência de índices numéricos Y = tokenizer.texts_to_sequences(output_texts_list)
# Preencher sequências (padding) Y = pad_sequences(Y, maxlen=length, padding='post')
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

One-hot no idioma de saída

# Criar uma variável temporária
ylist = list()

# Percorrer a sequência de índices numéricos for sequence in Y:
# One-hot em cada índice da sentença atual encoded = to_categorical(sequence, num_classes=vocab_size)
# Adicionar os valores one-hot à lista ylist.append(encoded)
# Transformar em np.array e fazer reshape Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Nota sobre treino e avaliação

Treinando o modelo:

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

Avaliando:

  • Use BLEU
    • nltk.translate.bleu_score
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Vamos praticar!

Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Preparing Video For Download...