Yapay Zeka
Yapay Zeka ve Yüksek Lisans Mühendisleri için Python'da Tasarım Modelleri: Pratik Bir Kılavuz

Yapay zeka mühendisleri olarak, özellikle karmaşık sistemler oluştururken temiz, verimli ve sürdürülebilir kod oluşturmak kritik öneme sahiptir.
Tasarım desenleri yazılım tasarımındaki yaygın sorunlara yönelik yeniden kullanılabilir çözümlerdir. Yapay Zeka ve Büyük Dil Modeli (LLM) mühendisleri, tasarım desenleri karmaşık iş akışlarını verimli bir şekilde yöneten sağlam, ölçeklenebilir ve sürdürülebilir sistemler oluşturmaya yardımcı olur. Bu makale Python'daki tasarım desenlerine derinlemesine inerek bunların AI ve Yüksek Lisanstabanlı sistemler. Her bir modeli pratik yapay zeka kullanım örnekleri ve Python kod örnekleriyle açıklayacağım.
Yapay zeka ve makine öğrenimi bağlamlarında özellikle yararlı olan bazı temel tasarım kalıplarını Python örnekleriyle birlikte inceleyelim.
Tasarım Desenlerinin Yapay Zeka Mühendisleri İçin Önemi
Yapay zeka sistemleri genellikle şunları içerir:
- Karmaşık nesne oluşturma (örneğin, model yükleme, veri ön işleme hatları).
- Bileşenler arasındaki etkileşimleri yönetme (örneğin, model çıkarımı, gerçek zamanlı güncellemeler).
- Değişen gereksinimler için ölçeklenebilirlik, sürdürülebilirlik ve esneklik.
Tasarım desenleri bu zorlukları ele alarak net bir yapı sunar ve geçici düzeltmeleri azaltır. Üç ana kategoriye ayrılırlar:
- Yaratıcı Modeller: Nesne yaratmaya odaklanın. (Singleton, Factory, Builder)
- Yapısal Modeller: Nesneler arasındaki ilişkileri düzenler. (Adapter, Decorator)
- Davranış kalıpları: Nesneler arası iletişimi yönetin. (Strateji, Gözlemci)
1. Tekil Desen
MKS Tekli Desen bir sınıfın yalnızca bir örneğe sahip olmasını ve bu örneğe küresel bir erişim noktası sağlamasını garanti eder. Bu, yapılandırma ayarları, günlükleme sistemleri veya model örnekleri gibi paylaşılan kaynakların yedeklilik olmadan tutarlı bir şekilde yönetilmesi gereken AI iş akışlarında özellikle değerlidir.
Ne zaman kullanılır?
- Küresel yapılandırmaları yönetme (örneğin, model hiperparametreleri).
- Kaynakları birden fazla iş parçacığı veya işlem arasında paylaşma (örneğin, GPU belleği).
- Tek bir kaynağa tutarlı erişimin sağlanması çıkarsama motoru veya veritabanı bağlantısı.
Uygulama
Bir AI modelinin yapılandırmalarını yönetmek için Python'da Singleton deseninin nasıl uygulanacağı aşağıda açıklanmıştır:
class ModelConfig:
"""
A Singleton class for managing global model configurations.
"""
_instance = None # Class variable to store the singleton instance
def __new__(cls, *args, **kwargs):
if not cls._instance:
# Create a new instance if none exists
cls._instance = super().__new__(cls)
cls._instance.settings = {} # Initialize configuration dictionary
return cls._instance
def set(self, key, value):
"""
Set a configuration key-value pair.
"""
self.settings[key] = value
def get(self, key):
"""
Get a configuration value by key.
"""
return self.settings.get(key)
# Usage Example
config1 = ModelConfig()
config1.set("model_name", "GPT-4")
config1.set("batch_size", 32)
# Accessing the same instance
config2 = ModelConfig()
print(config2.get("model_name")) # Output: GPT-4
print(config2.get("batch_size")) # Output: 32
print(config1 is config2) # Output: True (both are the same instance)
açıklama
- MKS
__new__Yöntem: Bu, sınıfın yalnızca bir örneğinin oluşturulmasını sağlar. Bir örnek zaten varsa, var olanı döndürür. - Paylaşılan Durum: İkisi de
config1veconfig2aynı örneği işaret eder ve tüm yapılandırmaların küresel olarak erişilebilir ve tutarlı olmasını sağlar. - AI Kullanım Örneği: Veri kümelerine giden yollar, günlük yapılandırmaları veya ortam değişkenleri gibi genel ayarları yönetmek için bu deseni kullanın.
2. Fabrika Deseni
MKS Fabrika Modeli nesnelerin oluşturulmasını alt sınıflara veya özel fabrika yöntemlerine devretmenin bir yolunu sağlar. AI sistemlerinde, bu desen farklı türde modeller, veri yükleyicileri veya veri hatlarını dinamik olarak bağlama göre oluşturmak için idealdir.
Ne zaman kullanılır?
- Kullanıcı girdisine veya görev gereksinimlerine göre dinamik olarak modeller oluşturma.
- Karmaşık nesne oluşturma mantığını yönetme (örneğin, çok adımlı ön işleme hatları).
- Esnekliği artırmak için nesne örneklemesini sistemin geri kalanından ayırmak.
Uygulama
Metin sınıflandırması, özetleme ve çeviri gibi farklı AI görevleri için modeller oluşturmak üzere bir Fabrika oluşturalım:
class BaseModel:
"""
Abstract base class for AI models.
"""
def predict(self, data):
raise NotImplementedError("Subclasses must implement the `predict` method")
class TextClassificationModel(BaseModel):
def predict(self, data):
return f"Classifying text: {data}"
class SummarizationModel(BaseModel):
def predict(self, data):
return f"Summarizing text: {data}"
class TranslationModel(BaseModel):
def predict(self, data):
return f"Translating text: {data}"
class ModelFactory:
"""
Factory class to create AI models dynamically.
"""
@staticmethod
def create_model(task_type):
"""
Factory method to create models based on the task type.
"""
task_mapping = {
"classification": TextClassificationModel,
"summarization": SummarizationModel,
"translation": TranslationModel,
}
model_class = task_mapping.get(task_type)
if not model_class:
raise ValueError(f"Unknown task type: {task_type}")
return model_class()
# Usage Example
task = "classification"
model = ModelFactory.create_model(task)
print(model.predict("AI will transform the world!"))
# Output: Classifying text: AI will transform the world!
açıklama
- Soyut Temel Sınıf:
BaseModelsınıf arayüzü tanımlar (predict) tüm alt sınıfların uygulaması gereken, tutarlılığı sağlayan bir kuraldır. - Fabrika Mantığı:
ModelFactoryGörev türüne göre uygun sınıfı dinamik olarak seçer ve bir örnek oluşturur. - uzayabilirlik: Yeni bir model türü eklemek basittir; sadece yeni bir alt sınıf uygulayın ve fabrikanın
task_mapping.
AI Kullanım Örneği
Göreve bağlı olarak farklı bir LLM (örneğin, BERT, GPT veya T5) seçen bir sistem tasarladığınızı düşünün. Factory deseni, mevcut kodu değiştirmeden yeni modeller kullanılabilir hale geldikçe sistemi genişletmeyi kolaylaştırır.
3. İnşaatçı Deseni
MKS Oluşturucu Deseni karmaşık bir nesnenin yapısını temsilinden ayırır. Bir nesnenin başlatılması veya yapılandırılması için birden fazla adım içerdiği durumlarda yararlıdır.
Ne zaman kullanılır?
- Çok adımlı veri hatları oluşturma (örneğin, veri ön işleme).
- Deneyler veya model eğitimleri için yapılandırmaları yönetme.
- Çok sayıda parametre gerektiren, okunabilirliği ve sürdürülebilirliği garanti eden nesneler yaratmak.
Uygulama
Veri ön işleme hattı oluşturmak için Builder modelinin nasıl kullanılacağı aşağıda açıklanmıştır:
class DataPipeline:
"""
Builder class for constructing a data preprocessing pipeline.
"""
def __init__(self):
self.steps = []
def add_step(self, step_function):
"""
Add a preprocessing step to the pipeline.
"""
self.steps.append(step_function)
return self # Return self to enable method chaining
def run(self, data):
"""
Execute all steps in the pipeline.
"""
for step in self.steps:
data = step(data)
return data
# Usage Example
pipeline = DataPipeline()
pipeline.add_step(lambda x: x.strip()) # Step 1: Strip whitespace
pipeline.add_step(lambda x: x.lower()) # Step 2: Convert to lowercase
pipeline.add_step(lambda x: x.replace(".", "")) # Step 3: Remove periods
processed_data = pipeline.run(" Hello World. ")
print(processed_data) # Output: hello world
açıklama
- Zincirleme Yöntemler:
add_stepYöntem, boru hatlarını tanımlarken sezgisel ve kompakt bir söz dizimi için zincirleme olanağı sağlar. - Adım Adım Uygulama: Boru hattı, verileri sırayla her adımda çalıştırarak işler.
- AI Kullanım Örneği: Karmaşık, yeniden kullanılabilir veri ön işleme hatları veya model eğitim kurulumları oluşturmak için Builder modelini kullanın.
4. Strateji Modeli
MKS Strateji Modeli her birini kapsülleyen ve davranışın çalışma zamanında dinamik olarak değişmesine izin veren, değiştirilebilir algoritmalar ailesini tanımlar. Bu, aynı sürecin (örneğin, çıkarım veya veri işleme) bağlama bağlı olarak farklı yaklaşımlar gerektirebileceği AI sistemlerinde özellikle yararlıdır.
Ne zaman kullanılır?
- Farklılar arasında geçiş yapma sonuç stratejiler (örneğin, toplu işleme ve akış).
- Farklı veri işleme tekniklerinin dinamik olarak uygulanması.
- Mevcut altyapıya göre kaynak yönetimi stratejilerinin seçilmesi.
Uygulama
Bir yapay zeka modeli için iki farklı çıkarım stratejisi uygulamak üzere Strateji Desenini kullanalım: toplu çıkarım ve akış çıkarımı.
class InferenceStrategy:
"""
Abstract base class for inference strategies.
"""
def infer(self, model, data):
raise NotImplementedError("Subclasses must implement the `infer` method")
class BatchInference(InferenceStrategy):
"""
Strategy for batch inference.
"""
def infer(self, model, data):
print("Performing batch inference...")
return [model.predict(item) for item in data]
class StreamInference(InferenceStrategy):
"""
Strategy for streaming inference.
"""
def infer(self, model, data):
print("Performing streaming inference...")
results = []
for item in data:
results.append(model.predict(item))
return results
class InferenceContext:
"""
Context class to switch between inference strategies dynamically.
"""
def __init__(self, strategy: InferenceStrategy):
self.strategy = strategy
def set_strategy(self, strategy: InferenceStrategy):
"""
Change the inference strategy dynamically.
"""
self.strategy = strategy
def infer(self, model, data):
"""
Delegate inference to the selected strategy.
"""
return self.strategy.infer(model, data)
# Mock Model Class
class MockModel:
def predict(self, input_data):
return f"Predicted: {input_data}"
# Usage Example
model = MockModel()
data = ["sample1", "sample2", "sample3"]
context = InferenceContext(BatchInference())
print(context.infer(model, data))
# Output:
# Performing batch inference...
# ['Predicted: sample1', 'Predicted: sample2', 'Predicted: sample3']
# Switch to streaming inference
context.set_strategy(StreamInference())
print(context.infer(model, data))
# Output:
# Performing streaming inference...
# ['Predicted: sample1', 'Predicted: sample2', 'Predicted: sample3']
açıklama
- Soyut Strateji Sınıfı:
InferenceStrategytüm stratejilerin uyması gereken arayüzü tanımlar. - Somut Stratejiler: Her strateji (örneğin,
BatchInference,StreamInference) o yaklaşıma özgü mantığı uygular. - Dinamik Anahtarlama:
InferenceContextÇalışma zamanında stratejilerin değiştirilmesine izin vererek farklı kullanım durumları için esneklik sunar.
Ne zaman kullanılır?
- Arasında geçiş toplu çıkarım çevrimdışı işleme için ve akış çıkarımı Gerçek zamanlı uygulamalar için.
- Göreve veya girdi biçimine bağlı olarak veri artırma veya ön işleme tekniklerini dinamik olarak ayarlayın.
5. Gözlemci Deseni
MKS Gözlemci Modeli nesneler arasında bire-çok ilişkisi kurar. Bir nesne (özne) durum değiştirdiğinde, tüm bağımlıları (gözlemciler) otomatik olarak bilgilendirilir. Bu, gerçek zamanlı izleme, olay işleme veya veri senkronizasyonu için AI sistemlerinde özellikle yararlıdır.
Ne zaman kullanılır?
- Model eğitimi sırasında doğruluk veya kayıp gibi metriklerin izlenmesi.
- Gösterge panelleri veya kayıtlar için gerçek zamanlı güncellemeler.
- Karmaşık iş akışlarında bileşenler arasındaki bağımlılıkları yönetme.
Uygulama
Yapay zeka modelinin performansını gerçek zamanlı olarak izlemek için Gözlemci Desenini kullanalım.
class Subject:
"""
Base class for subjects being observed.
"""
def __init__(self):
self._observers = []
def attach(self, observer):
"""
Attach an observer to the subject.
"""
self._observers.append(observer)
def detach(self, observer):
"""
Detach an observer from the subject.
"""
self._observers.remove(observer)
def notify(self, data):
"""
Notify all observers of a change in state.
"""
for observer in self._observers:
observer.update(data)
class ModelMonitor(Subject):
"""
Subject that monitors model performance metrics.
"""
def update_metrics(self, metric_name, value):
"""
Simulate updating a performance metric and notifying observers.
"""
print(f"Updated {metric_name}: {value}")
self.notify({metric_name: value})
class Observer:
"""
Base class for observers.
"""
def update(self, data):
raise NotImplementedError("Subclasses must implement the `update` method")
class LoggerObserver(Observer):
"""
Observer to log metrics.
"""
def update(self, data):
print(f"Logging metric: {data}")
class AlertObserver(Observer):
"""
Observer to raise alerts if thresholds are breached.
"""
def __init__(self, threshold):
self.threshold = threshold
def update(self, data):
for metric, value in data.items():
if value > self.threshold:
print(f"ALERT: {metric} exceeded threshold with value {value}")
# Usage Example
monitor = ModelMonitor()
logger = LoggerObserver()
alert = AlertObserver(threshold=90)
monitor.attach(logger)
monitor.attach(alert)
# Simulate metric updates
monitor.update_metrics("accuracy", 85) # Logs the metric
monitor.update_metrics("accuracy", 95) # Logs and triggers alert
- Konu: Gözlemcilerin bir listesini yönetir ve durumu değiştiğinde onları bilgilendirir. Bu örnekte,
ModelMonitorsınıf izleme metrikleri. - Gözlemciler: Bildirildiğinde belirli eylemleri gerçekleştirin. Örneğin,
LoggerObservergünlük metrikleri,AlertObserverBir eşik aşıldığında uyarı verir. - Ayrık Tasarım:Gözlemciler ve özneler gevşek bir şekilde birbirine bağlanmıştır, bu da sistemi modüler ve genişletilebilir hale getirir.
Yapay Zeka Mühendisleri ile Geleneksel Mühendisler İçin Tasarım Desenleri Nasıl Farklıdır?
Tasarım kalıpları evrensel olarak uygulanabilir olsa da, geleneksel yazılım mühendisliğine kıyasla AI mühendisliğinde uygulandığında benzersiz özellikler kazanır. Aradaki fark, AI sistemlerine özgü zorluklarda, hedeflerde ve iş akışlarında yatmaktadır ve bu da kalıpların geleneksel kullanımlarının ötesine uyarlanmasını veya genişletilmesini gerektirir.
1. Nesne Oluşturma: Statik ve Dinamik İhtiyaçlar
- Geleneksel Mühendislik:Factory veya Singleton gibi nesne oluşturma kalıpları genellikle yapılandırmaları, veritabanı bağlantılarını veya kullanıcı oturum durumlarını yönetmek için kullanılır. Bunlar genellikle statiktir ve sistem tasarımı sırasında iyi tanımlanmıştır.
- yapay zeka mühendisliği: Nesne oluşturma genellikle şunları içerir: dinamik iş akışları, Örneğin:
- Kullanıcı girdisine veya sistem gereksinimlerine göre anında modeller oluşturma.
- Çeviri, özetleme veya sınıflandırma gibi görevler için farklı model yapılandırmalarının yüklenmesi.
- Veri kümesi özelliklerine (örneğin, tablolu veya yapılandırılmamış metin) göre değişen birden fazla veri işleme hattının örneklenmesi.
Örnek E-posta:Yapay zekada, bir Fabrika modeli, görev türüne ve donanım kısıtlamalarına bağlı olarak dinamik olarak bir derin öğrenme modeli üretebilirken, geleneksel sistemlerde, basitçe bir kullanıcı arayüzü bileşeni üretebilir.
2. Performans Kısıtlamaları
- Geleneksel Mühendislik:Tasarım desenleri genellikle web sunucuları, veritabanı sorguları veya kullanıcı arayüzü oluşturma gibi uygulamalardaki gecikme ve verimlilik için optimize edilir.
- yapay zeka mühendisliği: Yapay zekadaki performans gereksinimleri şu şekildedir: model çıkarım gecikmesi, GPU/TPU kullanım ve bellek optimizasyonuDesenler şunlara uyum sağlamalıdır:
- Ara sonuçların önbelleğe alınması gereksiz hesaplamaları azaltmak için (Dekoratör veya Proxy desenleri).
- Sistem yüküne veya gerçek zamanlı kısıtlamalara bağlı olarak gecikme ve doğruluğu dengelemek için algoritmaları dinamik olarak değiştirme (Strateji deseni).
3. Veri Merkezli Doğa
- Geleneksel Mühendislik: Desenler genellikle sabit girdi-çıktı yapıları (örneğin formlar, REST API yanıtları) üzerinde çalışır.
- yapay zeka mühendisliği: Desenler ele alınmalıdır veri değişkenliği hem yapı hem de ölçek olarak, şunları içerir:
- Gerçek zamanlı sistemler için veri akışı.
- Esnek işlem adımlarına sahip veri hatları gerektiren çok modlu veriler (örneğin metin, resim, video).
- Verimli ön işleme ve artırma hatlarına ihtiyaç duyan büyük ölçekli veri kümeleri, çoğunlukla Builder veya Pipeline gibi desenler kullanır.
4. Deneysellik ve İstikrar
- Geleneksel Mühendislik: Tutarlı performans ve güvenilirliği garanti eden, istikrarlı ve öngörülebilir sistemler oluşturmaya vurgu yapılmaktadır.
- yapay zeka mühendisliği: Yapay zeka iş akışları genellikle deneysel ve şunları içerir:
- Farklı model mimarileri veya veri ön işleme teknikleri üzerinde yineleme yapmak.
- Sistem bileşenlerinin dinamik olarak güncellenmesi (örneğin, modellerin yeniden eğitilmesi, algoritmaların değiştirilmesi).
- Üretim hatlarını bozmadan mevcut iş akışlarını genişletmek, çoğunlukla Decorator veya Factory gibi genişletilebilir kalıpları kullanmak.
Örnek E-posta:Yapay zekadaki bir Fabrika yalnızca bir modeli örneklemekle kalmayıp, önceden yüklenmiş ağırlıklar ekleyebilir, optimize edicileri yapılandırabilir ve eğitim geri aramalarını bağlayabilir; tüm bunları dinamik olarak yapabilir.




