English: https://medium.com/@enescidem/twitter-x-topic-modeling-556d5aad5d0a
Türkçe: https://medium.com/@enescidem/twitter-x-konu-modelleme-e713fea6224f
Topic Modeling, bir metin belgesinde “topics(konular)” adı verilen kelime gruplarını bulmak için kullanılan denetimsiz(unsupervised) bir yaklaşımdır. Twitter(X)'dan alınmış olan farklı hesaplardan (BabalaTv, ProfDemirtas, haluklevent, pusholder, Darkwebhaber, yirmiucderece, solcugazete, OguzhanUgur, vekilince, GalatasaraySK, aykiricomtr ve RTErdogan) çekilen tweetler analiz edilip topiclerinin belirlenmesi.
-Pandas
-NumPy
-Ntscrapper
-Matplotlibt
-Scikit-learn
Dataseti Twitter(X)'dan çekilen ve istenilen hesaplardan atılmış tweetlerden oluşacaktır. Seçilen hesaplar BabalaTv, ProfDemirtas, haluklevent, pusholder, Darkwebhaber, yirmiucderece, solcugazete, OguzhanUgur, vekilince, GalatasaraySK, aykiricomtr ve RTErdogan ' dır. Bu hesaplardaki veriler ile model eğitileceği için bu verilerin düzgün veriler olması gerekir. Bu yüzden verilerin çekileceği twitter hesapları düzgün bir şekilde seçilmiştir.
Bu twitter hesaplarının seçilme sebebi dünyada en çok etkileşime giren yerli Twitter(X) hesapları olmasıdır:
Pythonda twitter'dan istenilen tweetleri çekebilmek için scraping işlemi yapan ntscraper kütüphanesi kullanılıyor.
https://github.com/zedeus/nitter?tab=readme-ov-file
Bu kütüphane verilen kullanıcı adına veya hastage göre ve istenilen tweet sayısına göre istenilen tweetleri döndürüyor.
Data seti'ni oluştururken yapılan sorgular 12 adet hesaptan 1000'er adet tweet çekilerek oluşturulmuştur. Her hesaptan 1000'er adet tweet çekemediği için 900, 800, 750, 600 olarak değişkenlik göstermektedir. Toplam 12 hesaptan 8810 adet tweet çekilmiştir.
12 hesap için 8810 adet verinin çekilmesi işlemi ortalama 35-40 dakika sürüyor.
Veri seti'ndeki kolonlarımız aşağıdaki gibidir:
-Tweet'in linki
-Tweet'in kendisi.
-Tweet'in like sayısı.
-Tweet'in yorum sayısı.
Veriseti oluşturulduktan sonra modelin daha iyi çalışması ve başarı oranının daha yüksek olması için tweetlerin temizlenmesi gerekmektedir. Tweetlerin içerisinde emojiler, noktalama işaretleri, stopwordsler, linkler gibi istenmeyen ve modelin başarısını düşürecek veriler tweetlerin içerisinden temizleniyor.
Modelimiz metin verileri üzerinde iki farklı konu çıkarma yöntemi olan LDA ve NMF'nin çıkarılması ve her iki yöntemin sonuçlarını görselleştirmek için grafikler oluşturulmasından ibaretdir.
LDA, belgelerin bir koleksiyonu içinde gizli olan temel konuları (topic) çıkarmak için kullanılan bir olasılıksal bir modeldir. Temel bir varsayım, belgelerin bir veya birden fazla konuya ait olabileceği ve her bir konunun bir olasılık dağılımı ile temsil edilebileceğidir. LDA, belge-konu ve kelime-konu olasılık dağılımlarını keşfetmeye çalışarak belgeleri bu gizli konulara ayırır. Bu model, genellikle metin belgeleri üzerinde konu çıkarma, belge sınıflandırma ve benzeri görevlerde kullanılır.
NMF, bir matrisin çarpanlarını (faktörlerini) bulmaya çalışan bir matris ayrıştırma tekniğidir. Belirli bir veri matrisini, iki veya daha fazla alt matrise çarpanları çarpanları (faktörleri) olarak ayrıştırmaya odaklanır. Bu faktörler genellikle pozitif değerlere sahiptir. Metin madenciliği bağlamında, NMF belgeleri ve kelimeleri içeren bir matrisi, temel konuların (topic) lineer kombinasyonları olarak ifade etmeye çalışır. NMF'nin kullanıldığı yerler arasında konu çıkarma, görüntü işleme ve özellik seçimi gibi alanlar bulunmaktadır.
Clean tweetlerin bulunduğu clean_tweets.csv dosyası dataframeye aktarılmıştır. Daha sonra veri seti içinde NaN değeri olan satırlar varsa bu satırlar silinir. NaN değerleri olursa modelimiz hata vermektedir.
TfidfVectorizer fonksiyonu bir metin madenciliği aracıdır ve metin verilerini TF-IDF (Term Frequency-Inverse Document Frequency) vektörlerine dönüştürmek için kullanılır.
max_df ve min_df parametreleri, vektörleştirme işlemi sırasında dikkate alınacak terimlerin belirlenmesine yardımcı olan önemli parametrelerdir:
max_df: Belirtilen bir eşik değerinden yüksek olan terimler, belgelerin yüzde kaçında görülüyorsa, dikkate alınmaz. Bu, genellikle sık kullanılan kelimelerin (stop words) veya çok spesifik kelimelerin filtrelenmesinde kullanılır.
min_df: Belirtilen bir eşik değerinden düşük olan terimler, belgelerin yüzde kaçında görülüyorsa, dikkate alınmaz.
Bu, nadir görülen terimleri filtrelemek için kullanılır.
vectorizer.fit_transform(df["clean"]) ile, clean adlı sütundaki metin verileri üzerinde TF-IDF vektörleştirmesi yapılır. Bu işlem, her bir belgeyi vektörlerle temsil eden bir matris oluşturur.
LatentDirichletAllocation bir konu modelleme tekniğidir ve belgelerin gizli konularını çıkarmak için kullanılır.
n_components=8 parametresi, modelin kaç adet konu çıkaracağını belirtir. Bu örnekte, 8 adet konu belirlenmiştir.
random_state=42 parametresi, modelin tekrarlanabilirliğini sağlamak için kullanılır. Aynı random_state değeri kullanıldığında, modelin başlangıç durumu her seferinde aynı olacaktır.
Bu yapılandırma ile LatentDirichletAllocation sınıfından bir LDA modeli oluşturulur. Bu model, veri setindeki belgelerin gizli konularını keşfetmeye çalışacaktır.
Daha sonra, bu model lda.fit(X) ile eğitilir. X önceki aşamada oluşturulan TF-IDF vektör matrisini temsil eder. Model, bu vektör matrisi üzerinde çalışarak belgelerin gizli konularını öğrenir.
Modeli görselleştirmek için plot_top_words fonksiyonunu yazıyoruz.

Sonuca bakıldığında yapılan projede seçilen modelin ne kadar önemli olduğu görülmektedir. Veri setindeki verilerin miktarı bu model için yeterli olmayabilir bu yüzden daha çok veri ile proje daha iyi hale getirilebilir. Model seçiminin önemi kadar verisetinin güzel bir şekilde hazırlanmış olması, verisetindeki noktalama işaretleri, semboller ve modele olumsuz etki edecek stopwordslerden arındırılmış olmasıdır. Bu projede başarı oranı çok yüksek değildir bunun en önemli sebebi verilerin yeterli sayıda olamamsıdır. Seçilmiş olan twitter hesaplarının türkiyede en çok etkileşim alan hesaplardan seçilmiş olması bu model için uygundur. Ancak bütün hesaplar aynı tweetleri paylaşabildiği için bu modelde farklı kategorilerin bulunduğu hesaplar seçilebilir. Örneğin bir spor paylaşımı yapan twitter hesabı, asgari ücret açıklandığında önemli bir haber olduğu varsayılarak aynı tweeti paylaşabilmektedir. Verisetinde 8500 üzerinde tweet olduğu için bu tweetlerin tek tek kontrol edilmesi mümkün değildir.



















