logistic

Metin özetleme, doğal dil işleme (NLP) alanında dikkat çeken konulardan biridir. Özellikle geniş metinleri daha kısa, anlamlı özetlere indirgemek için kullanılan bu yöntem, hem akademik çalışmalarda hem de ticari uygulamalarda sıkça tercih edilir. Derin öğrenme modelleri ile metin özetleme işlemi, genellikle “extractive” (çıkartmalı) ve “abstractive” (özetleyici) olarak iki ana kategoride sınıflandırılır:

  1. Extractive Özetleme: Orijinal metindeki belirli cümleleri veya ifadeleri seçerek özet oluşturur.
  2. Abstractive Özetleme: Yeni cümleler ve ifadeler üreterek metnin ana fikrini özetler.

Bu yazıda, TensorFlow ve Keras kullanarak basit bir “abstractive” metin özetleme modeli nasıl geliştirileceğini ele alacağız.

Adım 1: Gerekli Kütüphaneleri Kurma

Öncelikle TensorFlow ve Keras kütüphanelerini yükleyin. Bu kütüphaneler, derin öğrenme modellerinin oluşturulması ve eğitilmesi için temel araçları sağlar. Ayrıca veri işleme ve metin temizleme için nltk ve re gibi kütüphaneleri kullanacağız.

# Kütüphaneleri yükleme
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Bidirectional, Attention
import numpy as np
import nltk
import re

Adım 2: Veri Kümesini Hazırlama ve Temizleme

Özetleme işlemi için kullanılabilecek çok sayıda veri kümesi bulunmaktadır. Örneğin, Gigaword veya CNN/Daily Mail veri setleri özetleme için popülerdir. Ancak, bu makalede daha basit bir veri kümesi ile temel bir örnek göstereceğiz.

Metin Temizleme

Modelin başarılı bir şekilde eğitilebilmesi için metin verisinin temiz olması önemlidir. İşte temel temizleme işlemleri:

  • Özel karakterleri kaldırma
  • Gereksiz boşlukları temizleme
  • Metni küçük harflerle yazma
def metin_temizleme(metin):
    # Küçük harfler ve gereksiz karakterleri temizleme
    metin = metin.lower()
    metin = re.sub(r'[^a-zA-Z0-9\s]', '', metin)
    return metin

Adım 3: Tokenizasyon ve Dizileştirme

Modelin girdi ve çıktıları diziler halinde temsil edilir. Keras Tokenizer sınıfı, kelimeleri sayılara dönüştürerek bu işlemi kolaylaştırır. Ayrıca tüm dizileri aynı uzunluğa getirmek için pad_sequences fonksiyonunu kullanacağız.

# Tokenizer oluşturma
tokenizer = Tokenizer()
tokenizer.fit_on_texts(metinler)  # metinler eğitim verisi metinlerinin bir listesi

# Metinleri diziye dönüştürme ve sıraları doldurma
diziler = tokenizer.texts_to_sequences(metinler)
diziler = pad_sequences(diziler, maxlen=max_len, padding='post')

Adım 4: Modeli Oluşturma

LSTM (Long Short-Term Memory) katmanları ve Attention mekanizması kullanarak bir özetleme modeli oluşturacağız. Attention mekanizması, özetleme sırasında metnin önemli kısımlarına odaklanmayı sağlar.

# Model oluşturma
model = Sequential([
    Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=max_len),
    Bidirectional(LSTM(units=128, return_sequences=True)),
    Attention(),
    Dense(units=64, activation='relu'),
    Dense(vocab_size, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

Adım 5: Modeli Eğitme

Modeli eğitmek için veriyi girdi ve çıktı olarak ikiye ayırmamız gerekecek. Girdi, özetlenecek tam metni içerirken çıktı ise hedeflenen özet cümleyi içerecek.

Modeli eğitme

# Modeli eğitme
model.fit(girdi_dizileri, çıktı_dizileri, epochs=10, batch_size=64, validation_split=0.2)

Adım 6: Özetleme

Eğitim tamamlandıktan sonra modeli test edebiliriz. Test verisi üzerinde modeli kullanarak metin özetini üretebiliriz.

def ozetle(metin):
    metin_dizi = tokenizer.texts_to_sequences([metin])
    metin_dizi = pad_sequences(metin_dizi, maxlen=max_len, padding='post')
    tahmin = model.predict(metin_dizi)
    ozet = ' '.join([reverse_tokenizer[i] for i in np.argmax(tahmin, axis=1)])
    return ozet

Sonuç ve İyileştirme Önerileri

Bu model temel bir özetleme modeli sunar, ancak performansını artırmak için birkaç iyileştirme yapılabilir:

  1. Pre-trained Embeddings: GloVe veya Word2Vec gibi önceden eğitilmiş gömme vektörleri, kelimelerin anlamlarını daha iyi öğrenebilir.
  2. Transformer Modelleri: Transformer tabanlı modeller, özellikle özetleme için yüksek performans sergiler. BERT, T5 veya GPT-3 gibi modeller daha doğru özetleme sağlar.
  3. Hyperparameter Tuning: Modelin katman sayısı, nöron sayısı, öğrenme oranı gibi hiperparametreler ile oynayarak daha iyi sonuçlar alınabilir.

Bu adımları izleyerek kendi metin özetleme modelinizi geliştirebilir ve metinleri anlamlı özetlere dönüştürebilirsiniz. TensorFlow ve Keras, bu süreçte oldukça esnek ve güçlü bir ortam sunar.

By mgm

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir