Dil modellerine giriş

Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

David Cecchini

Data Scientist

Cümle olasılığı

Birçok model mevcut

  • "I loved this movie" olasılığı.
  • Unigram
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-gram
    • N = 2 (bigram): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigram): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Cümle olasılığı (devam)

  • Skip-gram
    • $$P(\text{sentence}) = P(\text{I bağlamı} | \text{I})P(\text{loved bağlamı} | \text{loved}) \ $$ $$P(\text{this bağlamı} | \text{this})P(\text{movie bağlamı} | \text{movie})$$
  • Sinir Ağları
    • Cümlenin olasılığı, ağın çıktı katmanındaki softmax ile verilir
Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

RNN bağlantısı

RNN'lerde dil modelleri her yerde!

  • Ağın kendisi

RNN modelleri, bir sonraki kelimeyi tahmin edebildiği için bir dil modeli olarak görülebilir.

Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

RNN bağlantısı (devam)

  • Gömme (embedding) katmanı

Bir modeldeki katmanların genel görünümü. Gömme katmanı, girdi katmanından hemen sonra olmalı ve kelimelerin yoğun (dense) sunumunu üretir.

Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Sözlük oluşturma: kelime dağarcığı

# Benzersiz kelimeleri al
unique_words = list(set(text.split(' ')))
# Sözlük oluştur: anahtar kelime, değer dizin
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# Sözlük oluştur: anahtar dizin, değer kelime
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Girdiyi ön işleme

# Değişkenleri başlat: X ve y
X = []
y = []

# Metin üzerinde döngü: her seferinde `sentence_size` uzunluk, adım = `step` for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# Örnek (sayılar sözlükteki dizinlerdir):
# Cümle: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Yeni metinleri dönüştürme

# Dizinli cümleleri tutacak liste oluştur
new_text_split = []

# Döngü ve sözlükten dizinleri al 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)
Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Haydi pratik yapalım!

Keras ile Dil Modellemesi için Yinelenen Sinir Ağları (RNN)

Preparing Video For Download...