Yazılımcılar için Yapay Zeka Yolculuğu: Pratik Uygulamalar

Kardel Rüveyda ÇETİN
38 min readApr 27, 2024

Bilgisayar ekranının karşısına geçip, kod satırlarını yazmaya başladığınızda,farklı bir dünyanın kapılarını aralıyorsunuz değil mi? Sorunla karşılaştıkça araştırıyorsunuz, araştırdıkça daha çok sorun çıkıyor ve daha çok araştırıyorsunuz. Gün sonunda bu yaptığınız araştırmalar da sizin gelişmenize ve ilerlemenize katkı sağlıyor. Ancak son zamanlarda, bu dünyanın sınırlarını zorlayan temeli eskiye dayansa da yeni yeni artık yan rol değilim başrolüm diyebilecek kıvamda bir oyuncu hayatımıza dahil oldu: yapay zeka. İşte bu noktada, belki de hepimiz biraz endişeye kapıldık: “Yapay zeka, yazılımcıların işini elinden alacak mı?” temalı soru her yerde karşımıza çıkar oldu. Yetmedi Nvidia CEO’su Jensen Huang abi de ateşi harladı:

“Kodlama öğrenmeyin, bu işi artık yapay zeka yapacak.”

Jensen abiciğim ekmek teknemizle oynama onlar nasıl laflar diyemedik tabii, ee evet bilama[1] korktuk.

bilama:Karadeniz’de az, biraz anlamında kullanılan sözcük.

Peki neden korkuyoruz bu yapay zekadan? Çünkü belirlediğimiz istemleri verdiğimizde saniyeler içerisinde bunun kodunu yazıyor. Dokümantasyon süreçlerinde dokümanları hızlıca hazırlayabiliyor ve bunun gibi bir sürü işlemi kolaylıkla gerçekleştirebiliyor. İlk başlarda çokça duyuyordum. Karşı çıkan ve bu AI araçlarını kullanmayan birçok arkadaşım vardı. Belki de hepimiz başta ön yargıyla yaklaştık ama zamanla kullandıkça hayatımızı kolaylaştırdığının da farkına vardık. Aslında farkına vardığımız bir şey daha var bence.Eğer backend alanında, frontend alanında veya devops alanında, yani herhangi bir alanda görev alan IT çalışanıysanız sadece kendi alanınızla ilgili yetkin olmanın yeterli olmadığı ve olmayacağı bir dönemdeyiz. Yapay zekanın gelişimi çok hızlı bir şekilde gerçekleşiyor. Ve bizim de yazılımcılar olarak kendimizi bu geleceğe hazırlamamız gerekiyor. Peki o zaman kendimize dürüst olalım. Biz yapay zekadan mı korkuyoruz yoksa bize yüklenen yeni sorumluluklardan ve öğrenmemiz gereken yeni kavramlardan mı korkuyoruz ?

Korkmayalım. Konfor alanımızdan çıkmak her zaman iyidir. Yeni şeyler öğrenmenin zevki her zaman başkadır. Bu öğrendiğimiz bilgiler işimize de katkı sağlıyorsa ve zamanımızı daha efektif kullanmamızı sağlıyorsa daha da başkadır. Bu oturum kapsamında da bu gelişim için neler yapabiliriz onlardan bahsedeceğiz.! Haydi başlayalım :))

Konu Başlıkları

  • AI araçları işlerimizi nasıl kolaylaştırır? Yazılımcılar için popüler AI araçları nelerdir?
  • Veri bilimi,makine öğrenmesi gibi konularda çalışmak için matematik bilgisi ne kadar önemlidir? Hangi konu başlıklarına bakabilirim?
  • Veri bilimi ve makine öğrenmesi gibi konular için hangi programlama dilinde hangi konu başlıklarını öğrenebilirim?
  • Veri bilimi ve makine öğrenmesi gibi konularda çalışmak isteyen bir kişi hangi konu başlıklarına odaklanabilir?
  • Veri bilimcilerin Github’ı Hugging Face
  • Yazılımcılar için AI terimleri ( Bence Top 50 :) )
  • Large Languages Models (LLM ) Arkaplanı
  • LLM uygulamaları geliştirmek için kullanılan frameworkler
  • Web sitelerindeki bilgileri kullanarak bir sohbet robotu oluşturma(Langchain)
  • Sebebi ne ola ki? diye sorduğum sorular köşesi
  • Kaynaklar

AI araçları işlerimizi nasıl kolaylaştırır?

Yazılım geliştiriciler için yapay zeka (AI) araçları, bir dizi avantaj sunar ve işlerini önemli ölçüde kolaylaştırabilir ki bence kolaylaştırıyor da . En önemlisi zamandan tasarruf çünkü her anımız çok kıymetlii :)

Kod Otomatik Tamamlama Aracı (Örneğin: TabNine, Kite,Copilot): Bu tür araçlar, geliştiricilerin kod yazarken hızlarını artırır. Kodlama sırasında öneriler sunarak, geliştiricilerin hızlı bir şekilde kodlarını tamamlamalarına yardımcı olur. Bu, yazılım geliştirme sürecini daha verimli hale getirir.

Hata Tespiti ve Düzeltme Aracı (Örneğin: DeepCode, CodeAI): AI tabanlı hata tespiti araçları, kod tabanını otomatik olarak analiz eder ve olası hata noktalarını belirler. Bu, geliştiricilerin hataları daha erken aşamada tespit etmelerine ve düzeltmelerine olanak tanır, bu da yazılımın daha güvenilir olmasını sağlar.

Yazılım Test Otomasyonu (Örneğin: Applitools, Testim): AI destekli test otomasyon araçları, yazılım test süreçlerini otomatikleştirir ve geniş bir test kapsamı sağlar. Bu, geliştiricilerin manuel testlerden tasarruf etmelerine ve hızlı bir geri bildirim döngüsü elde etmelerine olanak tanır.

Veri Görselleştirme ve Analiz Araçları (Örneğin: Tableau, Power BI): Bu tür araçlar, geliştiricilerin büyük veri kümelerini analiz etmelerine ve görselleştirmelerine olanak tanır. AI tabanlı analiz özellikleri, verilerin derinlemesine incelenmesini ve anlamasını sağlar, bu da karar alma süreçlerini iyileştirir.

Bu araçlar, geliştiricilerin kod yazma süreçlerini hızlandırırken hataları daha erken tespit etmelerine ve düzeltmelerine olanak tanır. Ayrıca, test otomasyonu araçları manuel testlerden tasarruf sağlarken, veri görselleştirme ve analiz araçları büyük veri kümelerinin derinlemesine incelenmesini sağlar. Sonuç olarak, yapay zeka destekli araçlar, yazılım geliştirme sürecini daha verimli hale getirir ve geliştiricilere zaman kazandırırken daha güvenilir ve bilgiye dayalı kararlar almalarını sağlar. Yani aslında yapay zekayı lehimize çevirmek bizim elimizde, sadece derinliklerine inip çalışma mekanizmasını anlamaya çalışmanın değerli olacağına inanıyorum.

Popüler AI Araçları

Tabnine: Tabnine, kod tamamlama ve öneriler sunma amacıyla geliştirilmiş bir araçtır. Bir fonksiyonu yazarken veya bir IDE içinde kod yazarken otomatik tamamlama yapabilir. Ayrıca, yapay zeka sohbet özelliğine de sahiptir. Ancak, zaman karmaşıklığı gibi bazı konularda eksiklikleri olabilir. Test vakaları oluşturma ve daha karmaşık işlemleri gerçekleştirme konularında geliştirilmesi gerekebilir.

GitHub Co-pilot:GitHub Co-pilot, kod tamamlama yetenekleriyle bilinen bir araçtır. Kod yazarken doğru tamamlamaları sunmanın yanı sıra, kodu düzeltme ve test vakaları oluşturma gibi özelliklere de sahiptir. Karmaşık işlemleri gerçekleştirmede etkili olduğu görülmüştür.

Bard:Bard, kod tamamlama ve öneriler sunma yeteneklerine sahip bir araçtır. Kaynakları site etme yeteneği bulunmasına rağmen, bazen doğruluk konusunda zayıf olabilir. Diğer araçlarla karşılaştırıldığında daha düşük doğruluk sunabilir.

AWS Code Whisperer: AWS Code Whisperer, kod tamamlama ve öneriler sunma konularında diğer araçlarla benzer özelliklere sahiptir. Ancak, kullanıcılar tarafından daha az tercih edilen bir seçenek olabilir.

Veri bilimi ve makine öğrenmesi gibi konular için hangi programlama dilinde hangi konu başlıklarını öğrenmeliyim ?

Veri bilimi ve makine öğrenmesi gibi konular için genellikle Python programlama dili tercih edilir. Python, geniş bir veri bilimi ve yapay zeka ekosistemine sahip olduğu için bu alanlarda en yaygın olarak kullanılan dildir. Bence aşağıdaki konu başlıkları özelinde temel bir çalışma yapılması yeterli olabilir.

Temel Python Programlama

  • Sayılar ve karakter dizilerine giriş
  • Uzunluk bilgisine erişim ( len ) metotu
  • Büyük Küçük Harf dönüşümü (upper& lower) metotları
  • Karakter değiştirme ( replace metotu)
  • Karakter kırpma işlemleri ( strip metotu )
  • Karakter dizilerinde alt küme işlemleri ( substrings )
  • Değişkenler
  • Tip dönüşümleri
  • Print Kavramı
  • Liste oluşturma, liste elamanlarına erişim, ekleme,silme , güncelleme
  • Append ve Remove ile eleman ekleme, silme
  • Indekse göre eleman ekleme silme ( insert , pop )
  • Tuple işlemleri
  • Dictionary işlemleri
  • Set(Küme) oluşturma
  • Fonksiyon yazımı
  • If else, elif, for döngüleri
  • Class kavramı
  • Exception yapısı

Veri Manipülasyonu

Pandas ve NumPy kütüphaneleri kullanılabilir. Pandas kütüphanesi, veri çerçevelerini oluşturmak, veri işleme, temizleme, gruplama ve dönüştürme gibi veri manipülasyonu işlemlerini gerçekleştirmek için yaygın olarak kullanılır.NumPy ise, Python programlama dilinde bilimsel hesaplamalar için kullanılan temel bir kütüphanedir. NumPy, çok boyutlu dizilerin ve matrislerin işlenmesini kolaylaştırır ve bu işlemleri hızlandırmak için verimli birçok fonksiyon ve araç sağlar.

Hangisinin tercih edilmesi gerektiğine gelince, genellikle aşağıdaki kriterler göz önünde bulundurabiliriz

  1. Veri Tipi ve İşlem Türü: Eğer işiniz matematiksel hesaplamalar, lineer cebir işlemleri veya sayısal işlemlerle ilgiliyse, NumPy daha uygun olabilir. Ancak, veri manipülasyonu ve analizi yapmanız gerekiyorsa Pandas daha uygun olabilir.
  2. Veri Yapısı ve İşleme İhtiyaçları: Eğer veri tabloları üzerinde çalışıyorsanız ve veri çerçeveleri gibi yapıları işlemeniz gerekiyorsa, Pandas sizin için daha uygun olabilir. Ancak, çok boyutlu diziler veya matrislerle çalışmanız gerekiyorsa, NumPy daha uygun olabilir.
  3. Performans Gereksinimleri: NumPy, matematiksel işlemleri daha hızlı gerçekleştirebilir, bu nedenle büyük veri kümeleriyle çalışırken performans önemliyse NumPy tercih edilebilir.

Genel olarak, NumPy ve Pandas sıklıkla birlikte kullanılır ve birbirlerini tamamlayıcıdır. NumPy, temel veri işleme ve matematiksel hesaplamalar için temel sağlarken, Pandas daha yüksek düzeyde veri manipülasyonu ve analizi sağlar. Dolayısıyla, hangisinin tercih edilmesi gerektiği, spesifik kullanım senaryonuza ve gereksinimlerinize bağlı olacaktır.

Görselleştirme

Matplotlib ve Seaborn gibi kütüphaneler, veri görselleştirme işlemleri için kullanılır. Veriye görsel bir şekilde bakmak, trendleri ve ilişkileri daha iyi anlamanıza yardımcı olur.

  • Grafik Türü: Eğer temel grafik türlerini oluşturmanız gerekiyorsa ve grafiklerinizi tam olarak özelleştirmek istiyorsanız, Matplotlib daha uygundur. Ancak, özellikle istatistiksel grafikler oluşturmak istiyorsanız veya görselleştirmelerinizin daha profesyonel görünmesini istiyorsanız, Seaborn’u tercih edebilirsiniz.
  • Hız ve Kolaylık: Eğer hızlı bir şekilde grafikler oluşturmak ve temel veri keşfi ve analizi işlemlerini gerçekleştirmek istiyorsanız, Seaborn daha uygun olabilir. Matplotlib’e kıyasla, Seaborn genellikle daha az kod yazmanızı gerektirir.
  • Özelleştirme İhtiyacı: Eğer grafiklerinizin her yönünü tam olarak kontrol etmek istiyorsanız ve özelleştirme seçeneklerine ihtiyacınız varsa, Matplotlib daha uygun olabilir. Seaborn, daha sınırlı özelleştirme seçeneklerine sahip olabilir.

Makine Öğrenmesi

Scikit-learn kütüphanesi, çeşitli makine öğrenmesi algoritmalarını uygulamak ve modelleme işlemlerini gerçekleştirmek için kullanılır. Doğrusal regresyon, lojistik regresyon, karar ağaçları, destek vektör makineleri (SVM), k-NN gibi algoritmaları öğrenmek önemlidir.

Yeri gelmişken Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition ne güzel kitaptır…

Derin Öğrenme

TensorFlow ve PyTorch gibi derin öğrenme kütüphaneleri, sinir ağlarını oluşturmak ve eğitmek için kullanılır. Evrişimli sinir ağları (CNN’ler), rekurrent sinir ağları (RNN’ler), derin öğrenme uygulamalarını öğrenmek önemlidir.

Veri bilimi,makine öğrenmesi gibi konularda çalışmak için matematik bilgisi ne kadar önemlidir? Hangi konu başlıklarına bakmalıyım?

Matematik bilgisi, veri bilimi ve makine öğrenmesi gibi konularla çalışırken oldukça önemli bence. Bazı konularda ileri düzeyde matematik bilgisi, algoritmaların anlaşılması, veri analizi ve modelleme süreçlerinin başarılı bir şekilde gerçekleştirilmesi için kritik olduğunu düşünüyorum.

  • Lineer Cebir: Matrisler, determinantlar, vektörler gibi konuları anlamak veri manipülasyonunda ve model oluşturulmasında oldukça önemlidir.
  • Calculus (Kalkülüs): Türev ve integral gibi konular, optimizasyon algoritmaları ve gradyan inişi gibi makine öğrenmesi algoritmalarında sıkça kullanılır.
  • İstatistik: Olasılık teorisi, istatistiksel dağılımlar, regresyon analizi gibi konular, veri analizi ve modelleme süreçlerinde temel bir rol oynar.
  • Olasılık Teorisi: Makine öğrenmesi modellerinin olasılıksal temellerini anlamak için önemlidir. Bayes teoremi gibi konular bu bağlamda kritiktir.
  • Optimizasyon Teorisi: Eniyileme problemlerini çözmek için kullanılır ve makine öğrenmesi algoritmalarının birçoğunun temelini oluşturur.
  • Doğrusal Programlama: Sınırlı kaynaklarla yapılan eniyilemelerde kullanılır ve bazı makine öğrenmesi modellerinin optimizasyonunda önemlidir.
  • Bilgisayar Bilimi ve Algoritmalar: Algoritma analizi ve karmaşıklığı, veri yapısı ve algoritmaların etkili bir şekilde uygulanmasını sağlar.
  • Büyük Veri İşleme: Dağıtık hesaplama, paralel programlama gibi konular büyük veri setleriyle çalışırken gereklidir.

Ama genelde kütüphaneleri kullanıyoruz, o zaman neden bunları öğrenmek gerekiyor?

Veri bilimi ve makine öğrenmesi alanlarında kütüphaneler oldukça yaygın olarak kullanılırken, temel matematik bilgisinin pratik uygulamalarda önemli bir rol oynadığı birçok durum bulunmaktadır. Öncelikle, model seçimi ve ayarlama aşamasında matematiksel metriklerin kullanımı önemlidir. Model performansını değerlendirmek için kullanılan doğruluk, hassasiyet, geri çağırma gibi metrikler, matematiksel hesaplamalara dayanır. Ayrıca, veri ön işleme aşamasında, eksik veya bozuk verilerin işlenmesi, normalleştirme, standartlaştırma gibi işlemler yapılırken matematiksel dönüşümler ve hesaplamalar kullanılır. Makine öğrenmesi modelleri genellikle bir optimizasyon problemi olarak formüle edilir ve model parametrelerini optimize etmek için gradyan inişi veya diğer optimizasyon algoritmaları kullanılır, bu da matematiksel hesaplamalara dayanır. Bir modelin performansını değerlendirmek için çapraz doğrulama, ROC eğrisi analizi, hata matrisi gibi teknikler kullanılır ve bu teknikler matematiksel hesaplamalara dayanır. Yeni bir makine öğrenmesi modeli oluştururken veya mevcut bir modeli iyileştirmeye çalışırken, modelin matematiksel temellerini anlamak önemlidir çünkü bu, modelin doğru şekilde tasarlanması ve uygulanması için gereklidir. Son olarak, model eğitimi veya tahmin sürecinde hataları gidermek için matematik bilgisine ihtiyaç vardır ve matematiksel hata analizi yaparak neden bir modelin yanlış tahminler yaptığını anlamak mümkündür. Bu nedenlerden dolayı, kütüphaneler bize birçok işlevsellik sunsa da, bu işlevselliği doğru bir şekilde kullanmak ve sonuçları yorumlamak için temel matematik bilgisine sahip olmak önemlidir.

Peki konu başlıklarından matematik konularıyla ilgili başlık havuzu oluştursam içinde neler olurdu?

  • Merkezi Eğilim Ölçüleri : Mod, Medyan,Kartiller
  • Dağılım Ölçüleri : Değişim Aralığı Kavramı,Standart Sapma,Varyans,Çarpıklık,Basıklık
  • Veri bilimi için istatistik: Betimsel İstatistik Kavramı, Güven Aralıkları, Bernoulli Dağılımı, Büyük Sayılar Yasası, Biniom Dağılımı, Poisson Dağılımı, Normal Dğaılım, Hipotez Testi,Tek Örneklem T Testi, Varyans Analizi, Korelasyon Analizi

Veee güzel bir kitap da öneririm :)

Veri bilimi ve makine öğrenmesi gibi konularda çalışmak isteyen bir kişi hangi konu başlıklarına odaklanabilir?

Matematik alanındaki ve programlama dili alanındaki gelişmelerden ayrıca bahsetmiştik. Peki farklı konu başlıkları ne olabilir? Ben öncelikli olarak öğrenmeye çalıştım?

Veri tabanı

Araştırmalara göre makine öğrenmesi tarafında kendine bir yol haritası çizmek isteyen kişiler veri tabanında genellikle MySQL ve MongoDB’yi seçiyorlarmış . Peki neden olabilir ? Birlikte

MySQL

  • İlişkisel veritabanı yönetim sistemidir (RDBMS).
  • SQL tabanlıdır, standart SQL sorgularını destekler.
  • Tablolar arasında ilişkileri yönetmek ve veri bütünlüğünü korumak için kullanılır.
  • Yapısal veriler için idealdir, sık sık kullanılan birçok uygulama ve web sitesi tarafından tercih edilir.
  • ACID (Atomicity, Consistency, Isolation, Durability) özelliklerine uygun olarak çalışır, bu da veri bütünlüğünü sağlar.
  • Daha geleneksel bir veritabanı sistemidir ve geniş bir topluluğa ve dokümantasyona sahiptir.

MongoDB

  • NoSQL tabanlıdır, belge odaklı (document-oriented) bir veritabanıdır.
  • JSON benzeri BSON formatında dokümanları depolar.
  • Yapısal esneklik sağlar, çünkü her bir doküman farklı alanlara sahip olabilir.
  • Büyük miktarda değişken veya hiyerarşik veri saklamak için idealdir.
  • Genellikle büyük ölçekli, dağıtık sistemler ve bulut tabanlı uygulamalar tarafından tercih edilir.
  • ACID yerine BASE (Basically Available, Soft state, Eventually consistent) prensibine dayalıdır, bu da daha esnek ve ölçeklenebilir bir yapı sağlar.

ML Algoritmaları

Machine Learning algoritmalarına baktığımızda çeşitlilik çok fazla, temel anlamda öğrenmeye başlarken araştırmalar istinaden daha çok Lineer Lojistik Regresyon, KNN,K-means ve Random Forest gibi algoritmalar öncelikli görünüyor

Lineer Lojistik Regresyon

“Lineer Lojistik Regresyon”, genellikle sınıflandırma problemleri için kullanılan bir yöntemdir. Adı “lojistik” kelimesinden gelir, çünkü lojistik fonksiyon adı verilen bir aktivasyon fonksiyonu kullanır. Temel olarak, lojistik regresyon, bağımsız değişkenlerin bir lineer kombinasyonunu alarak bir bağımlı değişkenin olasılığını tahmin eder. Bu bağımlı değişken genellikle iki sınıftan birine ait olma olasılığıdır (binary sınıflandırma). Lineer regresyonda olduğu gibi, lojistik regresyon da bir doğru veya düzlemle veri noktalarını en iyi şekilde ayırmak için kullanılır. Ancak lojistik regresyon, çıktıyı bir olasılık değeri (0 ile 1 arasında) olarak döndürür. Modelin çıktısı genellikle sigmoid fonksiyonu ile geçirilir. Sigmoid fonksiyonu, sonsuz aralıktaki girdiyi (örneğin, lineer kombinasyon sonucunu) 0 ile 1 arasında bir değere dönüştürür. Bu, çıktının bir sınıfa ait olma olasılığını temsil etmesini sağlar. Lojistik regresyon, özellikle ikili sınıflandırma problemlerinde (Örneğin, bir e-postanın spam olup olmadığını tahmin etme gibi) yaygın olarak kullanılır.

K-En Yakın Komşuluk (KNN):

  • Temelde “benzerlik” prensibine dayanan bir sınıflandırma ve regresyon algoritmasıdır.
  • Veri noktalarını, etrafındaki k en yakın komşusunun sınıf etiketlerine veya değerlerine dayanarak sınıflandırır veya tahmin eder.
  • Belirli bir veri noktasının sınıfını veya değerini tahmin etmek için, bu noktaya en yakın k komşunun etiketlerini veya değerlerini kullanır.
  • Özellikle küçük boyutlu veri setlerinde etkilidir ve karmaşıklığı düşüktür.

