Ana içeriğe atla

PyTorch ile NLP: Kapsamlı Bir Rehber

NLP’ye Başlangıç: Yeni Başlayanlar için PyTorch Eğitimi
Güncel 3 Eki 2026  · 12 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

NLP ve PyTorch’a Giriş

Doğal Dil İşleme (NLP), makinelerin insan dilini anlamasını ve yanıt vermesini sağlayan, modern yapay zekânın kritik bir bileşenidir. Dijital etkileşimler arttıkça NLP’nin önemi de büyüyor. Esnekliği ve verimli tensör hesaplamaları sayesinde, popüler bir açık kaynak makine öğrenmesi kütüphanesi olan PyTorch, NLP görevleri için güçlü araçlar sunar. Dinamik hesaplama grafiği, karmaşık modelleri kolayca değiştirip inşa etmeyi de mümkün kılar; bu da onu eğitimimiz için ideal kılar.

NLP hakkında daha fazla öğrenmek istiyorsanız, Python ile Doğal Dil İşleme yetkinlik yolumuzu inceleyin; ya da NLP’yi R ile öğrenmeyi tercih ediyorsanız DataCamp’teki R ile Doğal Dil İşlemeye Giriş kursuna göz atın.

Ortamın Hazırlanması

PyTorch ortamını kurmak; işletim sistemi, paket yöneticisi tercihi, programlama dili ve hesaplama platformu gibi faktörlere bağlı olarak zaman zaman zorlayıcı olabilir. Kurulum süreci bu faktörlere göre hafifçe değişebilir ve özel komutlar çalıştırmanızı gerektirebilir.

Uygun kurulum komutunu almak için PyTorch’un resmi başlangıç sayfasını ziyaret edebilir, tercihlerinizi seçerek gerekli talimatları alabilirsiniz.

image7.png

Bu eğitimde DataLab kullanacağız. PyTorch ile duygu analizi modelinin eğitimi için tam kodu adım adım takip etmek isterseniz, bu DataLab çalışma kitabında bulabilirsiniz.

Tensörlere Giriş

image2.png

Tensörler, skalerleri, vektörleri ve matrisleri genelleyen, matematik ve fizikte temel veri yapılarıdır. Büyük miktarda sayısal veriyi verimli şekilde saklayıp işleyebilen çok boyutlu dizilerdir. Tensörler belirli bir şekil, boyut ve veri tipine sahiptir; bu da onları çeşitli hesaplamalar için çok yönlü kılar.

PyTorch bağlamında tensörler, temel yapı taşları ve veri gösterim nesneleridir. PyTorch’taki tensörler, NumPy dizilerine benzer; ancak derin öğrenme hesaplamaları için özel olarak tasarlanmış ek işlevler ve optimizasyonlarla gelir. PyTorch’un tensör işlemleri, GPU’lar gibi donanım hızlandırmasından yararlanarak karmaşık sinir ağlarının verimli hesaplanmasını sağlar.

Tensörler, dil verisinin doğası gereği sıralı ve hiyerarşik yapıda olması nedeniyle NLP görevlerinde kritik bir rol oynar.

NLP, metinsel bilgiyi işleme ve anlama sürecidir. Tensörler, kelimeleri, cümleleri veya belgeleri sayısal vektörler olarak kodlayarak metin verisinin temsilini ve işlenmesini mümkün kılar.

Bu sayısal temsil, derin öğrenme modellerinin metin verisini etkili biçimde işlemesini ve ondan öğrenmesini sağlar. Tensörler, büyük ölçekli dil veri kümelerinin verimli yönetimini, sinir ağlarının eğitimini ve daha doğru NLP modelleri için dikkat mekanizmaları gibi ileri teknikleri mümkün kılar.

Kelime Gömlemeleri

image5.png

Kelime gömlemeleri, kelimelerin sürekli bir vektör uzayındaki yoğun vektör temsilleridir. Metinsel verinin daha iyi anlaşılması ve bağlamsallaştırılması için kelimeler arasındaki anlamsal ve sözdizimsel ilişkileri yakalamayı amaçlarlar. Kelimeleri sayısal vektörler olarak temsil ederek, gömlemeler anlamsal benzerlik ve farklılıkları içerir; böylece algoritmaların kelimelerle anlamlı sayısal girdiler olarak çalışmasını sağlar.

