DEV Community

Cover image for Yapay Zeka ile Metin Oluşturma: Q-Learning Algoritmasıyla Hedef Cümlelerin Üretilmesi
Ertugrul
Ertugrul

Posted on

Yapay Zeka ile Metin Oluşturma: Q-Learning Algoritmasıyla Hedef Cümlelerin Üretilmesi

1. Giriş

Yapay zeka ve makine öğrenimi, çağımızın en heyecan verici alanlarından biridir. Bu alanlar, insan benzeri zekanın yaratılması, karmaşık problemlerin çözülmesi ve veri odaklı kararların alınması gibi birçok uygulama alanında büyük potansiyel sunar. Bu kapsamda, doğal dil işleme (NLP) gibi alt alanlar, insanların doğal dilini anlama, işleme ve üretme yeteneği üzerine odaklanır.

Bu makalede, Q-learning algoritmasının doğal dil işleme alanındaki bir uygulamasına odaklanacağız. Özellikle, belirli bir hedef cümleyi oluşturma görevini ele alacağız. Q-learning, bir tür güçlendirme öğrenme tekniği olup, ajanın (burada algoritma) çevresiyle etkileşim kurarak en yüksek ödülü (reward) elde etmek için stratejiler geliştirmesine dayanır. Bu yöntemi kullanarak, hedef cümleyi oluşturmak için gereken karakter dizisini öğretecek ve modelin istenilen metni üretmesini sağlayacağız.

Bu bölümde, yapay zeka ve makine öğrenimi kavramlarına genel bir giriş yapacak ve ardından Q-learning algoritmasının temel prensiplerine odaklanacağız. Daha sonra, bu makalenin odaklanacağı spesifik problemi ve kullanılacak yaklaşımı tanıtacağız. Son olarak, makalenin geri kalanında ele alınacak konulara bir genel bakış sunacağız.

1.2 Q-Learning Algoritması Nedir ve Nerelerde Kullanılır?

Q-learning, güçlendirme öğrenme algoritmalarından biridir. Bu algoritma, ajanın (örneğin bir yapay zeka) çevresiyle etkileşimde bulunarak çevresinden öğrendiği bilgileri kullanarak en iyi eylemi seçmeyi amaçlar. Q-learning algoritması, ödül ve ceza gibi geri bildirimlerle ajanın davranışını şekillendirir. Bu algoritma, özellikle durumsal karar verme problemlerinde (örneğin oyunlar, robotik ve otomatik kontrol sistemleri) kullanılır.

Bu çalışmanın ilerleyen bölümlerinde, Q-learning algoritmasının metin oluşturma problemine uygulanması incelenecektir. Bu problemde, bir hedef cümle oluşturmak için Q-learning algoritmasını kullanarak modelin nasıl eğitileceği ve istenilen metni üretmek için nasıl kullanılacağı gösterilecektir.


2. Problem

Writing_man
Metin oluşturma problemi, yapay zeka tekniklerinin kullanıldığı bir alt alan olup, belirli bir metni (genellikle bir cümle veya paragrafı) otomatik olarak üretme amacını taşır. Bu problemde, bir hedef metin veya cümle belirlenir ve bu metni oluşturabilecek bir modelin eğitimi hedeflenir. Bu tür bir model, doğal dil işleme (NLP) alanında önemli bir uygulama alanına sahip olup, metin tabanlı sistemlerin geliştirilmesinde yaygın bir şekilde kullanılmaktadır.

2.2 Hedeflenen Cümle ve Karakterler Arasındaki İlişki

Bu belirli durumda, hedeflenen ifade Hello, how are you? şeklindedir. Bu ifade, temel bir iletişim örneğidir ve metin oluşturma modelinin bu ifadeyi üretebilmesi amaçlanmaktadır. Model, bu ifadeyi oluşturmak için adım adım ilerleyerek her adımda doğru karakteri seçmelidir. Fakat modelin karakter seçimindeki başarısı, Q-learning algoritması tarafından öğrenilecek ve geliştirilecektir.

2.3 Q-Learning ile Problem Çözme Yaklaşımı

Bu sorunun çözümü için, metin oluşturma sürecini modellemek için Q-learning algoritması kullanılmıştır. Q-learning, bir ajanın (burada metin oluşturma modeli) çevresiyle etkileşime girerek en iyi eylemi (burada karakter seçimi) öğrenmesini sağlar. Her adımda, model mevcut durumu değerlendirir, mevcut duruma bağlı olarak bir eylem seçer ve aldığı ödüle göre davranışını günceller. Bu süreç, hedeflenen cümle oluşturulana kadar devam eder. Bu çalışma kapsamında, metin oluşturma problemine odaklanacak ve Q-learning algoritmasının nasıl kullanıldığını ve bu algoritmaya dayalı olarak modelin nasıl eğitileceğini detaylı bir şekilde inceleyeceğiz. Ardından, eğitilen modelin kullanımı ve elde edilen sonuçların değerlendirilmesiyle ilgili ayrıntılara odaklanacağız.