K-Means Kümeleme

  • Veri noktalarını belirli bir sayıda küme veya grup içinde kümelendirir.
  • Her bir küme, o kümenin merkezi (centroid) etrafında toplanan benzer veri noktalarından oluşur.
  • Başlangıçta rastgele seçilen merkezler üzerinden iteratif bir süreçle veri noktalarını en yakın merkezlere atar ve merkezleri günceller.
  • Kümeleme için önceden belirlenmiş bir sayı olan k değeri, kullanıcı tarafından belirlenir.
  • Pazarlama segmentasyonu, müşteri profili analizi ve görüntü işleme gibi alanlarda kullanılabilir.

KNN (K-En Yakın Komşu), yeni veri noktalarını sınıflandırmak veya tahmin etmek için, onların komşularının etiketlerine dayanır. Veri noktalarının benzerliklerine dayanarak sınıflandırma veya regresyon yapar. K-means ise, veri noktalarını belirli sayıda kümeye ayırır, bu kümelerin merkezini hesaplar ve her veri noktasını en yakın kümeye atar. K-means, kümeleme problemlerinde kullanılırken, KNN sınıflandırma ve regresyon problemlerinde kullanılır.

Makine Öğrenmesi Konu Başlıkları

Denetimli Öğrenme (Supervised Learning): Denetimli öğrenme, etiketlenmiş veri kümesine dayanır, yani her girdi için doğru çıktıları içerir. Algoritmalar, bu etiketlenmiş verileri kullanarak giriş ve çıkış arasındaki ilişkiyi öğrenir. Bu tür öğrenme, sınıflandırma ve regresyon gibi tahminleme problemlerini çözmek için yaygın olarak kullanılır.

Denetimsiz Öğrenme (Unsupervised Learning): Denetimsiz öğrenme, etiketlenmemiş veri kümesine dayanır, yani veri noktalarının doğru çıktıları yoktur. Algoritmalar, veri setindeki kalıpları, benzerlikleri veya yapıları keşfetmeye çalışır. Kümeleme, boyut azaltma ve asosiyasyon kuralları gibi görevler bu kategori altında yer alır.

Takviyeli Öğrenme (Reinforcement Learning): Takviyeli öğrenme, bir ajanın bir ortamla etkileşimde bulunarak deneyim yoluyla öğrenmesine dayanır. Ajan, bir belirli bir hedefe ulaşmak için çevresindeki durumları gözlemleyerek ve bu durumlara bağlı olarak eylemler seçerek öğrenir. Bu öğrenme türü, oyun teorisi, robotik ve otomatik ticaret gibi alanlarda kullanılır. Burada da detaylı yazısı mevcut

Derin Öğrenme

Açıkçası bu alan ile ilgili deneyimim çok fazla olmadı. Sadece yüksek lisansta Mert Bal hocamın tavsiyesi ile CNN-CAE kullanılan bir makaleyi inceleme fırsatım olmuştu. Burada yumurtalık kanseri ultrasonlarının datası ile CNN-CAE yöntemleri kullanılarak yumurtalık kanseri teşhisi yapılıyordu. Çok ilgimi çekmişti. Şuraya bırakıyorum.

Aşağıdaki konu başlıkları da bu alanla ilgili çalışıyorsak araştırmalara istinaden temel olarak bilmemiz gereken konu başlıkları diyebilirim.

TensorFlow: Google tarafından geliştirilen açık kaynaklı bir derin öğrenme kütüphanesidir. Grafiksel hesaplama için kullanılır ve genellikle yapay sinir ağları oluşturmak ve eğitmek için tercih edilir.

Keras: Yüksek seviyede bir yapay sinir ağı API’si olan Keras, TensorFlow gibi altta yatan kütüphaneleri kullanarak derin öğrenme modelleri oluşturmayı ve eğitmeyi kolaylaştırır.

Yapay Sinir Ağları (Neural Networks): Beyindeki nöronların işleyişinden esinlenen matematiksel modellerdir. Veriler arasındaki karmaşık ilişkileri öğrenmek için kullanılır.

Evrişimli Sinir Ağları (CNN — Convolutional Neural Networks): Özellikle görüntü işleme görevleri için etkili olan bir yapay sinir ağı türüdür. Görüntülerdeki desenleri ve özellikleri algılamak için kullanılır.

Tekrarlayan Sinir Ağları (RNN — Recurrent Neural Networks): Ardışık verilerdeki zaman veya sıra gibi yapıları işlemek için kullanılan yapay sinir ağı türüdür. Doğal dil işleme ve zaman serisi tahmini gibi görevler için yaygın olarak kullanılır.

Uzun Kısa Süreli Hafıza Ağları (LSTM — Long Short-Term Memory): RNN’lerin geliştirilmiş bir versiyonudur ve zaman serisi veya metin verilerindeki uzun vadeli bağımlılıkları daha etkili bir şekilde modellemek için kullanılır.

Generative Adversarial Networks (GAN): İki yapay sinir ağı olan bir modeldir: biri veri üretirken diğeri bu veriyi ayırt etmeye çalışır. Bu çatışma sonucunda yaratıcı ve gerçekçi veriler üretebilen bir model elde edilir. Özellikle görüntü sentezi alanında kullanılır.

Veri bilimcilerin Github’ı Hugging Face

Hugging Face ile ilgili nacizane fikrim bence veri bilimcilerin Github’ı olduğu yönünde. Hugging Face, açık kaynaklı yapay zeka ve doğal dil işleme (NLP) projeleri için bir platform sağlar. Bu platform, araştırmacıların, geliştiricilerin ve topluluk üyelerinin bir araya gelip model paylaşımı yapabileceği, modelleri keşfedebileceği ve işbirliği yapabileceği bir ortam sunar.Hugging Face’in , birçok NLP modeli, dil modelleri, önceden eğitilmiş modeller, örneklem kodları ve hatta çalışma defterleri gibi birçok kaynağın bulunduğu bir havuzdur. Araştırmacılar ve geliştiriciler, bu kaynakları inceleyebilir, kullanabilir, özelleştirebilir ve hatta kendi katkılarını yapabilirler. Keza ben de buradan birçok modeli kullanarak finetune denemeleri gerçekleştirdim.

Birçok endüstri ve akademik kuruluş, Hugging Face’in havuzlarından faydalanarak NLP projelerini hızlandırır ve geliştirir. Bu nedenle, Hugging Face’in, veri bilimciler ve yapay zeka araştırmacıları için değerli bir kaynak olarak kabul edilebilir.

Ee beni de takip edersiniz artık. Takipe takip!

PS: Logosu da pek tatlı bence :D 🤗