Basitçe söylemek gerekirse, gömlemeler kelimeleri sayılarla temsil etmenin akıllı bir yoludur. Bu sayılar, kelimelerin birbirleriyle nasıl ilişkili olduğunu yakalayan özel anlamlar taşır. Bu, bilgisayarların kelimeleri daha kolay anlamasına ve işlemesine yardımcı olan gizli bir koda benzer.

Word2Vec ve GloVe, kelime gömlemeleri üretmek için iki popüler yöntemdir. Word2Vec, bir hedef kelime verildiğinde çevresindeki kelimeleri (sürekli kelime torbası - CBOW) tahmin ederek veya bağlamına göre hedef kelimeyi tahmin ederek (skip-gram) kelime temsillerini öğrenen sinir ağı tabanlı bir modeldir.

GloVe (Global Vectors for Word Representation), büyük bir derlemde kelimelerin birlikte görülme istatistiklerine dayalı olarak kelime vektörleri oluşturan sayma tabanlı bir yöntemdir. Küresel kelime ilişkilerini yakalar ve sıklıkla kelime benzetme görevlerinde daha iyi performans sağlar.

NLP Model Mimarisi

image4.png

Duygu Analizi görevi için örnek model mimarisi.

Duygu Analizi, bir metinde ifade edilen duyguyu anlamayı amaçlayan ve genellikle pozitif, negatif veya nötr olarak sınıflandırılan yaygın bir NLP görevidir. Bu görevi ele almak için basit bir tekrarlayan sinir ağı (RNN) ya da daha gelişmiş bir sürümü olan uzun-kısa süreli bellek (LSTM) kullanılabilir.

RNN’ler

RNN mimarisi metni sıralı olarak işler; her kelime art arda ağa verilir. Ağ, şimdiye kadar işlenen diziden bilgiyi yakalayan ve her kelime girdisiyle değişen gizli bir durumu korur.

Bu gizli durum, ağın hafızası gibi davranır. Ancak standart RNN’ler, bilginin zamanla geometrik olarak azalmasına neden olan kaybolan gradyan sorunu nedeniyle uzun dizilerde zorlanır; bu da ağın önceki girdileri unutmasına yol açar. Tekrarlayan sinir ağları hakkında daha fazla bilgi için RNN eğitimimize göz atabilirsiniz. 

LSTM’ler

Bunu aşmak için RNN’in bir varyantı olan LSTM geliştirilmiştir. LSTM, gizli durumunda daha karmaşık bir iç yapıya sahip olarak daha uzun bir bağlam veya “hafıza” korur. Bellek durumuna giren ve çıkan bilgi akışını kontrol eden bir dizi “kapı”ya (girdi, unutma ve çıktı kapısı) sahiptir.

Girdi kapısı gelen bilginin ne kadarının bellek durumunda saklanacağını belirler. Unutma kapısı hangi bilginin atılacağına karar verir ve çıktı kapısı ise dizideki bir sonraki LSTM birimine iç durumun ne kadarının aktarılacağını tanımlar.

RNN veya LSTM modeli, bir cümledeki ya da belgedeki kelime dizisini girdi olarak alır. Her kelime tipik olarak, kelimenin anlamsal anlamını yakalayan yoğun bir vektör ya da gömme ile temsil edilir.

Ağ, diziyi kelime kelime işler ve mevcut kelime ile önceki duruma bağlı olarak iç durumunu günceller.

Ardından ağın son durumu, duyguyu tahmin etmek için kullanılır. Tam bağlantılı bir katmandan ve ardından duygu sınıfları (ör. pozitif, negatif, nötr) üzerinde olasılık dağılımı veren bir softmax aktivasyonundan geçirilir.

En yüksek olasılığa sahip sınıf, modelin tahmini olarak seçilir.

Bu temel bir kurulumdur ve çift yönlü LSTM’ler (diziyi her iki yönde de işler) ve dikkat mekanizmaları (modelin dizinin önemli kısımlarına odaklanmasını sağlar) gibi tekniklerle daha da geliştirilebilir.

PyTorch ile Duygu Analizi için LSTM Modelinin Eğitimi

PyTorch kullanarak Duygu Analizi Modeli oluşturmak için uçtan uca Python kod örneği

1. Veri kümesini yükleyin

Bu örnekte, 50K IMDB film incelemesi veri kümesini kullanacağız. Amaç, duyguyu tahmin etmek için bir LSTM modeli eğitmektir. İki olası değer vardır: ‘positive’ ve ‘negative’. Dolayısıyla bu bir ikili sınıflandırma görevidir.