3. Kod Yapısı ve Açıklamalar

Code

Bu kısımda, kullanılan kodun yapısı, içeriği ve hedefleri detaylı bir şekilde ele alınacaktır. Kod, metin oluşturma problemi için Q-learning algoritmasının nasıl uygulandığını içermektedir. Ek olarak, kullanılan kütüphaneler, değişkenlerin rolleri ve algoritmanın işleyişi ile ilgili açıklamalar sunulacaktır.

3.2 Kodun İçeriği ve Amaçları

Python programlama dili ile yazdığımız kodumuzun temel amacı, Q-Learning algoritması ile belirli bir hedef cümleyi oluşturabilen vir modelin eğitilebilmesidir.

Kodun Yapısı:

  1. Hedeflenen cümlenin tanımlanması.
  2. Karakterlerin ve alfabenin belirlenmesi.
  3. Q-learning algoritmasının uygulanması.
  4. Eğitim ve öğrenme sürecinin gerçekleştirilmesi.
  5. Eğitilen modelin kullanılması ve tahminlerin yapılması.

3.3 Kullanılan Kütüphaneler ve Araçlar

  1. Numpy: Sayısal hesaplamalar için kullanılan bir kütüphane olup, matris işlemleri ve veri manipülasyonu için idealdir (Kaynak: Numpy)
  2. Matplotlib: Veri görselleştirmesi için kullanılan bir kütüphanedir ve eğitim sonrası elde edilen Q değerlerinin ısı haritası şeklinde görselleştirilmesinde kullanılacaktır. (Kaynak: Matplotlib)

3.4 Değişkenlerin Tanımları ve Rolü

Hedef cümle: Öğretmek istediğimiz cümle.

sentence = "Hello, how are you?"
Enter fullscreen mode Exit fullscreen mode

Karakter listesi: Öğrenirken kullanacağı karakterler

characters = " abcdefghijklmnopqrstuvwxyz,?"
Enter fullscreen mode Exit fullscreen mode

Learning rate: Öğrenme eğrisi

alpha = 0.1  # Learning rate
Enter fullscreen mode Exit fullscreen mode

Gelecekteki ödüller için indirim faktörü:

gamma = 0.9
Enter fullscreen mode Exit fullscreen mode

Epochs: Kaç kere öğreneceği

num_episodes = 10000
Enter fullscreen mode Exit fullscreen mode

Bu değişkenlerin her biri, algoritmanın belirli bir adımında hangi eylemin seçileceğini, ödüllerin nasıl hesaplanacağını ve modelin nasıl güncelleneceğini belirlemek için rol oynar.


4. Kod

Bu bölümde kodu parça parça inceleyip açıklayacağız.

4.2 Kütüphanelerin indirilmesi

import numpy as np
import matplotlib.pyplot as plt
Enter fullscreen mode Exit fullscreen mode

Burada Numpy ve Matplotlib kütüphanelerini import ediyoruz.

4.3 Gerekli değerlerin belirlenmesi

sentence = "Hello, how are you?"
characters = " abcdefghijklmnopqrstuvwxyz,?"

alpha = 0.1  # Learning rate
gamma = 0.9  # Discount factor for future rewards
num_episodes = 10000  # Number of training episodes

Q = np.zeros((len(sentence), len(characters)))
Enter fullscreen mode Exit fullscreen mode

Zaten 3.3 Bölümde burada belirlediğim değerleri açıkladım. Sadece Q değerini açıklamamız gerekiyor.

Q: Her bir durum ve eylem kombinasyonu, o kombinasyonun değerini ifade eder. Bu değer, o durumda yapılan eylemin ne kadar arzu edildiğini veya avantajlı olduğunu gösterir. (Burada durum cümlenin oluşması eylem ise Harflerin seçilmesidir.)

4.4 Eğitimin yapılması

for episode in range(num_episodes):
    state = 0  
    done = False
    while not done:
        action = np.random.randint(len(characters))

        if state == len(sentence) - 1:
            done = True
        else:
            # Determine the next state
            next_state = state + 1

            if sentence[state] == characters[action]:
                reward = 1
            else:
                reward = 0

            Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])

            state = next_state

Enter fullscreen mode Exit fullscreen mode

Kodumuz yukarıda görüldüğü gibidir.

Parçalamak gerekirse:

state = 0 
done = False
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • state 0 sayısı ile belirlenir. Bu modelin cümlenin kaçıncı harfinde olduğunu gösterir.

  • done False olarak belirlenir. Bu bir eğitim sürecinin tamamlanıp tamamlanmadığını gösterir.


while not done:
        action = np.random.randint(len(characters))
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • While Loop'umuz başlar ve action içinde rastgele bir karakter atanır.

if state == len(sentence) - 1:
            done = True
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • Eğer state, cümlenin sonuna geldiyse done değerini True yapıyoruz.

if state == len(sentence) - 1:
            done = True
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • Eğer state, cümlenin sonuna geldiyse done değerini True yapıyoruz. Bu sayede eğitim son buluyor.