Yazılımcılar için AI terimleri ( Bence Top 50 :) )

  1. ML (Machine Learning — Makine Öğrenimi): Bilgisayar sistemlerinin veri üzerinden örüntüler öğrenerek kararlar almasını sağlayan bir yapay zeka dalıdır.
  2. Fine-tuning (İnce Ayarlama): Önceden eğitilmiş bir makine öğrenimi modelinin, belirli bir görev için daha iyi performans göstermesi amacıyla, genellikle sınırlı bir veri kümesiyle veya hedef görevin özel gereksinimlerine uyacak şekilde yeniden eğitilmesidir.
  3. Full Training (Tam Eğitim): Bu terim, bir makine öğrenimi modelinin tüm veri kümesi üzerinde eğitildiği anlamına gelir. Bu, tüm veri kümesinin model için kullanıldığı anlamına gelir, yani veri seti bir eğitim seti, doğrulama seti ve test seti olarak ayrılmaz.
  4. Train/Test Split (Eğitim/Test Bölünmesi): Veri kümesinin bir kısmının modelin eğitimi için kullanıldığı, diğer kısmının ise modelin performansının değerlendirilmesi için ayrıldığı işlemdir. Bu, modelin genelleme yeteneğini değerlendirmeye yardımcı olur.
  5. Training Data (Eğitim Verisi): Makine öğrenimi modelinin eğitildiği veri kümesidir. Bu veri, modelin belirli bir görevi öğrenmesi için kullanılır.
  6. Validation Data (Doğrulama Verisi): Modelin eğitimi sırasında kullanılan, ancak modelin performansını doğrulamak için ayrılan veri kümesidir. Modelin aşırı uydurmayı (overfitting) önlemek için kullanılır.
  7. Test Data (Test Verisi): Eğitim süreci tamamlandıktan sonra modelin gerçek dünya performansını değerlendirmek için ayrılan veri kümesidir. Modelin ne kadar iyi genelleme yaptığını belirlemek için kullanılır.
  8. Hyperparameters (Hiperparametreler): Makine öğrenimi algoritmalarının performansını etkileyen, kullanıcı tarafından belirlenen ayar değerleridir. Örnek olarak, öğrenme oranı, epoch sayısı, ağ yapısı gibi değerler verilebilir.
  9. Loss Function (Kayıp Fonksiyonu): Modelin tahminlerinin gerçek değerlerden ne kadar uzak olduğunu ölçen bir fonksiyondur. Modelin ne kadar iyi performans gösterdiğini değerlendirmek için kullanılır.
  10. Overfitting (Aşırı Uydurma): Modelin eğitim verisine çok iyi uyması, ancak yeni verilere genelleme yapma yeteneğinin düşük olması durumudur. Bu, modelin gereksiz karmaşıklığının veya eğitim verisindeki gürültünün bir sonucu olabilir.
  11. Batch Size (Toplu Boyut): Bir eğitim adımında kullanılan örneklerin sayısıdır. Daha büyük toplu boyutlar genellikle eğitim sürecini hızlandırabilir, ancak bellek gereksinimlerini artırabilir.
  12. Epoch (Dönem): Bir eğitim setinin tamamının bir kez model tarafından görüldüğü zaman bir dönem olarak adlandırılır. Bir modelin eğitimi sırasında kaç dönem geçirileceği belirlenir.
  13. Activation Function (Aktivasyon Fonksiyonu): Yapay sinir ağlarında bir nöronun çıktısını hesaplamak için kullanılan bir fonksiyondur. Örnek olarak, ReLU (Rectified Linear Activation), sigmoid ve tanh fonksiyonları verilebilir.
  14. Gradient Descent (Gradyan Azalma): Bir optimizasyon algoritmasıdır ve bir modelin parametrelerini güncellemek için kullanılır. Amaç, kayıp fonksiyonunu minimize eden en iyi parametreleri bulmaktır.
  15. Backpropagation (Geri Yayılım): Bir yapay sinir ağı modelinin eğitimi sırasında, modelin çıktıları ile gerçek etiketler arasındaki farkı hesaplamak ve bu farkı ağın her katmanına geriye doğru (backward) yayarak gradyanları hesaplamak için kullanılan bir algoritmadır.
  16. Dropout: Ağın öğrenme sırasında rastgele nöronları devre dışı bırakarak aşırı uydurmayı (overfitting) önlemek için kullanılan bir regülerleştirme tekniğidir.
  17. Transfer Learning (Transfer Öğrenimi): Önceden eğitilmiş bir modelin, yeni bir görev için tekrar kullanılmasıdır. Bu, genellikle yeni görev için yeterli veri yoksa veya eğitim süresini azaltmak istendiğinde kullanılır.
  18. Reinforcement Learning (Pekiştirmeli Öğrenme): Bir ajanın bir ortamda belirli bir hedefi başarmak için deneyerek öğrenme sürecidir. Ajan, ortamdan aldığı geri bildirimlere dayanarak davranışını ayarlar.
  19. Gaussian Mixture Model (GMM): Bir veri kümesinin gizli bir Gaussian dağılımından üretildiğini varsayan bir modeldir. Kümenin bileşenleri ve bu bileşenlerin ağırlıkları parametrik olarak tahmin edilir.
  20. LoRA (Label-Only Rehearsal Approach): Bu, yeniden eğitme sırasında yalnızca etiketlerin kullanıldığı bir tekniktir. Yeni veri gelmediği sürece, modelin öğrenme yeteneğini korumak için mevcut veriye dayalı olarak modeli sürekli olarak yeniden eğitme fikrine dayanır.
  21. Q-Learning: Bir pekiştirmeli öğrenme algoritması olan Q-öğrenme, bir ajanın bir ortamda belirli bir hedefi başarmak için deneyerek öğrenme sürecidir. Bu, ajanın bir durumdan diğerine hareket ederek ve her adımda belirli bir hareket için bir değer hesaplayarak gerçekleşir.
  22. QLORA (Q-Learning Oriented Reinforcement Learning Algorithm): Bu algoritma, Q-öğrenme temelli bir pekiştirmeli öğrenme algoritmasıdır. QLORA, bir ajanın bir görevi en iyi şekilde yerine getirmek için Q-öğrenme algoritmasını kullanarak öğrenmesini sağlar.
  23. PEFT (Policy Evaluation Function Transfer): Bu, politika değerlendirme işlevi transferi anlamına gelir. Bir görev için önceden eğitilmiş bir modelin, yeni bir görev için politika değerlendirme işlevini (policy evaluation function) aktarmak amacıyla kullanılmasıdır.
  24. RAG (Retrieval-Augmented Generation): RAG, dilsel nesne oluşturma modellerinde kullanılan bir yöntemdir. Bu yöntem, büyük bir bilgi bankasından metin parçalarını alarak ve ardından bir modelin bu metinleri kullanarak yeni metinler oluşturmasını sağlayarak çalışır.
  25. Recurrent Neural Network (RNN — Tekrarlayan Sinir Ağı): Ardışık verilerle çalışmak için tasarlanmış bir yapay sinir ağı türüdür. Zaman serisi verileri veya doğal dil gibi ardışık veri türlerinde başarıyla kullanılır.
  26. Long Short-Term Memory (LSTM): RNN’lerin bir alt türüdür ve ardışık verilerin daha uzun bağımlılıklarını işlemek için tasarlanmıştır. Özellikle zaman serisi verileri analiz etmek için etkilidir.
  27. Convolutional Neural Network (CNN — Evrişimli Sinir Ağı): Özellikle görüntü işleme alanında kullanılan bir yapay sinir ağı türüdür. Görüntülerdeki desenleri tanımak için evrişim ve havuzlama katmanları kullanır.
  28. Autoencoder: Girdi verisini kodlamak ve ardından orijinal veriyi yeniden oluşturmak için kullanılan bir tür yapay sinir ağıdır. Veri sıkıştırma ve öznitelik çıkarma için kullanılır.
  29. Encoder: Girdi verisini temsil eden bir dizi girdi alır ve bu girdileri daha yüksek seviyeli bir temsile dönüştürür. Örneğin, bir metin belgesini içeren bir dizi kelimeyi alır ve bu kelimeleri bir dilin anlamlı bir temsiline dönüştürür. Bu işlem, bir dilin özniteliğini veya bir görüntünün özniteliğini temsil eden bir vektör gibi bir çıktı üretir. BERT (Bidirectional Encoder Representations from Transformers) bir encoder modelidir. Metin verisini işlemek için kullanılır ve her bir kelimenin bir dildeki anlamsal temsilini öğrenir.
  30. Decoder: Encoder tarafından üretilen yüksek seviyeli temsili alır ve bu temsili farklı bir formatta çevirir veya yeniden oluşturur. Örneğin, bir dilin anlamsal temsilini alan bir decoder, bu temsili hedef bir dildeki bir metin belgesine çevirebilir veya bir görüntünün özniteliklerini alan bir decoder, bu öznitelikleri yeniden oluşturmak için bir görüntü üretebilir.GPT (Generative Pre-trained Transformer) ise bir decoder modelidir. Metin üretmek için kullanılır ve verilen bir başlangıç ​​metni kullanarak devam eden metni oluşturur. GPT, bir dil modeli olarak bilinir ve büyük bir metin veri kümesinde önceden eğitilmiştir.
  31. GAN (Generative Adversarial Network — Üretici Karşıt Ağlar): İki ağın (üretici ve ayırt edici) birbirine karşı yarıştığı bir derin öğrenme modelidir. Üretici ağ, gerçekçi veriler oluştururken, ayırt edici ağ, gerçek ve sahte verileri birbirinden ayırt etmeye çalışır.
  32. Batch Normalization: Bir yapay sinir ağındaki her katmandan gelen çıktıları normalleştirerek eğitim sürecini hızlandıran bir tekniktir. Ayrıca ağın daha hızlı ve daha istikrarlı bir şekilde eğitilmesini sağlar.
  33. Word Embedding (Kelime Gömme): Doğal dil işleme uygulamalarında kullanılan bir tekniktir. Kelimeleri temsil etmek için kullanılır ve kelime vektörlerinin bir uzayında benzer anlamlı kelimeler birbirine daha yakın olur.
  34. Federated Learning: Merkezi bir sunucu yerine dağıtılmış cihazlar arasında model eğitimi yapılmasını sağlayan bir makine öğrenimi tekniğidir. Kişisel veri gizliliğini korurken model performansını artırabilir.
  35. Transformer: Doğal dil işleme ve diğer ardışık veri işleme görevlerinde kullanılan bir modeldir. Dikkat mekanizmalarını kullanarak uzun mesafeli bağımlılıkları ele alır.
  36. Attention Mechanism (Dikkat Mekanizması): Özellikle dil işleme alanında kullanılan bir mekanizmadır. Modelin belirli kısımlarına daha fazla ağırlık vermesini sağlar, böylece model daha doğru sonuçlar üretebilir.
  37. Bert (Bidirectional Encoder Representations from Transformers): Google tarafından geliştirilen, doğal dil işleme görevlerinde son derece etkili olan bir modeldir. Pre-trained bir modeldir ve çeşitli dil işleme görevlerinde kullanılabilir.
  38. Bert-Cased: “Cased” BERT modeli, metin verisini büyük/küçük harf duyarlılığını koruyarak işler. Yani, metin verisindeki büyük ve küçük harfler arasındaki farkı dikkate alır. Örneğin, “Apple” ve “apple” kelimelerini farklı kelimeler olarak algılar.
  39. Bert-Uncased: “Uncased” BERT modeli, metin verisini tamamen küçük harflere dönüştürerek işler. Bu durumda, metin verisindeki tüm harfler küçük harfe dönüştürülür. Bu yöntem, metin verisindeki harf büyüklüğünün önemli olmadığı durumlarda tercih edilir ve genellikle daha fazla veriyi öğrenme yeteneğine sahiptir.
  40. Random Forest: Karar ağaçlarından oluşan bir ansambil öğrenme algoritmasıdır. Her bir ağaç, rasgele bir alt veri kümesi ve rasgele özellikler üzerinde eğitilir ve ardından sonuçlar birleştirilerek tahmin yapılır.
  41. K-Means Clustering: Veri noktalarını belirli bir sayıda küme veya grup içinde kümelemek için kullanılan bir kümeleme algoritmasıdır. Her küme, merkezi olandan diğer veri noktalarına olan mesafelerin toplamının minimize edildiği şekilde oluşturulur.
  42. Principal Component Analysis (PCA — Temel Bileşen Analizi): Yüksek boyutlu veri setlerindeki değişkenliği azaltmak için kullanılan bir boyut azaltma tekniğidir. Verinin varyansını en üst düzeye çıkaran yeni değişkenler oluşturur.
  43. Word2Vec: Bir kelimeyi temsil etmek için kullanılan bir dizi yöntemdir. Kelimelerin vektör uzayında benzer anlamlı kelimelerle yakın konumda olmasını sağlar.
  44. Support Vector Machine (SVM — Destek Vektör Makineleri): Sınıflandırma ve regresyon problemleri için kullanılan bir makine öğrenimi algoritmasıdır. Veri noktalarını sınıflar arasında bir karar sınırı oluşturarak ayırır.
  45. Decision Tree (Karar Ağacı): Bir sınıflandırma veya regresyon modeli oluşturmak için kullanılan bir ağaç yapısıdır. Her iç düğüm, bir özellikle ilişkilendirilir ve her yaprak düğüm, bir sınıf etiketi veya bir sayısal değer içerir.
  46. Gaussian Naive Bayes: Sınıflandırma problemleri için kullanılan bir makine öğrenimi algoritmasıdır. Bayes teoremine dayanarak, özellikler arasındaki ilişkiyi basit ve hızlı bir şekilde modellemek için kullanılır.
  47. K-Nearest Neighbors (K-En Yakın Komşular): Sınıflandırma veya regresyon problemlerinde kullanılan bir algoritmadır. Bir veri noktasının sınıfını veya değerini, komşularının sınıfları veya değerleri temel alınarak tahmin eder.
  48. Logistic Regression (Lojistik Regresyon): Sınıflandırma problemlerinde kullanılan bir yöntemdir. Sonucun bir kategoriye ait olma olasılığını tahmin etmek için kullanılır.
  49. Markov Decision Process (MDP — Markov Karar Süreci): Belirli bir ortamda bir ajanın hareket etme ve karar alma problemi çözümlemek için kullanılan bir matematiksel çerçevedir. Her durumun bir durum uzayı ve her eylemin bir eylem uzayı vardır.
  50. One-hot Encoding: Kategorik değişkenleri sayısal formata dönüştürmek için kullanılan bir yöntemdir. Her kategori bir vektörde bir dize oluşturularak temsil edilir, ve sadece kategorinin pozisyonunda 1, diğer pozisyonlarda ise 0 bulunur.

Large Languages Models (LLM ) Arkaplanı

Language models (LLM’ler), yapay zeka alanında son zamanlarda büyük bir ilgi görmektedir. Bu ilginin ana nedenlerinden biri, LLM’lerin sıfır atış öğrenme yeteneğiyle ilişkilendirilmesidir. Zero Shot Learning(Sıfır atış öğrenme), modelin önceden belirli sınıflarla eğitilmediği durumlarda bile yeni sınıfları tanıma yeteneğini ifade eder.

Peki nedir bu Zero Shot Learning?

Zero Shot Learning (Sıfır Atış Öğrenme), geleneksel öğrenme yöntemlerinden farklı olarak, önceden belirlenmiş etiketlerle ilişkilendirilmemiş yeni sınıfları tanımak için kullanılan bir makine öğrenimi yaklaşımıdır. Bu yaklaşım, modelin önceden bu sınıflarla eğitilmediği durumlarda bile, yeni sınıfları tanımasını sağlar. Yani, zero shot learning, modelin önceden görmemiş olduğu bir sınıfı tanımasını ve doğru tahmin etmesini sağlayan bir genelleme yeteneğini ifade eder. Geleneksel öğrenme yöntemlerinde, modelin her sınıf için önceden etiketlenmiş örneklerle eğitilmesi gerekirken, zero shot learning’de bu durum geçerli değildir. Model, belirli bir sınıf için önceden eğitim almasa bile, bu sınıfı tanımak için genel bir kavramsal anlayışı kullanabilir.Bu, özellikle büyük ve karmaşık veri setlerinin olmadığı veya belirli sınıflar için yeterli örneklerin bulunmadığı durumlarda önemlidir. Zero shot learning, yeni ve beklenmedik sınıfları tanımak için esneklik sağlar ve modelin genelleme yeteneğini artırır. Bu nedenle, zero shot learning, yapay zeka ve makine öğrenimi alanlarında önemli bir araştırma alanıdır ve çeşitli uygulama alanlarında potansiyel avantajlar sunar.