file_name = 'IMDB Dataset.csv'
df = pd.read_csv(file_name)
df.head()

Örnek veri kümesi

2. Keşifsel veri analizi

X,y = df['review'].values,df['sentiment'].values
x_train,x_test,y_train,y_test = train_test_split(X,y,stratify=y)
print(f'train data shape: {x_train.shape}')
print(f'test data shape: {x_test.shape}')


dd = pd.Series(y_train).value_counts()
sns.barplot(x=np.array(['negative','positive']),y=dd.values)
plt.show()

Çıktı:

>>> train data shape: (37500,)

>>> test data shape: (12500,)

image14.png

3. Metin ön işleme

Metin ön işleme ve tokenleştirme kritik bir ilk adımdır. Önce, noktalama işaretlerini, fazla boşlukları ve rakamları kaldırarak metni temizliyoruz.

Ardından cümleleri tek tek kelimelere dönüştürüyor, yaygın kelimeleri ("stop words" olarak bilinir) kaldırıyor ve veri kümesinde en sık kullanılan 1000 kelimeyi takip ediyoruz. Bu kelimelere benzersiz bir kimlik atanarak tek-sıcak (one-hot) kodlama için bir sözlük oluşturuluyor.

Kod, özünde, özgün metin cümlelerini bu benzersiz kimliklerin dizilerine dönüştürerek insan dilini makine öğrenmesi modelinin anlayabileceği bir formata çeviriyor.

def preprocess_string(s):
    # Remove all non-word characters (everything except numbers and letters)
    s = re.sub(r"[^\w\s]", '', s)
    # Replace all runs of whitespaces with no space
    s = re.sub(r"\s+", '', s)
    # replace digits with no space
    s = re.sub(r"\d", '', s)
    return s


def tokenize(x_train,y_train,x_val,y_val):
    word_list = []


    stop_words = set(stopwords.words('english'))
    for sent in x_train:
        for word in sent.lower().split():
            word = preprocess_string(word)
            if word not in stop_words and word != '':
                word_list.append(word)
 
    corpus = Counter(word_list)
    # sorting on the basis of most common words
    corpus_ = sorted(corpus,key=corpus.get,reverse=True)[:1000]
    # creating a dict
    onehot_dict = {w:i+1 for i,w in enumerate(corpus_)}
   
    # tokenize
    final_list_train,final_list_test = [],[]
    for sent in x_train:
            final_list_train.append([onehot_dict[preprocess_string(word)] for word in sent.lower().split()
                                     if preprocess_string(word) in onehot_dict.keys()])
    for sent in x_val:
            final_list_test.append([onehot_dict[preprocess_string(word)] for word in sent.lower().split()
                                    if preprocess_string(word) in onehot_dict.keys()])
           
    encoded_train = [1 if label =='positive' else 0 for label in y_train]  
    encoded_test = [1 if label =='positive' else 0 for label in y_val]
    return np.array(final_list_train), np.array(encoded_train),np.array(final_list_test), np.array(encoded_test),onehot_dict


x_train,y_train,x_test,y_test,vocab = tokenize(x_train,y_train,x_test,y_test)

x_train içindeki token uzunluğunu analiz edelim.

rev_len = [len(i) for i in x_train]
pd.Series(rev_len).hist()

image1.png

4. Veriyi model için hazırlama

Her incelemenin değişken token uzunlukları göz önüne alındığında, tutarlılık için bunları standartlaştırmak gerekir. İncelemelerin çoğu 500’den az token içerdiğinden, tüm incelemeler için sabit uzunluk olarak 500’ü belirleyeceğiz.

def padding_(sentences, seq_len):
    features = np.zeros((len(sentences), seq_len),dtype=int)
    for ii, review in enumerate(sentences):
        if len(review) != 0:
            features[ii, -len(review):] = np.array(review)[:seq_len]
    return features


x_train_pad = padding_(x_train,500)
x_test_pad = padding_(x_test,500)

Sonraki adımda, model eğitimi için nihai veri kümesini oluşturmak üzere DataLoader sınıfını kullanıyoruz.

# create Tensor datasets
train_data = TensorDataset(torch.from_numpy(x_train_pad), torch.from_numpy(y_train))
valid_data = TensorDataset(torch.from_numpy(x_test_pad), torch.from_numpy(y_test))


# dataloaders
batch_size = 50


