Introdução a modelos de linguagem

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

David Cecchini

Data Scientist

Probabilidade de sentença

Muitos modelos disponíveis

  • Probabilidade de "I loved this movie".
  • Unigrama
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-grama
    • N = 2 (bigrama): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigrama): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Probabilidade de sentença (cont.)

  • Skip-gram
    • $$P(\text{sentence}) = P(\text{context of I} | \text{I})P(\text{context of loved} | \text{loved}) \ $$ $$P(\text{context of this} | \text{this})P(\text{context of movie} | \text{movie})$$
  • Redes neurais
    • A probabilidade da sentença é dada por uma função softmax na camada de saída da rede
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Ligação com RNNs

Modelos de linguagem estão em todo lugar nas RNNs!

  • A própria rede

Modelos de RNN podem ser vistos como um modelo de linguagem, pois podem prever a próxima palavra.

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

Ligação com RNNs (cont.)

  • Camada de embedding

Exibe uma visão macro das camadas de um modelo. A camada de embedding deve ser a primeira após a camada de entrada e gera uma representação densa das palavras.

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

Construindo dicionários de vocabulário

# Get unique words
unique_words = list(set(text.split(' ')))
# Create dictionary: word is key, index is value
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# Create dictionary: index is key, word is value
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Pré-processando a entrada

# Initialize variables X and y
X = []
y = []

# Loop over the text: length `sentence_size` per time with step equal to `step` for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# Example (numbers are numerical indexes of vocabulary):
# Sentence is: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Redes Neurais Recorrentes (RNNs) para Modelagem de Linguagem com Keras

Transformando novos textos

# Create list to keep the sentences of indexes
new_text_split = []

# Loop and get the indexes from dictionary for sentence in new_text:
sent_split = []
for wd in sentence.split(' '):
ix = wd_to_index[wd]
sent_split.append(ix)
new_text_split.append(sent_split)
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...