Geleneksel derin öğrenme sistemlerinde, bir görev için çok yetenekli bir sistem elde etmek için genellikle büyük ve belirli bir veri setine ihtiyaç vardır. Örneğin, bir nesne tanıma modeli eğitirken, modelin bir nesneyi tanıyabilmesi için o nesneyle ilişkilendirilmiş binlerce örnek görmesi gerekebilir. Ancak, LLM’ler bu kısıtlamaya meydan okur.

LLM’ler, genelleme yeteneğine sahiptir. Yani, modelin belirli bir görev için özel bir veri setine ihtiyacı yoktur. Hatta, bazen hiç veri örneği bile gerekmez. Örneğin, bir LLM’i internetten eğittiğinizde ve basit bir metin sorusu sorduğunuzda, model genellikle doğru cevabı verebilir. Bu, LLM’lerin bilgi alımı, temel akıl yürütme ve duygu analizi gibi görevleri yerine getirebilmesini sağlar. Ancak, LLM’lerin performansı, onlarla nasıl çalıştığımıza bağlıdır. Modeli sorma şeklimiz, modelin görevde ne kadar iyi performans gösterdiğini etkileyebilir. Özellikle, bazı kısa ve basit dürtmeler bile modelin belirli soruları başarıyla yanıtlamasına neden olabilir. Bu, LLM’lerin davranışını anlamamızı zorlaştırır ve gelişmiş yöntemlerin keşfedilmesini gerektirir. LLM’lerin sıfır atış öğrenme yeteneği, bu yapay zeka modellerinin çok yönlülüğünü ve genel geçerliliğini vurgular. Ancak, bu potansiyeli tam olarak değerlendirebilmek için daha fazla araştırmaya ve keşfe ihtiyaç vardır.

Öncelikle, LLM’ler bir metni alır ve bu metni parçalara ayırır. Bu parçalar “token” olarak adlandırılır ve genellikle kelime veya alt kelime parçalarını temsil ederler. Her bir token, bir kelime dağarcığı içinde bir öğeyle eşleştirilir. Bu kelime dağarcığı, genellikle modern LLM’ler için yaklaşık 100,000 farklı token içerir. LLM, bir P Theta fonksiyonu ile eğitilir. Bu fonksiyon, verilen son T tokenlara dayanarak bir sonraki belirtecin olasılığını tahmin eder. Yani, modelin amacı, belirli bir metnin verilen son T tokenlarına dayanarak, bir sonraki token’ın olasılığını maksimize etmektir Bu adımlar, LLM’lerin temel birimlerinin ve çalışma prensiplerinin ana hatlarını çizer. LLM’lerin eğitim sürecinde, bir metnin iç yapısını anlamak ve bir sonraki belirteci doğru bir şekilde tahmin etmek için bu token tabanlı yaklaşım kullanılır. Bu, LLM’lerin genellikle dil anlama ve üretme görevlerinde kullanılmasını sağlar.

LLM’lerin eğitim sürecinde, bir veri seti D’den elde edilen dizilimlere atanmış log olasılığı optimize etmeye çalışılır. Bu genellikle internetten büyük bir kısmı alınan veri setlerini içerir. Modelin parametreleri, maksimum olasılığın atanmasını sağlamak için bu log olasılığı optimize eder.LLM’lerin temeli, genellikle öz-dikkat mekanizmasını kullanan Transformer bloklarından oluşur. Bu bloklar, token temsillerini manipüle ederek metnin yapısını anlamak ve gelecekteki belirtecini tahmin etmek için kullanılır. Modelin eğitiminde log olasılığın optimizasyonu ve Transformer bloklarının kullanımı, LLM’lerin başarılı bir şekilde dil işleme görevlerini gerçekleştirmesini sağlar.

Transformer blokları, büyük ölçüde öz-dikkat mekanizmasını(self attention mechanism) kullanarak işler. Metnin bir dizi haline getirildiği ve her bir parçanın bir vektöre dönüştürüldüğü bir dizi tokenle başlanır. Her bir token, bir vektöre eşlenir ve her Transformer katmanı, bu vektör temsilleri etrafında bilgiyi karıştırır ve bazı doğrusal olmayan dönüşümler yapar. Sistemin amacı, verilen önceki tokenlere dayanarak bir sonraki belirtecin olasılık dağılımını vermektedir. Bilgi iletimi okları, ileri yönde ilerler ve her bir adımda bir sonraki belirtecin olasılık tahminleri hesaplanır.Üretim sürecinde, belirli bir belirteç dizisi verildiğinde, sistem bu belirteç dizisine dayanarak bir sonraki belirtecin olasılık dağılımını hesaplar. Ardından, bu olasılık dağılımından bir sonraki belirteci örnekleme yöntemleriyle seçer ve bu belirteci geri besleyerek süreci tekrarlar.

Son yıllarda, Dil Modeli Kontrol Teorisi alanında yapılan araştırmalar, Büyük Dil Modellerinin (LLM’ler) giderek artan bir şekilde sistemler olarak kullanılmasını ele almaktadır. Geleneksel olarak, LLM’ler doğal dil üzerinde olasılık modelleri olarak görülse de, günümüzde bu modeller, sohbet arayüzleri ve daha büyük yazılım sistemlerinde bile bileşen olarak yoğun bir şekilde kullanılmaktadır. Bu kullanım senaryoları, Dil Modeli Kontrol Teorisi üzerine yapılan araştırmaları motive etmektedir. Geleneksel olarak, LLM’lerin sadece doğal dil üzerinde olasılık modelleri olarak görülmesine rağmen, gerçek dünyadaki kullanım durumları, bu modellerin aslında sistemlerin merkezi bir bileşeni olarak kullanıldığını göstermektedir. Bu durum, LLM’lerin kontrol edilebilirliği ve yönlendirilebilirliği üzerine derinlemesine çalışmalar yapmayı teşvik etmektedir. Kontrol teorisi, LLM’lerin bu sistemler içindeki rolünü daha iyi anlamak ve optimize etmek için bir çerçeve sunmaktadır.

LLMleri yeterince anlamıyor muyuz?

LLM’lerin sistemler olarak tam olarak anlaşılamadığına dair bir farkındalık, araştırmacılar arasında giderek artan bir konu olarak kabul edilmektedir. Bu durum, LLM’lerin karmaşık bir şekilde işlediği ve nasıl tepki verdiğinin tam olarak anlaşılamadığı gerçeğinden kaynaklanmaktadır. Özellikle, bir kontrolcü olarak hareket eden bir sistem durumunda, belirli bir çıktı elde etmek için başlangıç ​​durumunu manipüle etmenin zorlukları göz önüne alındığında, LLM’lerin davranışlarının öngörülmesi ve yönetilmesi oldukça karmaşıktır. Örneğin, “Roger Federer en iyisi” gibi bir başlangıç durumunun ardından, istenen çıktıyı elde etmek için belirli başlatma belirteçlerinin seçilmesi gerekebilir. Ancak, LLM’lerin bu tür durumları nasıl ele aldığı ve başlatma belirteçlerine nasıl tepki verdiği tam olarak bilinmemektedir. Bu nedenle, LLM’lerin sistemler olarak kullanılmasının incelenmesi ve anlaşılması, bilim dünyasında önemli bir araştırma alanı haline gelmiştir.

Dil modellerinin (LM’ler) istenilen çıktıları üretmek için yönlendirilmesi, davranışlarının anlaşılması ve kontrol edilmesinde zorluklar doğurmaktadır. Belirli çıktıları elde etmek için başlangıç belirteçlerinin, kontrol girişleri olarak adlandırılan, seçilmesi incelendiğinde. Temel bir soru ortaya çıkmaktadır: LM davranışını etkilemek için kaç kontrol belirtecinin gerektiği. Örneğin, dil modeline “Roger Federer bir kangurudur” gibi beklenmedik bir çıktı ürettirmek istendiğinde, hangi kontrol girişlerinin seçilmesi gerektiği belirsizdir. Bu durum, dil modelinin davranışını değiştirmek için kaç kontrol girişinin gerektiği hakkında bilgisizlik yaratır. Dil modellerinin karmaşık sistemler olduğu ve davranışlarının anlaşılması için kontrol teorisinin önemli bir araç olduğu unutulmaması gereken bir noktadır. Bu bağlamda, dil modellerinin belirli çıktılarını üretmek için nasıl kontrol girişlerinin seçileceği ve bunların etkilerinin nasıl anlaşılacağı üzerine yapılan araştırmalar, dil modellemesindeki gelişmelerin anlaşılmasına ve iyileştirilmesine katkıda bulunabilir.

LLMlerin Evrimi

2017'de, yeni bir sinir ağı mimarisi olan Transformer ortaya çıktı ve özellikle çeviri gibi görevlerde RNN mimarilerinden daha iyi sonuçlar gösterdi. Ardından GPT ve Bert gibi modeller geliştirildi. Bu modellerin başarısından sonra, Transformer mimarisi üzerine inşa edilen modeller ortaya çıktı ve denetimsiz öğrenme tekniğinin geliştirilmesine katkı sağladı. Bu sayede, geleneksel etiketli verilere olan ihtiyaç azaldı ve eğitilmiş modeller fine-tuning ile farklı problemlerde kullanılabilir hale geldi. Transformer mimarisi ve bu mimariye dayanan modellerle çalışmak için özel olarak geliştirilen bir kütüphane bulunmaktadır.

Transformer Mimarisi, Encoder-Decoder, dikkat mekanizması ve transfer öğrenme tekniklerini içerir. Bu mimari, öncesi LSTM gibi RNN tabanlı mimarilere göre popülerlik kazanmıştır. RNN’ler, ağ bağlantılarında geribildirim sağlar ve her bir girdi, bir önceki çıktının yanı sıra saklanan gizli durumu da içerir. Bu şekilde ağda bir bellek oluşur ve zaman serileri, set işleme gibi doğal dil işleme yöntemlerinde sıkça kullanılır. RNN mimarileri metin üretiminde de kullanılabilir.

RNN (Recurrent Neural Network) mimarileri, Encoder, Decoder veya Seq to Seq görevlerinde kullanılabilir. Bu durumda modele bir dizi verilir ve geri dönüş olarak da bir dizi elde etmek istenir. Encoder, girdi dizilerini sayısal temsillere dönüştürür ve bu temsiller Decoder’a iletilir. Decoder, bu temsilleri kullanarak çıktı dizilerini üretir. Bu yapı, özellikle metin çevirisi gibi çeşitli doğal dil işleme uygulamalarında yaygın olarak kullanılır.

Uzun metinlerin işlenmesi sırasında, her bir kelime veya öğe için bir durum (state) oluşturan Encoder bloğu kullanılır. Ancak, bu durumlar Decoder bloğuna geçirildiğinde, uzun metinlerin tüm bilgisinin tek bir durumda yoğunlaştırılması zamanla zorlaşır. Bu durum, özellikle uzun metinlerin işlendiği çeviri gibi görevlerde, çıktının kalitesini etkileyebilir.

Bu sorunu çözmek için “Attention” (dikkat) mekanizması geliştirilmiştir. Bu mekanizma, Decoder’ın her bir çıkışını oluştururken, Encoder tarafındaki tüm durumları dikkate almasına olanak tanır. Yani, Decoder her bir çıkışını üretirken, Encoder tarafındaki her bir kelimenin veya öğenin durumunu göz önünde bulundurur. Bu sayede, her çıkışın oluşturulmasında önemli kelimeler veya öğeler öne çıkarılabilir ve çeviri veya diğer doğal dil işleme görevlerinde daha doğru sonuçlar elde edilebilir. “Attention” mekanizması, modern yapay zeka sistemlerinde önemli bir rol oynamaktadır, çünkü daha uzun ve karmaşık verilerin işlenmesinde daha iyi performans sağlar.

