Türkçe Metinlerde Özetleme
Öncelikle herkese merhabalar, herhangi bir mecradaki ilk yazıma hepiniz hoş geldiniz. ^^
Bu yazıda elimizdeki herhangi bir metin üzerinden nasıl özetleme yapabileceğimizden bahsedip. Sonrasında ‘Çıkarıma Dayalı Özetleme’ konusunda iki farklı algoritma üzerinden bir kaç örnek göstererek, bunları nasıl yapacağınızı anlatacağım.
Öncelikle sizlere metin özetlemedeki farklı yaklaşımlardan bahsetmek istiyorum.
- Çıkarıma Dayalı Özetleme
- Yoruma Dayalı Özetleme
‘Çıkarıma Dayalı Özetleme’ elinizdeki metni cümle veya kelime bazında parçalayıp, sonrasında bu kelime ve cümleleri puanlamak için bir sistem kurup, sonrasında da bu puanlamalara göre en iyi ‘X’ cümleyi seçtiğimiz bir yöntem.
Çıkarıma dayalı özetlemede alabileceğiniz sonuç metinde en çok kullanılan kelimeleri barındıran cümleler, veya metindeki içerikten en çok bahseden cümleler olabilir. Bu cümleler kullandığınız yönteme göre puanlandığından, aldığımız çıktıda sıralı olarak okunduklarında bazı içerik farklılıkları veya birbiri ardına gelen cümlelerde anlam olarak farklılıklar olacaktır/olabilir. Ama cümleler dil bilgisi açısından tamamen doğru olacaklardır. Çünkü metnin içerisindeki cümleyi olduğu gibi kullanıyoruz.
‘Yoruma Dayalı Özetleme’ ise adından anlaşılacağı üzere, verdiğimiz metindeki cümleleri baştan yorumlayarak yeni cümleler oluşturup bir özet çıkartıyor. Bir nevi bizim için metnin önemli noktalarını bulup, bir hikaye anlatıcısıymış gibi davranıyor.
Yoruma dayalı özetlemenin sonuçları ise çok değişken olabilir. Bu değişkenliğe kullandığınız modelin dili ne kadar bildiği, ne kadar taklit edebildiği, metindeki kilit noktaları anlayıp anlayamadığı gibi bir çok faktör etki edebilir. Çıkarıma dayalı özetlemelerden farklı olarak cümleler dil bilgisi açısından doğru olmayabilirler.
Artık basitçe özetleme kavramları hakkında bilgimiz olduğuna göre, Çıkarıma Dayalı Özetleme yöntemlerini nasıl kullandığımızı ve bunları nasıl kodlayabileceğimize geçelim.
Kelime Frekans Değerine Göre Özetleme
İlk olarak, kelime frekans değerlerini baz alan bir yöntemden bahsedeceğim. Bu yöntem kabaca şu şekilde çalışıyor:
- Elimizdeki metni temizleyelim.
- Kelime frekanslarını, ve cümle skorlarını kayıt edebilmek için iki farklı dictionary oluşturalım.
- Elimizdeki bütün kelimeleri kelime frekans dictionary’sine yazalım.
- Kelime frekansındaki her kelime değerini, maksimum frekans değerine bölelim. Böylece gerçek frekans değerlerini bulalım.
- Elimizdeki metni cümlelere bölelim.
- Her cümleyi de kelimelere bölüp, kelimelerin frekans değerlerini toplayarak cümle değerlerini oluşturalım.
- Cümleleri değerlerine göre sıralayıp istediğimiz kadarını özet olarak geri verelim.
Aşağıda bu adımlarla yazılmış, en yüksek değere sahip 5 cümlenin özet olarak geri verildiği kodu bulabilirsiniz.
TextRank Algoritmasına Göre Özetleme
TextRank, Google’ın PageRank algoritmasının metin üzerinde uygulanmasıyla ortaya çıkan bir yöntem. İşin özü aslında aynı, bu sefer metindeki cümlelerin birbirine olan bağlantılarını kontrol ederek cümlelere puan vermiyorsunuz da, onları o bağlantılar üzerinden ‘önem’ sırasına koyuyorsunuz. Sonrasında da kelime frekansında yaptığımız gibi istediğimiz en önemli ‘X’ cümleyi özet olarak kabul ediyoruz. Bu yöntem de şu şekilde çalışıyor:
- Elimizdeki metni cümlelere ayırıyoruz.
- Sonrasında cümleleri temizliyoruz.
(Burada önemli olan şey cümle yapısının bozulmaması.) - Sonrasında kendimiz eğittiğimiz, veya hazır olarak aldığımız Word2Vec modelimizde temizlenmiş cümlelerimizin kelime vektörlerini bulup, kelimeler yerine bu vektörleri atıyoruz.
- Sonrasında bir benzerlik matrisi oluşturup, elimizdeki bütün cümleleri, kendileriyle denk gelmeyecek şekilde kosinüs benzerliklerini hesaplıyoruz.
- NetworkX kütüphanesinin yardımıyla hesapladığımız cümle benzerlik puanlarından bir ağ haritası oluşturuyoruz, ve bu ağ üzerinde PageRank algoritmasını çalıştırıyoruz.
- Sonrasında yine istediğimiz kadar cümleyi özet olarak kabul edebiliriz.
Aşağıda yine anlattığım bu adımlarla yazılan, en çok bağlantıya sahip 5 cümleyi özet olarak kabul ettiğim kodu bulabilirsiniz.
Bu yazının tüm kodlarına https://github.com/Eruimdas/turkish_text_summarization linkinden erişebilirsiniz.
Okuduğunuz için teşekkürler, bir başka yazıda görüşmek üzere.