# make sure to SHUFFLE your data
train_loader = DataLoader(train_data, shuffle=True, batch_size=batch_size)
valid_loader = DataLoader(valid_data, shuffle=True, batch_size=batch_size)


# obtain one batch of training data
dataiter = iter(train_loader)
sample_x, sample_y = next(dataiter)


print('Sample input size: ', sample_x.size()) # batch_size, seq_length
print('Sample input: \n', sample_x)
print('Sample output: \n', sample_y)

Çıktı:

image3.png

5. LSTM modelini tanımlayın

Bu kod bölümü, yukarıda belirttiğimiz üzere, RNN mimarisi kullanan bir duygu analizi modelini, özellikle de Uzun Kısa Süreli Bellek (LSTM) türünde bir RNN’i tanımlar. SentimentRNN sınıfı, kelime indekslerini kelimelerin anlamsal anlamını yakalayan yoğun temsillere dönüştüren bir gömme katmanıyla başlar. Bunu, kelime gömmeleri dizisini işleyen bir LSTM katmanı izler.

LSTM’in gizli durumu, modeli düzenlemek ve aşırı uyumu engellemek için bir dropout katmanından ve nihai tahmine eşleyen tam bağlantılı bir katmandan geçirilir. Tahmin daha sonra ham çıktı değerlerini olasılıklara dönüştüren bir sigmoid aktivasyonundan geçer. forward yöntemi verinin ağdan ileri geçişini tanımlar; init_hidden yöntemi ise LSTM katmanının gizli durumlarını sıfırlarla başlatır.

class SentimentRNN(nn.Module):
    def __init__(self,no_layers,vocab_size,hidden_dim,embedding_dim,drop_prob=0.5):
        super(SentimentRNN,self).__init__()
 
        self.output_dim = output_dim
        self.hidden_dim = hidden_dim
 
        self.no_layers = no_layers
        self.vocab_size = vocab_size
   
        # embedding and LSTM layers
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
       
        #lstm
        self.lstm = nn.LSTM(input_size=embedding_dim,hidden_size=self.hidden_dim,
                           num_layers=no_layers, batch_first=True)
       
        # dropout layer
        self.dropout = nn.Dropout(0.3)
   
        # linear and sigmoid layer
        self.fc = nn.Linear(self.hidden_dim, output_dim)
        self.sig = nn.Sigmoid()
       
    def forward(self,x,hidden):
        batch_size = x.size(0)
        # embeddings and lstm_out
        embeds = self.embedding(x)  # shape: B x S x Feature   since batch = True
        #print(embeds.shape)  #[50, 500, 1000]
        lstm_out, hidden = self.lstm(embeds, hidden)
       
        lstm_out = lstm_out.contiguous().view(-1, self.hidden_dim)
       
        # dropout and fully connected layer
        out = self.dropout(lstm_out)
        out = self.fc(out)
       
        # sigmoid function
        sig_out = self.sig(out)
       
        # reshape to be batch_size first
        sig_out = sig_out.view(batch_size, -1)


        sig_out = sig_out[:, -1] # get last batch of labels
       
        # return last sigmoid output and hidden state
        return sig_out, hidden
       
    def init_hidden(self, batch_size):
        ''' Initializes hidden state '''
        # Create two new tensors with sizes n_layers x batch_size x hidden_dim,
        # initialized to zero, for hidden state and cell state of LSTM
        h0 = torch.zeros((self.no_layers,batch_size,self.hidden_dim)).to(device)
        c0 = torch.zeros((self.no_layers,batch_size,self.hidden_dim)).to(device)
        hidden = (h0,c0)
        return hidden 

Şimdi yukarıda tanımladığımız SentimentRNN sınıfını gerekli parametrelerle başlatacağız.

no_layers = 2
vocab_size = len(vocab) + 1 #extra 1 for padding
embedding_dim = 64
output_dim = 1
hidden_dim = 256


model = SentimentRNN(no_layers,vocab_size,hidden_dim,embedding_dim,drop_prob=0.5)


#moving to gpu
model.to(device)
print(model)

image10.png

Eğitim sürecine başlamadan önceki son adım, kayıp ve optimizasyon fonksiyonlarını tanımlamaktır. Bu bölüm, duygu analizi modelimiz için kayıp fonksiyonunu, optimizasyon yöntemini ve doğruluk hesaplama yardımcı fonksiyonunu tanımlamaya odaklanır.