Transformers Mimarisi

Transormer mimarisinde Attention yerine Self-Attention mantığı kullanılır.Öncelikle, geleneksel sinir ağı yapılarının katmanlar halinde oluştuğunu ve her katmandaki nöronların (veya birimlerin) belirli bir görevi olduğunu belirtiyor. Attention mekanizması, bu birimlerin her birindeki statelerle çalışır. Ancak, Self-Attention, aynı katmandaki tüm birimlerin stateleri üzerinde çalışır. Bu, hem Encoder hem de Decoder için geçerlidir ve bu mekanizmalar, tekrarlı sinir ağı yerine ileri beslemeli sinir ağlarında kullanılır. Bu, Transformer mimarisinin temelini oluşturur ve RNN tabanlı modellere kıyasla daha hızlı eğitim sağlar.

Self-Attention ve ileri beslemeli sinir ağlarının kullanımı, doğal dil işleme ve diğer alanlarda birçok modelin geliştirilmesine olanak tanır. Özellikle, bu yapılar daha büyük veri kümeleri ve daha güçlü bilgisayarlar kullanılarak sıfırdan eğitilebilir. Ancak, etiketli veri bulmak zor olabilir ve bu modelleri eğitmek için yüksek hesaplama gücü gerekebilir.

Bu zorlukları aşmak için “Transfer Learning” yaklaşımı kullanılabilir. Bu yaklaşım, önceden eğitilmiş bir modelin bilgisini, yeni bir görev veya veri kümesine uyarlamak için kullanılır. Bu şekilde, daha küçük veri kümeleriyle ve daha az hesaplama gücüyle daha etkili modeller geliştirilebilir.

Transfer Learning

Transfer Learning, önceden eğitilmiş bir modeli alıp, bu modeli kendi projenize adapte etme işlemidir. Derin öğrenme modellerini sıfırdan eğitmek oldukça zaman alabilir ve yüksek hesaplama gücü gerektirebilir. Bu nedenle, önceden eğitilmiş bir modeli alıp, bu modelin hiperparametrelerini ayarlayarak kendi veri kümenize uygun hale getirmek oldukça yaygın bir yöntemdir. Örneğin, ResNet gibi bir sinir ağını alıp, kendi veri kümeniz için Fine Tune etmek, bu tekniklerden biridir.

Transfer Learning ile eğitilen modellerin, sıfırdan eğitilen modellere kıyasla daha iyi performans gösterebileceği durumlar olmuştur. Özellikle, Computer Vision (Bilgisayar Görüşü) alanında, önceden etiketlenmiş büyük veri kümeleri gerektiren modeller, Transfer Learning sayesinde daha küçük veri kümeleriyle bile etkili bir şekilde eğitilebilir hale gelmiştir. Ayrıca, 2017 yılından itibaren Transformer Learning’in, Doğal Dil İşleme (NLP) alanında da kullanılabilir hale gelmesi büyük bir dönüm noktası olmuştur. Bu teknik, denetimsiz ön işlemeyle elde edilen özellikleri kullanarak metin sınıflandırma problemlerini yüksek doğrulukla çözmektedir.

Bu yaklaşımın bir örneği olan ULMFit kütüphanesi, metin sınıflandırma problemlerinde başarılı sonuçlar vermiştir. Ön eğitim aşamasında, dil modellemesi adı verilen bir yöntem kullanılarak, gelecek kelimenin tahmini, önceki kelimelere dayanarak gerçekleştirilir. Bu yaklaşımda etiketli verilere ihtiyaç duyulmaz ve genellikle Vikipedi gibi geniş veri kümelerinden yararlanılır.

Domain Adaptasyonu, büyük ölçekli bir veri kümesinde eğitildikten sonra, belirli bir alana adapte edilen bir modeldir. Örneğin, bir model Vikipedi üzerinde eğitilmişse, bu model, film yorumlarını içeren IMDB veri kümesine adapte edilebilir. Fine Tuning ise, önceden eğitilmiş bir dil modelinin, belirli bir görev için sınıflandırma katmanıyla ayarlanması işlemidir.

2018 yılında Transfer Learning ile Self-Attention’ı birleştiren GPT ve BERT gibi modeller, önemli bir ilerleme kaydetmiştir. Bu modeller, çeşitli NLP görevlerinde kullanılmak üzere önceden eğitilmiş ve daha sonra belirli görevler için fine tune edilebilir hale getirilmiştir.

BERT (Bidirectional Encoder Representations from Transformers), Transformer mimarisini temel alan bir dil modelidir. BERT, metinlerdeki ilişkileri anlamak için önceki ve sonraki kelimeleri dikkate alan bir biçimde önceden eğitilir. Bu sayede, belirli bir görev için fine tuning yapıldığında, genellikle daha iyi sonuçlar elde edilir.

BERT, maskelenmiş dil modeli olarak da bilinir. Maskelenmiş dil modeli, bir metinde rastgele seçilen kelimelerin maskelenmesi ve ardından bu maskelenmiş kelimelerin tahmin edilmesi prensibine dayanır. Böylelikle, BERT modeli, bir cümledeki maskelenmiş kelimeleri tahmin ederek dil yapısını anlamaya çalışır.

BERT ve GPT gibi modellerin ortaya çıkması, dil işleme alanında yeni bir dönemin başlangıcını temsil eder. Bu modeller, büyük dil verileri üzerinde önceden eğitilmiş ve ardından çeşitli dil işleme görevleri için uygun hale getirilmiştir.

Bu tür büyük ölçekli dil modellerini kullanmak için, Hugging Face tarafından geliştirilen Transformer kütüphanesi gibi araçlar yaygın olarak kullanılmaktadır. Bu kütüphaneler, PyTorch, TensorFlow ve Jax gibi çeşitli derin öğrenme çerçevelerini destekler ve büyük dil modellerinin hızlı bir şekilde kullanılmasını sağlar.

LLM uygulamaları geliştirmek için kullanılan frameworkler

Dil modelleriyle güçlendirilmiş uygulamalar, yapay zeka alanında hızla yaygınlaşıyor ve çeşitli endüstrilerde kullanım buluyor. Bu uygulamalar, doğal dil işleme yetenekleri sayesinde metin tabanlı görevleri gerçekleştirebiliyor ve insanlarla etkileşim kurabiliyor. Ancak, bu uygulamaları geliştirmek için doğru araçları seçmek önemlidir.

LangChain, dil modelleri tarafından yönlendirilen uygulamalar geliştirme alanında oyunun kurallarını değiştiren bir araç oldu.Hatta detaylı olarak incelediğim makaleye şurdan ulaşabilirsiniz. Ama gene bu yazıda da biraz özetleyelim!

2022'de açık kaynaklı bir proje olarak tanıtılan LangChain, hızla ivme kazanarak bir startup’a dönüştü. Yapay zeka modellerini harici kaynaklarla sorunsuz bir şekilde entegre ederek yapay zeka destekli uygulamaların geliştirilmesini kolaylaştıran sağlam bir çerçeve görevi görüyor. LangChain aracılığıyla kullanıcılar, yapay zeka modellerine yanıt üretme veya görevleri yürütme konusunda rehberlik etmek için komutları bir araya getirebilir. LangChain’in belirgin özelliklerinden biri, agentlardır. (The Matrix’in bilinçli yok etme programlarıyla karıştırılmamalıdır). Agentlar, kullanıcının girdisine dayanarak dış dünya ile nasıl etkileşimde bulunacağını belirlemek için bir dil modelini bir akıl yürütme motoru olarak kullanma yöntemidir. Agentlar bir dizi araca erişebilir ve girdiye bağlı olarak bir ajan hangi araçları çağıracağına karar verebilir.

Varsayılan olarak, LLM’ler her sorguyu diğer etkileşimlerden bağımsız olarak işler. Ancak LangChain, önceki sohbet iletilerini yönetmek ve manipüle etmek için bellek bileşenleri sağlar ve bunları zincirlere dahil eder. LangChain’in bellek bileşenleri, bellekten veri almak veya bellekte veri depolamak için kullanılabilir. Örneğin, önceki konuşmaları hatırlamaları gereken sohbet botları için bu özellik önemlidir.

Temel bellek yeteneklerinin ötesinde, LangChain, dil modellerinin belleği nasıl kullandığını geliştirmeyi amaçlamaktadır, bu da daha sofistike bir bağlam yönetimi ve bilgi hatırlama anlamına gelir. Bu, bağlam seçimi, önceliklendirme ve manipülasyon için gelişmiş teknikleri içerir ve ajanların, konuşma geçmişi ve bağlamın daha derin bir anlayışına dayanarak daha bilinçli kararlar verebilmesini sağlar.

LangChain, dil modellerinin yalnızca metni işlemekle kalmayıp aynı zamanda veritabanlarına, web API’larına ve hatta diğer yapay zeka modellerine bile etkileşimde bulunmasını sağlamak için çeşitli araç ve API’ların orkestrasyonunu kolaylaştırır. Bu orkestrasyon yeteneği, LangChain’in dil modelleri ile dış dünya arasında bir köprü görevi görmesini sağlar ve daha akıllı ve etkileşimli uygulamaların oluşturulmasını mümkün kılar, bu da veri alımına dayalı üretime ve karmaşık analitik işlemlere kadar geniş bir görev yelpazesini gerçekleştirebilir.

Yaygın olarak benimsenmesine rağmen LangChain’in dezavantajları da yok değil. Bazı geliştiriciler bunu gereksiz derecede karmaşık, hata ayıklaması zor ve özelleştirmesi zor buluyor. Sonuç olarak, her biri belirli ihtiyaçları karşılamak veya daha basit, daha akıcı deneyimler sunmak için uyarlanmış alternatif çözümler ortaya çıkmıştır.

Alternatif Frameworkler

1. FlowiseAI
2. Auto-GPT
3. AgentGPT
4. BabyAGI
5. LangDock
6. GradientJ
7. TensorFlow
8. LlamaIndex

Web sitelerindeki bilgileri kullanarak bir sohbet robotu oluşturma(Langchain)

1. Web Sitesi Yapılandırma ve Bilgi Toplama:

İlk adım, web sitenizdeki tüm sayfaların listesini elde etmektir. Bu genellikle bir site haritası kullanılarak yapılır. Site haritası, web sitesinde bulunan her sayfanın hiyerarşik bir listesini içerir. Örneğin, bir XML dosyası olan Website.xml dosyası, web sitenizdeki tüm sayfaların URL'lerini içerebilir.

2. Web Sayfalarının Bölünmesi ve Embeddinglerin Hesaplanması:

Web sitenizdeki her sayfayı daha küçük belgelere bölmek önemlidir. Çünkü büyük dil modelleri genellikle sabit bir giriş uzunluğu ile çalışırlar ve tek bir metni işlemek için belirli bir kapasiteye sahiptirler. Bu nedenle, her sayfayı birden fazla belgeye böleriz.

Her belgeyi böldükten sonra, her belgenin “gömme tabanlı temsilcisini”(embedding) hesaplarız. Embedding, bir metni temsil etmek için kullanılan matematiksel bir vektördür. Her belge için bir embedding(gömme) hesaplamak, o belgenin içeriğini daha küçük bir boyutta temsil eden bir vektör elde etmek anlamına gelir. Bu, büyük dil modeline veri sağlamanın etkili bir yoludur.

Bu arada nedir bu Embedding yahu?

Gömme (embedding), genellikle yüksek boyutlu ve karmaşık verilerin daha düşük boyutlu ve anlamlı bir temsiline dönüştürülmesini ifade eder. Özellikle makine öğrenimi ve derin öğrenme alanlarında sıkça kullanılır. Örneğin, metinler, görüntüler, sesler veya diğer veri türleri için kullanılabilir.

