Garfield
YZF Admin
TensorFlow, doğal dil işleme projelerinde metni sayısal tensörlere dönüştürmek, bu verilerden dil modeli eğitmek ve yeni metinleri sınıflandırmak ya da tahmin etmek için kullanılır. Temel akış; metinleri temizlemek, kelime veya alt kelime tabanlı bir sözlük oluşturmak, dizileri aynı uzunluğa getirmek, bir model eğitmek ve yeni girdiler üzerinde tahmin almaktır. Örneğin, kısa müşteri yorumlarını olumlu veya olumsuz sınıflandıran küçük bir model bu akışla hazırlanabilir.
Bir NLP projesinde ham cümle doğrudan modele verilmez. Önce cümle, modelin işleyebileceği tamsayı dizisine dönüştürülür. Vektörleştirme, bu dönüşümü yapan aşamadır. Ardından Embedding katmanı, her kelime kimliğini modelin öğrenebileceği yoğun sayısal vektörlere çevirir. Model bu vektörlerden cümlenin anlamına ilişkin örüntüler öğrenir.
Aşağıdaki örnek varsayımsaldır; amacı, ikili metin sınıflandırmasının en küçük çalışan yapısını göstermektir. Girdi, yorum metinlerinden; çıktı ise 0 veya 1 etiketinden oluşur.
Bu örnekte
Bu sayı olasılık kanıtı değildir. Küçük ve yapay bir veri kümesinde yüksek doğruluk alınması, gerçek verilerde de güvenilir sonuç alınacağını göstermez. Gerçek projede verileri eğitim, doğrulama ve test kümelerine ayırmalı; sınıf dengesini, yanlış sınıflandırmaları ve modelin daha önce görmediği cümlelerdeki davranışını ayrıca incelemelisiniz.
Kullanılacak mimari, metin uzunluğuna, veri miktarına ve görevin türüne göre değişir. Basit sınıflandırma için ortalama havuzlama yeterli olabilirken, kelime sırasının önemli olduğu görevlerde tekrarlayan katmanlar veya dikkat mekanizması kullanan mimariler tercih edilebilir.
Tablodaki ayrım kesin bir kural değil, başlangıç seçimidir. Önce basit bir temel model kurup doğrulama kümesinde ölçüm yapmak, daha karmaşık mimariye geçmeden önce yararlıdır. Model değişikliklerini aynı doğrulama düzeni ve aynı ölçütlerle karşılaştırın; son test kümesini bu seçimlerde kullanmayın.
TensorFlow ile doğal dil işleme akışı
Bir NLP projesinde ham cümle doğrudan modele verilmez. Önce cümle, modelin işleyebileceği tamsayı dizisine dönüştürülür. Vektörleştirme, bu dönüşümü yapan aşamadır. Ardından Embedding katmanı, her kelime kimliğini modelin öğrenebileceği yoğun sayısal vektörlere çevirir. Model bu vektörlerden cümlenin anlamına ilişkin örüntüler öğrenir.
Aşağıdaki örnek varsayımsaldır; amacı, ikili metin sınıflandırmasının en küçük çalışan yapısını göstermektir. Girdi, yorum metinlerinden; çıktı ise 0 veya 1 etiketinden oluşur.
Python:
import tensorflow as tf
metinler = tf.constant([
"ürün çok kaliteli ve hızlı geldi",
"paket hasarlıydı ve teslimat gecikti",
"destek ekibi sorunu hemen çözdü",
"aldığım ürün beklentimi karşılamadı"
])
etiketler = tf.constant([1, 0, 1, 0])
vektorleyici = tf.keras.layers.TextVectorization(
max_tokens=1000,
output_mode="int",
output_sequence_length=12
)
vektorleyici.adapt(metinler)
model = tf.keras.Sequential([
vektorleyici,
tf.keras.layers.Embedding(input_dim=1000, output_dim=16),
tf.keras.layers.GlobalAveragePooling1D(),
tf.keras.layers.Dense(1, activation="sigmoid")
])
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"]
)
model.fit(metinler, etiketler, epochs=20, verbose=0)
sonuc = model.predict(tf.constant([
"ürün hızlı geldi ve kalitesi çok iyi"
]), verbose=0)
print(float(sonuc[0][0]))
Bu örnekte
TextVectorization katmanı sözlüğü eğitim metinlerinden öğrenir ve cümleleri 12 öğelik dizilere dönüştürür. Embedding metin öğelerini vektörlere çevirir. GlobalAveragePooling1D dizi boyunca genel bir temsil çıkarır. sigmoid çıktısı 0 ile 1 arasında bir değer üretir; değer 1'e yaklaştıkça model girdiyi birinci sınıfa, burada olumlu yoruma, daha yakın görür.Bu sayı olasılık kanıtı değildir. Küçük ve yapay bir veri kümesinde yüksek doğruluk alınması, gerçek verilerde de güvenilir sonuç alınacağını göstermez. Gerçek projede verileri eğitim, doğrulama ve test kümelerine ayırmalı; sınıf dengesini, yanlış sınıflandırmaları ve modelin daha önce görmediği cümlelerdeki davranışını ayrıca incelemelisiniz.
Model türünü nasıl seçmelisiniz?
Kullanılacak mimari, metin uzunluğuna, veri miktarına ve görevin türüne göre değişir. Basit sınıflandırma için ortalama havuzlama yeterli olabilirken, kelime sırasının önemli olduğu görevlerde tekrarlayan katmanlar veya dikkat mekanizması kullanan mimariler tercih edilebilir.
| Yaklaşım | Uygun olduğu durum | Sınırı |
|---|---|---|
| Embedding + havuzlama | Kısa metin sınıflandırma ve hızlı başlangıç | Uzun bağlamı sınırlı işler |
| LSTM veya GRU | Sıralı bilgilerin önemli olduğu metinler | Uzun dizilerde eğitim maliyeti artabilir |
| Dikkat veya Transformer tabanlı model | Bağlam ilişkileri ve daha karmaşık dil görevleri | Daha fazla veri ve hesaplama gerektirebilir |
Gerçek projede uygulanacak sıra
- Veriyi göreve göre hazırlayın. Her metnin karşısına sınıf etiketini koyun; boş, yinelenen veya yanlış etiketlenmiş kayıtları ayırın. Kişisel veya hassas verileri gereksiz yere eğitim kümesine dahil etmeyin.
- Veriyi bölümlere ayırın. Eğitim kümesini modelin öğrenmesi, doğrulama kümesini ayarları karşılaştırmak ve test kümesini son değerlendirme için kullanın. Test verisini eğitim sırasında modele göstermeyin.
- Vektörleştirmeyi yalnız eğitim metinlerine uyarlayın. Böylece test kümesindeki kelime dağılımının eğitim sürecine sızmasını önlersiniz.
- Basit bir model eğitin. Kayıp değerini ve uygun ölçütleri izleyin; yalnızca eğitim başarısına bakmayın.
- Doğrulama tahminlerini inceleyin. Ayrılmış doğrulama cümlelerinde sınıf skorunu ve seçilen eşik üzerindeki sınıf kararını değerlendirin.
- Hataları örnek bazında değerlendirin. Doğrulamada yanlış sınıflandırılan cümleleri konu, yazım biçimi, ironi, olumsuzluk ve sınıf dengesizliği açısından gruplayın; veri veya model değişikliklerini bu bulgularla seçin. Ayarlar kesinleşince, daha önce seçim için kullanılmamış test kümesinde son değerlendirmeyi yapın.
Son düzenleme: