Introduzione ai modelli linguistici

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

David Cecchini

Data Scientist

Probabilità della frase

Molti modelli disponibili

  • Probabilità di "I loved this movie".
  • Unigramma
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-gram
    • N = 2 (bigramma): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigramma): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Probabilità della frase (cont.)

  • Skip-gram
    • $$P(\text{sentence}) = P(\text{contesto di I} | \text{I})P(\text{contesto di loved} | \text{loved}) \ $$ $$P(\text{contesto di this} | \text{this})P(\text{contesto di movie} | \text{movie})$$
  • Reti neurali
    • La probabilità della frase è data da una funzione softmax sul layer di output della rete
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Collegamento alle RNN

I modelli linguistici sono ovunque nelle RNN!

  • La rete stessa

I modelli RNN possono essere visti come modelli linguistici, perché possono prevedere la parola successiva.

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Collegamento alle RNN (cont.)

  • Layer di embedding

Mostra una rappresentazione macro dei layer in un modello. Il layer di embedding deve essere il primo dopo l'input e genera una rappresentazione densa delle parole.

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Creare i dizionari del vocabolario

# Ottieni le parole uniche
unique_words = list(set(text.split(' ')))
# Crea il dizionario: parola come chiave, indice come valore
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# Crea il dizionario: indice come chiave, parola come valore
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preprocessing dell'input

# Inizializza le variabili X e y
X = []
y = []

# Cicla sul testo: lunghezza `sentence_size` per volta con passo `step` for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# Esempio (i numeri sono indici del vocabolario):
# Frase: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Trasformare nuovi testi

# Crea la lista per conservare le frasi di indici
new_text_split = []

# Cicla e prendi gli indici dal dizionario 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)
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Andiamo a praticare!

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preparing Video For Download...