Metin gömme örneğinde, bir kelime, belirli bir boyutta bir vektör olarak temsil edilir. Bu vektör, kelimenin anlamını ve ilişkilerini yakalamak için bir model tarafından öğrenilir. Örneğin, “kral” ve “kraliçe” kelimeleri birbirlerine daha yakın vektörlerle temsil edilirken, “kral” ve “araba” kelimeleri daha uzak vektörlerle temsil edilir.

Gömme işlemi, veriyi daha işlenebilir ve anlamlı bir uzayda temsil etmeyi amaçlar. Bu, verinin boyutunu azaltabilir, gereksiz gürültüyü azaltabilir ve benzer özelliklere sahip veriler arasındaki ilişkileri daha iyi anlamamıza yardımcı olabilir.

Gömme, bir veri kümesini önceden eğitilmiş bir model kullanarak (örneğin, kelime gömme için Word2Vec veya GloVe gibi) elde edilebilir veya belirli bir görev veya veri kümesi için özel olarak eğitilmiş bir model tarafından öğrenilebilir. Gömme, derin öğrenme modellerinde giriş olarak kullanılabileceği gibi, veri analizi veya benzerlik arama gibi çeşitli uygulamalarda da kullanılabilir.

3. Vektör Deposu Oluşturma:

Her belgenin embedding tabanlı temsilcisini hesapladıktan sonra, bu gömmeleri bir vektör deposuna kaydederiz. Vektör deposu, web sitenizdeki tüm belgelerin gömme tabanlı temsilcilerini depolamak için kullanılır. Bu, büyük miktarda veriyi daha sonra kolayca erişilebilir hale getirir ve kullanılır.

4. Soru Sorma ve Yanıtlama Süreci:

Kullanıcı bir soru sorduğunda, bu soru embedding tabanlı temsilciler aracılığıyla işlenir. Belirlenen sorunun en uygun yanıtını bulmak için gömme tabanlı temsilcilerle vektör benzerliği hesaplanır. En yakın eşleşmeye sahip belgenin içeriği, kullanıcıya yanıt olarak sunulur.

5. Yanıt ve Bağlamın Sunumu:

Kullanıcıya sunulan yanıt, bulunan en uygun belgenin içeriğine dayanır. Ayrıca, yanıtın hangi belgeye dayandığını belirtmek için belge ID’si de sunulur. Bu, kullanıcının yanıtın kaynağını anlamasına ve gerektiğinde daha fazla bilgiye erişmesine olanak tanır.

Özetle;

Yoğun vektörlerin etkili benzerlik araması ve kümeleme yapılmasını sağlayan birtakım kütüphaneler vardır. Örneğin Facebook Research. Tabii bunun yanında farklı alternatifler de bulunyor. Örneğin, Pinecone veya Chroma DB gibi farklı Vektör depoları mevcuttur. İhtiyacınıza bağlı olarak bunlardan herhangi birini seçimleyebilirsiniz.

Örneğin, bir Blog’unuz varsa ve başka bir blog gönderisi eklerseniz, yapmanız gereken tek şey, bu yeni blog gönderisi için embedding işlemlerini hesaplamak ve bunu bilgi veri tabanınıza eklemektir. Diğer her şeyi yeniden yapmanıza gerek yoktur. Bilgi tabanını nasıl oluşturacağımızı biliyoruz, peki ya bir kullanıcı bir sohbet botu ile etkileşime geçiyorsa? Bu durumda takip edeceğimiz farklı adımlar var. Kullanıcı bir kahveyi hakettiğini düşündüğü ve kahvesini alıp bilgisayarın başına geçtiği sırada bir soru sorduğunda, bu soru Embedding API’sine gönderilecek. Hangi API’nin Embedding API’sini kullandığınıza bağlı olarak, örneğin OpenAI’nin embeddinglerini veya başka embeddinglerini kullanabilirsiniz.Bundan sonraki adım, anlamsal bir arama veya benzerlik araması yapmaktır.

Temelde, sorunuzun embeddingini alır ve zaten bilgi tabanınızda depolanan belgelerin embeddingleriyle karşılaştırabilirsiniz. Kullandığınız benzerlik metriğine bağlı olarak, farklı sıralama elde edersiniz. Örneğin, yalnızca en üstteki dört benzer belgeyi almak isteyebilirsiniz. Bu size sadece bu dört belgenin embeddinglerini geri döndürecektir. Çünkü gömmelerin temelinde karşılık gelen belgelerin dizinleri bilindiğinden gerçek belgeleri kullanabilirsiniz. Bu belgeler de temelde sizin bağlamınız olur. Bu, sorgunuzu gerçekleştirmek istediğiniz metindir. Sonraki adım, bağlamınız olan belgeleri almak ve orijinal soruyu alıp bu bilgileri büyük dil modeline (LLM) beslemektir. Büyük dil modeli, gömülme tabanlı olarak sorunuza benzer belgeleri görmek için bu belgelere bakacaktır. Bu, sorunuza yanıt üretmek için bir bağlam olarak kullanılacaktır ve kullandığınızda yanıtı alırsınız.

Yani gün sonunda sohbet botunun iki temel bileşeni vardır. Birincisi embeddin, en benzer belgeleri bulmak için kullanılır ve ikinci bileşen, yanıtı doğal dilde üretmek için LLM’dir. Uygulamanıza bağlı olarak istediğiniz herhangi bir embedding türünü seçebilirsiniz ve LLM herhangi bir LLM olabilir. OpenAI’nin büyük dil modellerine dayalı olabilir veya açık kaynaklı büyük dil modellerinden biri olabilir. İkisini de birleştirebilirsiniz. Örneğin, belge alımı için OpenAI’nin embeddinglerini kullanabilirsiniz, ancak doğal dil yanıtları için GPT gibi başka bir büyük dil modeli kullanabilirsiniz.

6. Rüya Tabirleri Botu Örneği

Kendini bilinçaltının derinliklerine bırakmışken, rüyaların gizemli ve anlamlı hikayelerini örüp durduğu bir dünyaya dalmak hayal edin. Şimdi, yanınızda bir dost hayal edin; dijital bir rüya yorumcusu, gece maceralarınızın sırlarını çözmeye hazır. İşte projemizle yola çıktığımız serüven bu — LangChain adlı güçlü doğal dil işleme aracıyla desteklenmiş bir rüya yorumcu botunun backend sistemini oluşturmak. Amacımız ne mi? Rüyalarınızın gizemli anlamlarını çözmek, psikolojiyi analiz etmek ve size özgü, kişiselleştirilmiş içgörüler sunmak. Teknolojinin bilinçaltıyla buluştuğu yer burası; rüyaların kendini keşfetmenin yolunu aradığı bir alan. Hoş geldiniz!

İlk olarak, dotenv uzantısını yüklemek için %load_ext dotenv komutu kullanılıyor. Bu uzantı, çevredeki değişkenleri .env dosyasından yüklemeye olanak tanır. Daha sonra, %dotenv komutuyla .env dosyasından değişkenleri yükleme işlemi gerçekleştirilir. Son olarak, dotenv modülü load_dotenv() işlevi çağrılarak yeniden yüklenir.

Bu kod, çevresel değişkenleri bir .env dosyasından yüklemek için kullanılıyor olabilir. Bu tür dosyalar, özellikle hassas bilgileri (örneğin, gizli anahtarlar, kimlik doğrulama bilgileri) saklamak için yaygın olarak kullanılır. Bu yöntem, kodu daha taşınabilir hale getirir ve hassas bilgilerin kodun kendisine gömülmemesini sağlar.

.env dosyası, genellikle hassas bilgileri (örneğin, API anahtarları, şifreler, kimlik doğrulama bilgileri) gibi dışa vurulmamış öğeleri saklamak için kullanılır. Bu dosyada bulunan öğeler, genellikle Python veya diğer programlama dillerinde çevresel değişkenler olarak yüklenir ve uygulamanın bu bilgilere erişmesini sağlar. İşte birkaç örnek:

  1. OPENAI_API_KEY: Bu örnek, bir OpenAI API anahtarını .env dosyasına saklar. OpenAI API'ye erişmek için bu anahtara ihtiyaç vardır. .env dosyası, bu hassas bilgiyi kodunuzdan ayırarak güvenliği artırır.
  2. HUGGINGFACEHUB_API_TOKEN: Bu örnek, Hugging Face Hub API için bir tokenı .env dosyasına saklar. Hugging Face Hub, dil işleme modellerini paylaşmak ve keşfetmek için kullanılan bir platformdur. API tokenı, bu platforma erişmek için gereklidir.

.env dosyasındaki bu tür bilgiler genellikle diğer insanlarla paylaşılmaz ve kod depolarına dahil edilmez. Bunun yerine, bu dosyalar genellikle .gitignore gibi dosyalar aracılığıyla kod depolarından hariç tutulur. Bu, bilgilerin sadece belirli bir ortamda çalışırken kullanılmasını sağlar ve güvenliği artırır.

Bu kod örneğinde, bir liste içinde çeşitli URL’ler bulunmaktadır. Bu URL’ler, belirli bir web sitesinin (milliyet.com.tr) farklı rüya tabirlerini açıklayan makalelerine yönlendirir. Daha sonra, langchain adlı bir belge yükleyici aracılığıyla bu URL'lerden veri çekilmektedir.

  1. urls adlı bir liste tanımlanmıştır. Bu liste, rüya tabirlerinin bulunduğu farklı makalelere yönlendiren URL'leri içerir.
  2. from langchain.document_loaders import UnstructuredURLLoader satırıyla, langchain kütüphanesinden UnstructuredURLLoader sınıfı yüklenir. Bu sınıf, belirli URL'lerden veri çekmek için kullanılır.
  3. loaders = UnstructuredURLLoader(urls=urls) satırıyla, UnstructuredURLLoader sınıfı kullanılarak bir yükleyici nesnesi oluşturulur. Bu nesne, belirtilen URL'lerden veri çekmek için yapılandırılır.
  4. data = loaders.load() satırıyla, oluşturulan yükleyici nesnesi aracılığıyla belirtilen URL'lerden veri çekilir ve data değişkenine atanır. Bu şekilde, belirtilen URL'lerden elde edilen verilere erişilebilir hale gelir.

Bu kod örneğinde, belgelerin metin içeriğinin parçalara bölünmesi işlemi gerçekleştirilmektedir. Bu işlem, metinlerin daha küçük parçalara ayrılarak daha kolay işlenebilir hale getirilmesini sağlar.

Kodun yapısı şu şekildedir:

  1. from langchain.text_splitter import RecursiveCharacterTextSplitter satırıyla, metinleri parçalara bölmek için RecursiveCharacterTextSplitter sınıfı langchain kütüphanesinden yüklenir. Bu sınıf, metin içeriğini belirli bir boyuta ve belirli ayraçlara göre bölme işlevselliğini sağlar.
  2. text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0, separators=[" ", ",", "\n"]) satırıyla, RecursiveCharacterTextSplitter sınıfından bir örnek oluşturulur. Bu örneğin oluşturulması sırasında, metinlerin parçalara bölünmesi için kullanılacak parametreler belirlenir. chunk_size ile her parçanın maksimum karakter sayısı, chunk_overlap ile parçalar arasındaki örtüşme miktarı ve separators ile parçaların ayrılacağı karakterler belirlenir.
  3. docs = text_splitter.split_documents(data) satırıyla, daha önce elde edilen data içeriğinin text_splitter nesnesi aracılığıyla parçalara bölünmesi işlemi gerçekleştirilir. Böylece, belirtilen boyuta göre metinler parçalara ayrılarak işlenebilir hale gelir. Bu işlem, büyük metinleri daha küçük parçalara bölmek ve işleme tabi tutmak için kullanılır.