Kullanılan kayıp fonksiyonu, bu tür ikili sınıflandırma görevlerinde yaygın olan İkili Çapraz Entropi Kaybıdır (nn.BCELoss). Optimizasyon yöntemi, verimliliği ve düşük bellek gereksinimi nedeniyle popüler bir tercih olan Adam’dır (torch.optim.Adam). Adam için öğrenme oranı 0.001 olarak ayarlanmıştır.

acc fonksiyonu, modelimizin tahminlerinin doğruluğunu hesaplamak üzere tasarlanmış bir yardımcı işlevdir. Tahmin edilen olasılıkları en yakın tam sayıya (0 veya 1) yuvarlar, bu tahminleri gerçek etiketlerle karşılaştırır ve ardından doğru tahminlerin yüzdesini hesaplar.

# loss and optimization functions


lr=0.001


criterion = nn.BCELoss()


optimizer = torch.optim.Adam(model.parameters(), lr=lr)


# function to predict accuracy
def acc(pred,label):
    pred = torch.round(pred.squeeze())
    return torch.sum(pred == label.squeeze()).item()

6. Eğitime başlayın

Bu kod bölümü, duygu analizi modelinin eğitilip doğrulandığı yerdir. Her epoch (yineleme) bir eğitim aşaması ve bir doğrulama aşaması içerir. Eğitim aşamasında model, kaybı en aza indirmek için parametrelerini ayarlayarak öğrenir.

Doğrulama aşamasında, modelin performansı ayrı bir veri kümesi üzerinde değerlendirilir; böylece yalnızca eğitim verisini ezberlemek yerine genellenebilir kalıpları öğrendiğinden emin olunur.

Eğitim döngüsü, LSTM’in gizli durumlarının başlatılması ve modelin eğitim moduna alınmasıyla başlar. Her veri yığını için, modelin tahminleri gerçek etiketlerle karşılaştırılarak kayıp hesaplanır; bu kayıp geri yayılım ile modelin parametrelerini güncellemek üzere kullanılır.

Gradyanlar, çok büyümelerini engellemek için bir üst değerde kırpılır; bu, RNN ve LSTM eğitimlerinde yaygın bir sorundur.

Doğrulama döngüsünde model değerlendirme moduna alınır ve parametreleri güncellenmeden, doğrulama verisiyle performansı ölçülür. Hem eğitim hem doğrulama aşamaları için kod, her epoch’un kayıp ve doğruluğunu takip eder.

Doğrulama kaybı iyileşirse, o ana kadarki en iyi modeli yakalamak için mevcut modelin parametreleri kaydedilir.

Son olarak, her epoch’tan sonra o epoch’un ortalama kaybı ve doğruluğu yazdırılır; bu da modelin öğrenme ilerleyişine dair içgörü sağlar.

clip = 5
epochs = 5
valid_loss_min = np.Inf
# train for some number of epochs
epoch_tr_loss,epoch_vl_loss = [],[]
epoch_tr_acc,epoch_vl_acc = [],[]


for epoch in range(epochs):
    train_losses = []
    train_acc = 0.0
    model.train()
    # initialize hidden state
    h = model.init_hidden(batch_size)
    for inputs, labels in train_loader:
       
        inputs, labels = inputs.to(device), labels.to(device)  
        # Creating new variables for the hidden state, otherwise
        # we'd backprop through the entire training history
        h = tuple([each.data for each in h])
       
        model.zero_grad()
        output,h = model(inputs,h)
       
        # calculate the loss and perform backprop
        loss = criterion(output.squeeze(), labels.float())
        loss.backward()
        train_losses.append(loss.item())
        # calculating accuracy
        accuracy = acc(output,labels)
        train_acc += accuracy
        #`clip_grad_norm` helps prevent the exploding gradient problem in RNNs / LSTMs.
        nn.utils.clip_grad_norm_(model.parameters(), clip)
        optimizer.step()
       
    val_h = model.init_hidden(batch_size)
    val_losses = []
    val_acc = 0.0
    model.eval()
    for inputs, labels in valid_loader:
            val_h = tuple([each.data for each in val_h])


            inputs, labels = inputs.to(device), labels.to(device)


            output, val_h = model(inputs, val_h)
            val_loss = criterion(output.squeeze(), labels.float())


            val_losses.append(val_loss.item())
           
            accuracy = acc(output,labels)
            val_acc += accuracy
           
    epoch_train_loss = np.mean(train_losses)
    epoch_val_loss = np.mean(val_losses)
    epoch_train_acc = train_acc/len(train_loader.dataset)
    epoch_val_acc = val_acc/len(valid_loader.dataset)
    epoch_tr_loss.append(epoch_train_loss)
    epoch_vl_loss.append(epoch_val_loss)
    epoch_tr_acc.append(epoch_train_acc)
    epoch_vl_acc.append(epoch_val_acc)
    print(f'Epoch {epoch+1}')
    print(f'train_loss : {epoch_train_loss} val_loss : {epoch_val_loss}')
    print(f'train_accuracy : {epoch_train_acc*100} val_accuracy : {epoch_val_acc*100}')
    if epoch_val_loss <= valid_loss_min:
        torch.save(model.state_dict(), 'state_dict.pt')
        print('Validation loss decreased ({:.6f} --> {:.6f}).  Saving model ...'.format(valid_loss_min,epoch_val_loss))
        valid_loss_min = epoch_val_loss
    print(25*'==')

