Introductie tot taalmodellen

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

David Cecchini

Data Scientist

Zinwaarschijnlijkheid

Veel modellen beschikbaar

  • Kans op "I loved this movie".
  • Unigram
    • $$P(\text{zin}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-gram
    • N = 2 (bigram): $$P(\text{zin}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigram): $$P(\text{zin}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Zinwaarschijnlijkheid (vervolg)

  • Skip-gram
    • $$P(\text{zin}) = P(\text{context van I} | \text{I})P(\text{context van loved} | \text{loved}) \ $$ $$P(\text{context van this} | \text{this})P(\text{context van movie} | \text{movie})$$
  • Neurale netwerken
    • De kans op de zin komt uit een softmax-functie op de outputlaag van het netwerk
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Koppeling met RNN's

Taalmodellen zitten overal in RNN's!

  • Het netwerk zelf

RNN-modellen kun je zien als een taalmodel, omdat ze het volgende woord kunnen voorspellen.

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Koppeling met RNN (vervolg)

  • Embeddinglaag

Toont een macro-overzicht van de lagen in een model. De embeddinglaag moet de eerste na de invoerlaag zijn en genereert een dichte representatie van woorden.

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Woordenboek voor vocabulaire bouwen

# 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)}
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Voorbewerking van input

# 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)
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Nieuwe teksten omzetten

# 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)
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Laten we oefenen!

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Preparing Video For Download...