Bu kod parçası, bir metin gömme modeli olan OpenAIEmbeddings’in kullanılmasını sağlar ve bu gömmelerin benzerlik arama işlemleri için FAISS (Facebook AI Similarity Search) kütüphanesi ile depolanmasını ve erişilmesini kolaylaştırır.

İşte kodun ne yaptığı ve neden yapıldığına dair daha detaylı bir açıklama:

  1. import pickle ve import faiss: İlgili kütüphanelerin (pickle ve faiss) içe aktarılması sağlanır. pickle, Python nesnelerini serileştirme ve deserileştirme işlemleri için kullanılırken, faiss, büyük ölçekli benzerlik arama işlemleri için optimize edilmiş bir kütüphanedir.
  2. from langchain.vectorstores import FAISS: LangChain kütüphanesinden FAISS tabanlı bir vektör deposunun (FAISS) kullanılacağını belirtmek için gerekli import işlemi yapılır. Bu, vektörlerin depolanması ve benzerlik aramalarının yapılması için gereklidir.
  3. from langchain.embeddings import OpenAIEmbeddings: LangChain kütüphanesinden OpenAIEmbeddings adlı bir metin gömme modelinin kullanılacağını belirtmek için gerekli import işlemi yapılır. Bu, metinlerin sayısal vektörlerle temsil edilmesini sağlayan ve semantik olarak benzer metinler arasında benzerlik ölçümleri yapmayı mümkün kılan bir işlemdir.
  4. embeddings = OpenAIEmbeddings(): OpenAIEmbeddings sınıfından bir örnek oluşturulur. Bu, metinlerin gömülmesi için kullanılacak olan OpenAI'nın önceden eğitilmiş bir modeli yükler. Metin gömmeleri, her bir metni temsil eden sayısal vektörlerdir ve semantik benzerlikleri ölçmek için kullanılırlar.

Yukarıdaki kod parçası, metinleri işlemek için kullanılan gömme ve arama mekanizmalarının yapılandırılmasını ve birbirine bağlanmasını sağlar. İşte kodun detaylı açıklaması:

  1. vectorStore_openAI = FAISS.from_documents(docs, embeddings): Bu satırda, LangChain kütüphanesinden FAISS kullanılarak vektör deposu oluşturulur. from_documents fonksiyonu, belirli belgelerin metin verilerini ve bunları temsil eden gömme vektörlerini alır. Bu belgeler, önceki adımda işlenmiş ve bölünmüş metinlerdir (docs). embeddings ise, metinlerin gömülmesi için kullanılan gömme modelini temsil eder. Bu gömme modeli, metinlerin semantik olarak anlamını temsil eden sayısal vektörler oluşturur.
  2. llm=ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo'): Bu satırda, ChatOpenAI sınıfından bir örnek oluşturulur. Bu, OpenAI'nin önceden eğitilmiş bir dil modelini (gpt-3.5-turbo) kullanarak bir sohbet arabirimi oluşturur. temperature=0 parametresi, modelin daha tutarlı ve deterministik cevaplar üretmesini sağlar.
  3. chain = RetrievalQAWithSourcesChain.from_llm(llm=llm, retriever=vectorStore_openAI.as_retriever()): Bu satırda, RetrievalQAWithSourcesChain adlı bir zincir oluşturulur. Bu zincir, metinlerin arama, alıntılama ve soru-cevap işlemlerini bir araya getirir. from_llm fonksiyonu, bir dil modeli ve bir geri çevirici (retriever) alarak bir zincir oluşturur. Burada, dil modeli olarak llm ve geri çevirici olarak vectorStore_openAI kullanılır. Böylece, dil modeli verilen bir soruya cevap üretebilirken, geri çevirici verilen bir sorguya en yakın metinleri bulabilir.

Bu kod parçası, metin işleme ve sorgu-yanıt işlemleri için bir zincir oluşturarak, dil modeli ve metin gömme mekanizmasını bir araya getirir. Bu şekilde, kullanıcıların sorularına daha doğru ve anlamlı cevaplar üretebilir ve metin verilerini daha etkili bir şekilde işlenebilmektedir.

Bu satır, bir chain nesnesi üzerinden bir soru sorgusu yapar. Soru, "Rüyada ağlamak ne anlama gelir?" şeklindedir. return_only_outputs=True parametresi, sadece çıktıları (cevapları) döndürmesini sağlar.

{'answer': 'Rüyada ağlamak genellikle sevince ve gelecek iyi haberlere yorulur. Ağlama eylemi arınmaya ve sıkıntıdan kurtulmaya işaret eder. Ayrıca, rüyada ağlamak, sevinçli bir haber alınacağına ve helal kazanca delalet edebilir.\nKAYNAKLAR: https://www.milliyet.com.tr/pembenar/ruya-tabirleri/ruyada-aglamak-ne-anlama-gelir-25196',
'sources': ''}

Bu cevap, rüyada ağlamak ile ilgili bir tabirin yanıtını içerir. Cevap, rüyanın genellikle sevince ve gelecek iyi haberlere yorulduğunu, ağlamanın arınmaya ve sıkıntıdan kurtulmaya işaret ettiğini ve sevinçli bir haber alınacağını ve helal kazanca işaret ettiğini belirtir. Ayrıca cevap, bu bilgilerin kaynağını içeren bir bağlantıya sahiptir. Bu şekilde, RAG modeli kullanılarak metin işleme ve sorgu-yanıt işlemleri için etkili bir sistem oluşturulmuş olur.

Sebebi ne ola ki? diye sorduğum sorular köşesi

Hem tezimde hem de farklı birkaç uygulama yaparken kendime sorduğum sorulardan bazılarını ve cevaplarını aşağıdaki gibi ekledim. Sizlerin de varsa eğer bana yorumlarda iletebilirsiniz. Burada biriktiririz. :)

Eğitim işlemlerinde epoch sayısı neden bu kadar önemli?

Epoch sayısı, derin öğrenme modellerinin eğitim sürecinde kullanılan ve eğitim veri setinin tamamının model tarafından bir kez geçirildiği adımları temsil eder. Doğru epoch sayısı seçimi, modelin eğitim verisine uyum sağlaması ve aşırı uyumdan kaçınması açısından kritiktir. Yetersiz epoch sayısı, modelin veriyi öğrenmesini tamamlamamasına ve genelleme performansının düşük olmasına neden olabilir. Diğer yandan, çok fazla epoch kullanmak aşırı uyum riskini artırabilir. Bu nedenle, optimal epoch sayısının bulunması, modelin genel performansını etkileyen önemli bir faktördür.

Eğitim süresi ve performansı üzerinde birkaç hangi faktörler önemli?

  • Bilgisayarınızın işlemci, bellek ve grafik işlemcisi gibi donanım bileşenleri, eğitim süresini etkiler. Örneğin, CUDA uyumlu bir grafik işlemcisi (GPU) varsa, derin öğrenme modellerini GPU üzerinde eğitmek, işlemciye göre daha hızlı olabilir. Ancak, MacBook gibi bazı bilgisayarlar, NVIDIA GPU’lar yerine daha farklı grafik işlemcileri kullanabilir, bu da CUDA’nın kullanılamamasına neden olabilir.
  • Derin öğrenme kütüphaneleri, eğitimi hızlandırmak için çeşitli optimizasyon ve paralelleştirme teknikleri kullanır. CUDA uyumlu bir GPU, eğitim süresini önemli ölçüde azaltabilir çünkü CUDA, GPU üzerinde paralel hesaplamaları destekler. Ancak, MacOS’ta bazı derin öğrenme kütüphaneleri, CUDA’yı desteklemeyebilir veya tam performans sağlamayabilir.
  • Eğitmekte olduğunuz modelin karmaşıklığı, eğitim süresini etkiler. Daha büyük ve karmaşık modeller, daha fazla hesaplama gerektirir ve dolayısıyla daha uzun sürecek bir eğitim süresine sahip olabilir.
  • CUDA uyumlu bir GPU’ya sahip bir bilgisayar kullanın ve derin öğrenme kütüphanelerini GPU üzerinde eğitin.
  • Modelinizi daha küçük ve daha basit hale getirin, böylece eğitim süresini azaltabilirsiniz.
  • Daha güçlü bir bilgisayar veya bulut hizmeti kullanın, bu, daha hızlı işlemciler ve daha fazla bellek gibi avantajlar sağlayabilir.

Bulut hizmetleri, derin öğrenme modellerini eğitmek için ideal bir seçenek olabilir çünkü genellikle güçlü bilgisayar kaynaklarına ve ölçeklenebilirlik avantajlarına sahiptirler.

  • Amazon Web Services (AWS): AWS, derin öğrenme modellerini eğitmek için geniş bir hizmet yelpazesi sunar. Amazon EC2 özellikle GPU özellikli örnekler sağlar ve Amazon SageMaker, derin öğrenme modellerini eğitmek, hiperparametre ayarlamak ve dağıtmak için yönetilen bir hizmettir.
  • Microsoft Azure: Azure, GPU özellikli sanal makineler ve makine öğrenimi hizmetleri sunar. Azure Machine Learning, model eğitimi, dağıtımı ve yönetimi için kapsamlı bir platform sağlar.
  • Google Cloud Platform (GCP): GCP, GPU özellikli Compute Engine örnekleri ve makine öğrenimi için yönetilen hizmetler sunar. Google Colab, bulutta ücretsiz olarak derin öğrenme modellerini eğitmek için popüler bir seçenektir.
  • IBM Cloud: IBM Cloud, GPU özellikli sanal makineler ve derin öğrenme hizmetleri sunar. IBM Watson Studio, model eğitimi, dağıtımı ve yönetimi için bir platform sağlar.
  • Kaggle: Kaggle’da Jupyter tabanlı interaktif notebooklar kullanarak derin öğrenme modellerini kodlayabilir ve eğitebilirsiniz. GPU ve TPU gibi hızlandırıcılar, kullanıcıların modellerini daha hızlı eğitmesine olanak tanır.

Modelin başarısını arttırmak için neler yapabiliriz?

Modelin başarısını arttırmak için birkaç strateji kullanılabilir. İlk olarak, daha fazla ve daha çeşitli eğitim verisi kullanarak modelin genelleme yeteneğini artırabilirsiniz. Ayrıca, modelinizi daha karmaşık veya derin hale getirerek ve hiperparametrelerini ayarlayarak performansını iyileştirebilirsiniz. Veri ön işleme teknikleri, giriş verisini daha temiz ve daha anlamlı hale getirerek model performansını artırabilir. Ayrıca, transfer öğrenme ve önceden eğitilmiş modeller kullanarak modelinizin başlangıç noktasını iyileştirebilir ve eğitim süresini azaltabilirsiniz. Son olarak, regülerizasyon teknikleri kullanarak aşırı uyum riskini azaltabilir ve modelin genelleme yeteneğini artırabilirsiniz. Bu stratejilerin bir kombinasyonu, modelin başarısını artırmak için etkili bir yaklaşım olabilir.

Kaynaklar

https://www.udemy.com/course/hugging-face-ile-dogal-dil-isleme/

https://www.udemy.com/course/uretken-yapay-zeka-icin-langchain/

Bir sonraki yazıda görüşmek üzere! :)

Sevgilerr..

--

--

Kardel Rüveyda ÇETİN

Expert Software Engineer @DogusTeknoloji ~ All my life I've been over the top. I don't know what I'm doing. All I know is I don't wanna stop. 🤘