Çıktı:

image9.png

7. Model değerlendirme

Bu kod bölümü, eğitim süresince eğitim ve doğrulama doğruluğu ile kaybını görsel olarak göstermek için iki grafik üretir. İlk alt grafik, her epoch’tan sonra eğitim ve doğrulama doğruluğunun çizgi grafiğini görüntüler. Bu grafik, modelin zaman içinde ne kadar iyi öğrendiğini ve genellediğini gözlemlemek için kullanışlıdır.

İkinci alt grafik ise eğitim ve doğrulama kaybının çizgi grafiğini gösterir. Bu sayede modelimizin aşırı uyum, yetersiz uyum ya da uygun uyum gösterip göstermediğini görebiliriz.

fig = plt.figure(figsize = (20, 6))
plt.subplot(1, 2, 1)
plt.plot(epoch_tr_acc, label='Train Acc')
plt.plot(epoch_vl_acc, label='Validation Acc')
plt.title("Accuracy")
plt.legend()
plt.grid()
   
plt.subplot(1, 2, 2)
plt.plot(epoch_tr_loss, label='Train loss')
plt.plot(epoch_vl_loss, label='Validation loss')
plt.title("Loss")
plt.legend()
plt.grid()


plt.show()

Çıktı:

image6.png

8. Çıkarım / Tahmin

Bu bölümde, verilen bir metnin duygusunu tahmin etmek için predict_text adlı bir fonksiyon ve kullanımına dair bir örnek oluşturuyoruz. predict_text fonksiyonu, girdi olarak bir metin dizesi alır; bunu önceden tanımlı bir sözlüğe göre kelime indeksleri dizisine dönüştürür ve modele girdi olarak verilebilmesi için doldurma ve yeniden şekillendirme işlemleriyle hazırlar. Ardından LSTM’in gizli durumlarını başlatır, girdiyi modele verir ve ham metnin model çıktısı olan olasılığı döndürür.

def predict_text(text):
        word_seq = np.array([vocab[preprocess_string(word)] for word in text.split()
                         if preprocess_string(word) in vocab.keys()])
        word_seq = np.expand_dims(word_seq,axis=0)
        pad =  torch.from_numpy(padding_(word_seq,500))
        inputs = pad.to(device)
        batch_size = 1
        h = model.init_hidden(batch_size)
        h = tuple([each.data for each in h])
        output, h = model(inputs, h)
        return(output.item())


index = 30
print(df['review'][index])
print('='*70)
print(f'Actual sentiment is  : {df["sentiment"][index]}')
print('='*70)
pro = predict_text(df['review'][index])
status = "positive" if pro > 0.5 else "negative"
pro = (1 - pro) if status == "negative" else pro
print(f'Predicted sentiment is {status} with a probability of {pro}')

Çıktı:

image13.png

Bu tam not defteri DataLab kullanılarak geliştirildi ve bu çalışma kitabından erişilebilir. Kodun yürütülmesinin, CPU kullanıyorsanız, oldukça uzun sürebileceğini unutmayın. Ancak GPU kullanımı eğitim süresini önemli ölçüde azaltabilir.

Sonraki Adımlar / Modeli İyileştirme

Bir NLP modelini iyileştirmek, genellikle eldeki görevin özel gereksinim ve kısıtlarına göre uyarlanmış birden çok stratejiyi içerir. Hiperparametre ayarı, öğrenme oranı, yığın boyutu veya sinir ağındaki katman sayısı gibi parametrelerin ayarlanmasını içeren yaygın bir yaklaşımdır.

