BERT ile Metin Özetleme Nasıl Yapılır?

Son teknoloji modellerde, makine öğrenimini herkesin erişebileceği hale getirmek için düşük kodlu ortamlara (low-code environment) odaklanan daha güçlü algoritmalar geliştiriliyor. BERT, Roberta ve XLNET; bilgisayarla görü alanında görüntü sınıflandırma, yüz tanıma için öğrenme modellerini aktarma ve sorunları doğal dil işlemeyi kullanarak çözme de oldukça güçlü modellerdir. Bu modeller, POS (Sözcük sınıfı) etiketleme, duygu analizi, metin özetleme vb. görevleri oldukça kolay bir şekilde gerçekleştirdiği için NLP dünyasında önemli bir yere sahiptir. Bu yazımızda BERT kullanarak, bloglar ve haber makaleleri gibi büyük gönderileri sadece birkaç satır kod kullanarak özetleyebilen BERT ile metin özetleme modeli oluşturacağız.

BERT ile Metin Özetleme

Metin özetleme; bir belgeyi/dokümanı matematiksel yöntemler kullanarak kısa paragraflar veya ifadeler halinde sıkıştırmak anlamına gelmektedir. NLP, genel olarak metin özetlemeyi iki gruba ayırır:

  • Çıkarımsal metin özetleme: Bu yaklaşımda, model uzun belgeleri özetler, daha küçük ve basit cümlelerle temsil eder.
  • Soyut metin özetleme: Model, öncesinde herhangi bir içerik sağlanmadan konuya göre bir özet üretmelidir.

Biz bu yazıda ilk grup olan çıkarımsal metin özetlemeyi anlayıp uygulayacağız.

BERT (BERTSUM) ile Çıkarımsal Metin Özetleme

Soyut metin özetlemeden farklı olarak, çıkarımsal metin özetleme de modelin tüm metni “anlaması”, doğru anahtar kelimeleri seçmesi ve bu anahtar kelimeleri bir araya getirerek, anlamlı cümleler elde etmesi gerekiyor. Aynı zamanda bunları yaparken herhangi bir bilgi kaybı da söz konusu olmamalı. Peki, BERT tüm bunları nasıl bu kadar hızlı ve doğru yapıyor?

BERT modeli ile özetleme için kullanılan BERT modeli

Yukarıdaki resme baktığınızda, orijinal BERT modeli ile özetleme için kullanılan BERT modeli arasında küçük farklılıklar görebilirsiniz. BERTSUM modelinin giriş formatı, orijinal modelle karşılaştırıldığında farklıdır. Burada, birden çok cümleyi ayırmak ve önceki cümlenin özelliklerini toplamak için her cümlenin başına bir [CLS] simgesi eklenir. Segment yerleştirmelerinde de farklılıklar vardır. Cümlenin çift veya tek olmasına bağlı olarak her cümleye bir Ea veya Eb yerleştirmesi atanır. Dizi [s1, s2, s3] ise, o zaman segment yerleştirmeleri [Ea, Eb, Ea] olur. Bu şekilde, tüm cümleler gömülür ve sonraki katmanlara gönderilir.

BERTSUM, her cümleye, cümlenin genel dokümana ne kadar değer kattığını temsil eden puanlar atar. Böylece, [s1, s2, s3]’e [skor1, skor2, skor3] atanır. En yüksek puana sahip cümleler daha sonra toplanır ve makalenin genel özetini vermek için yeniden düzenlenir.

Artık BERTSUM’un çalışmasını anladığımıza göre, bunları özel bir makaleye uygulayalım.

Veriyi Yükleme

Herhangi bir kaynaktan bir paragraf seçebilirsiniz. Bu yazı için, WHO’nun sağlamış olduğu korona virüs raporunu kullanacağız. İndirmek için ilgili linke tıklayabilirsiniz. İndirdikten sonra BERT kütüphanesini yükleyerek başlayabiliriz.

pip install bert-extractive-summarizer

İndirmiş olduğumuz raporu okuyarak bir değişkene atıyoruz.

koronavirus_rapor =open('corona.txt','r').read()
koronavirüs_raporu

BERTSUM, özetleyici adı verilen yerleşik bir modüle sahiptir. Verilerimizi alıp, erişimini sağladıktan saniyeler sonra metinin özetini oluşturur.

from summarizer import Summarizer
model = Summarizer()
result = model(koronavirus_rapor, min_length=30)
summary = "".join(result)
print(summary)
koronavirüs_raporu_özeti

Yukarıda görüldüğü üzere paragrafımız iki cümlelik küçük bir özete dönüştürülmüştür.

Web’den Çekilen Bir Haberi Özetleme

Python, newspaper adı verilen bir kütüphane sağlayarak veri yüklemeyi bizim için kolaylaştırır. Bu kütüphane, tüm metin bilgilerini verilen URL’den çıkarabilen bir web kazıyıcıdır. Newspaper kütüphanesi, dilleri sorunsuz bir şekilde çıkarabilir ve algılayabilir. Herhangi bir dil belirtilmezse, newspaper kütüphanesi bir dili otomatik olarak algılamaya çalışır.

Bu kütüphaneyi yüklemek için aşağıdaki komutu çalıştırmanız gerekmektedir.

pip install newspaper3k 

Kütüphaneyi yükledikten sonra içe aktarıyoruz. Daha sonra ise özetlemek istediğimiz içeriği çekip modelimize parametre olarak veriyoruz.

from newspaper import fulltext
import requests
article_url = "https://teknoloji.org/yeni-gpt-3-dil-modeli-nlpyi-zirvelere-tasiyor/"
article = fulltext(requests.get(article_url).text)
bert-metin-özetleme-metin
from summarizer import Summarizer
model = Summarizer()
result = model(article, min_length=30,max_length=200)
summary = "".join(result)
print(summary)
bert-metin-özetleme

Modelimiz, 492 kelimelik yazımızın özetini 74 kelime ile özetledi. İhtiyaçlarınıza göre, özetin boyutunu sınırlayabilirsiniz. BERT kullanarak metin özetleme görüleceği üzere gayet basit. Siz de kendi yazılarınızı birkaç satır kod ile özetleyebilirsiniz.

Teknoloji'den geri kalmamak için e-posta listemize abone olun!

Muğla Sıtkı Koçman Üniversitesi Bilgisayar Mühendisliği 3.sınıf öğrencisi.