else:
     next_state = state + 1
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • Eğerki cümlenin sonuna gelinmediyse state değerini bir arttırıyoruz ve next_state diye bir değerde tutuyoruz.

if sentence[state] == characters[action]:
                reward = 1
            else:
                reward = 0
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • Eğerki cümlede tahmin edilmesi gereken karakteri, modelimiz doğru tahmin edebildiyse reward1, eğerki doğru tahmin edemediyse reward0 yapıyoruz.

Q[state, action] += alpha * (reward + gamma *np.max(Q[next_state]) - Q[state, action])

state = next_state
Enter fullscreen mode Exit fullscreen mode

Bu bölümde:

  • Bu bölümde Q değerimiz reward değeri ve diğer değerlerle güncelliyor ve öğrenmeyi sağlıyoruz. Bununla birlikte en sonunda state değerini next_state değerine eşitliyor bu sayede cümle içindeki sonraki karaktere geçiş işlemini sağlıyoruz.

4.5 Tahminin yapılması

Tahmin süreci Eğitim sürecine kıyasla daha basit.

predicted_sentence = ""
state = 0
while state < len(sentence):
    action = np.argmax(Q[state])
    predicted_sentence += characters[action]
    state += 1
print("Predicted Sentence:", predicted_sentence)
Enter fullscreen mode Exit fullscreen mode

Bu tahmin kodumuz. Kısaca:

  • Tahmin etmek istediğimiz cümlenin her harfini eğittimiz Q değerine göre modele tahmin ettiriyor ve bunu sırası ile bir String değerine kaydediyoruz (Kaydetme kısmı opsiyonel)

Örnek bir çıktı:

  1. 100 Tekrar ile eğitilmiş:

100Ep

  1. 500 Tekrar ile eğitilmiş:

500Ep

  1. 1000 Tekrar ile eğitilmiş:

1000Ep

İlerleyen zamanlarda örnek çıktıları karşılaştıracağız ama şimdilik Eğitim süresinin arttması ile modelimizin doğru tahmin etme beceresi paralel yükseliyor diyebiliriz. Bu çıkarımımız da bizi modelin öğrendiği düşüncesine götürüyor.

4.6 Modelin Göselleştirilmesi

En önemli bölümlerden biri olan Görselleştirme...

plt.figure(figsize=(12, 8))
plt.imshow(Q, cmap='hot', interpolation='nearest')
plt.colorbar(label='Q Value')
plt.title("Distribution of Q Values")
plt.xlabel("Action (Character)")
plt.ylabel("State")
plt.xticks(np.arange(len(characters)), list(characters))
plt.yticks(np.arange(len(sentence)), list(sentence))
plt.show()
Enter fullscreen mode Exit fullscreen mode

Yukarıda ki kod bloğu ile birlikte modelimizin Hangi durumda hangi aksiyonu daha doğru bulduğunu gösteriyor. Bu görselleştirme için Isı Haritası mdoelini seçtim. Çünkü anlaması ve okumasını daha basit olduğunu düşünüyorum ama siz dilediğiniz gibi diğer görselleştirme modellerini deneyebilirsiniz.

Örnek bir çıktı:

  1. 100 Tekrar ile eğitilmiş:

100Ep

  1. 500 Tekrar ile eğitilmiş:

500Ep

  1. 1000 Tekrar ile eğitilmiş:

1000Ep

5. Sonuçları karşılaştırma

  1. 100 Tekrar ile eğitilmiş:

100Ep

100Ep

  1. 500 Tekrar ile eğitilmiş:

500Ep

500Ep

  1. 1000 Tekrar ile eğitilmiş:

1000Ep

1000Ep
Sonuç olarak 3 ayrı tekrar sayısı ile eğitilmiş modelimiz var (100-500-1000). Modellerimizin hiç biri '?' bilemedi. Yüz tekrar ile eğitilmiş modelin çıktısı anlamsız olurken. Bin tekrar ile eğitilmis modelin çıktısı bir nebze daha anlaşılıt olmuş.

Ayrıca görüyoruz ki; Bin tekrar ile eğitilmiş modelimiz 'E' harfini nerelerde kullanacağını çok iyi bir şekilde öğrenmiş eğerki biraz daha eğitmeye devam etseydik yada parametlerimizi daha isabetli parametreler ile değiştirseydik, belkide soru işaretini de öğrenebilirdi ?..

Bunu da kendiniz deneyin...

6. Özet ve Kaynakça

Özetlemek Gerekirse:

Bu yazımda Q-Learning algoritmasına bir cümle tahmini projesi ile değindik. Kendiniz denemek isterseniz Github üzerinden kodu indirebilir veya Fotoğraflara ulaşabilirsiniz.

Github:


Detaylı öğrenim için İngilizce Kaynaklar:

Detaylı öğrenim için Türkçe Kaynaklar:

Eğer ki bir "Öneri-İstek-Soru"'nuz var ise lütfen yorum bırakın yada mail üzerinden bana ulaşın...

Top comments (0)