Bu hiperparametreler, modelin performansını önemli ölçüde etkileyebilir ve tipik olarak ızgara araması veya rastgele arama gibi tekniklerle optimize edilir.

Özellikle BERT veya GPT gibi modellerle transfer öğrenme, NLP görevlerini iyileştirmede büyük potansiyel göstermiştir. Bu modeller, büyük metin derlemleri üzerinde önceden eğitilir ve ardından belirli bir görev üzerinde ince ayar yapılır; böylece ön eğitim sırasında kazanılan genel dil anlayışından yararlanırlar. Bu yaklaşım, duygu analizi de dâhil olmak üzere çok çeşitli NLP görevlerinde tutarlı biçimde son teknoloji sonuçlar vermiştir.

PyTorch ile NLP’nin Gerçek Dünya Uygulamaları

Doğal Dil İşleme (NLP) modellerinin, özellikle PyTorch gibi çerçeveler kullanılarak uygulananların, gerçek dünya uygulamalarında yaygın kullanımı; dijital hayatımızın çeşitli yönlerini dönüştürmüştür.

Sohbet botları, kullanıcı sorularını anlamak ve yanıtlamak için NLP modellerinden yararlanarak müşteri hizmetleri platformlarının ayrılmaz bir parçası hâline geldi. Bu modeller, doğal dil girdilerini işleyebilir, niyeti çıkarabilir ve insan benzeri yanıtlar üreterek kesintisiz etkileşim deneyimleri sunar.

Öneri sistemleri alanında, NLP modelleri kullanıcı yorumlarını ve değerlendirmelerini analiz ederek tercihleri anlamaya yardımcı olur; böylece önerilerin kişiselleştirilmesini güçlendirir.

Duygu analizi araçları da büyük ölçüde NLP’ye dayanır. Bu araçlar, sosyal medya paylaşımlarını, müşteri yorumlarını veya herhangi bir metni inceleyip ardındaki duyguyu çıkarabilir. İşletmeler, pazarlama araştırmaları için veya ürün ve hizmetlerine yönelik kamuoyu nabzını tutmak amacıyla bu içgörüleri sıkça kullanır ve veriye dayalı kararlar alır.

Google BERT kullanımı için daha fazla gerçek dünya kullanım örneğini bu Doğal Dil İşleme Eğitiminde keşfedin.

Sonuç

PyTorch, NLP modelleri oluşturmak için güçlü ve esnek bir platform sunar. Bu eğitimde, bir LSTM mimarisi kullanarak duygu analizi modeli geliştirme sürecini; metin verisini ön işlemeyi, modeli kurmayı, onu eğitip doğrulamayı ve son olarak görülmemiş veriler üzerinde tahmin yapmayı içeren temel adımlarla birlikte ele aldık.

Bu, NLP ve PyTorch ile mümkün olanların yalnızca görünen kısmıdır. NLP; sohbet botlarından öneri sistemlerine, duygu analizi araçlarına ve ötesine kadar geniş uygulamalara sahiptir.

Özellikle BERT ve GPT gibi transfer öğrenme modellerinin ortaya çıkışıyla birlikte alandaki sürekli evrim, gelecekte keşif için daha da heyecan verici olasılıkların kapısını aralıyor. PyTorch ile NLP’de ustalaşmak zorlayıcı ama bir o kadar da ödüllendiricidir; çünkü etrafımızdaki dünyayı anlama ve onunla etkileşim kurmada yeni bir boyut açar.

PyTorch’a derinlemesine dalmakla ilgileniyorsanız, PyTorch ile Derin Öğrenme kursumuza göz atın. Burada, PyTorch kütüphanesine ve onun sinir ağları ile derin öğrenmedeki uygulamalarına girişle başlayacaksınız. Ardından yapay sinir ağlarını ele alacak ve gerçek verilerle nasıl eğitileceğini öğreneceksiniz.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Veri Bilimci, PyCaret'in Kurucusu ve Yaratıcısı

Konular
Python

NLP becerilerinizi bugün geliştirin!

Kurs

Python ile NLP için Özellik Mühendisliği

4 sa
29.7K
Metinden yararlı bilgileri çıkarmak ve bunları makine öğrenimi için uygun bir biçime dönüştürmek için teknikler öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör