Matlab Text Analytics Toolbox ile Duygu Analizi Deneyimi

Kardel Rüveyda ÇETİN
14 min readMay 22, 2023

--

Sinema dünyasının çeşitliliği, beni her zaman büyülemiştir. Her film, kendi benzersiz hikayesini anlatır ve izleyicilere farklı bir bakış açısı sunar. Ancak bu zenginliği ve karmaşıklığı anlamak için, çoğu zaman daha fazlasına ihtiyaç duyabiliriz. İşte bu noktada, veri biliminin sinema dünyasıyla buluştuğu yerde, MATLAB’ın Text Analytics Toolbox’ı devreye gireceği kimin aklına gelirdi ki? :)

Bu yazımda 50.000 Film İncelemesinin IMDB Veri Kümesini Text Analytics Toolbox ile nasıl analiz ettiğimi ve bu süreçte edindiğim deneyimlerimi sizlerle paylaştım. Ama tabii öncesinde biraz teknik bilgiye de yer vermeye çalıştım. Kendinizi veri bilimi ve sinema dünyasının bu benzersiz kesişiminde bir yolculuğa çıkmaya hazırlayabilirsiniz. Bu yolculuk belki biraz uzun olabilir ama unutmayın ki;

“Everything that has a beginning has an end,Neo :)“

1- Text Analytics Toolbox

Text Analytics Toolbox™, MATLAB tarafından sunulan bir araç setidir ve metin verilerinin ön işlemesi, analizi ve modellemesi için kullanılır. Bu toolbox, genellikle metin verilerini analiz etmek ve üzerinde makine öğrenimi modellemesi yapmak için kullanılır. Ana başlık olarak Ön İşleme Araçları, Veri Görselleştirme, Metin Modellemesi, Makine Modellemesi ve Makine Öğrenimi Entegrasyonu başlıkları altında daha detaylı olarak inceleyebiliriz.

· Ön İşleme Araçları: Text Analytics Toolbox, metin verilerinin ön işlemesi için bir dizi araç sağlar. Bu araçlar, belgeleri düşük büyük harfli hale getirme, noktalama işaretlerini silme, durdurma kelimelerini (ve, veya, ama gibi yaygın kelimeler) silme ve belgeleri tokenleştirme (kelimelere veya diğer anlamlı birimlere ayırma) gibi işlemler yapabilir.

· Veri Görselleştirme: Bu toolbox, metin verilerini görselleştirmek için bir dizi araç sunar. Örneğin, bir kelime bulutu oluşturabilir ve belgelerinizi veya kelimelerinizi bir histogram, bir çubuk grafik veya bir dağılım grafiği ile görselleştirebilirsiniz.

· Metin Modellemesi: Text Analytics Toolbox, metin verilerini modellemek için bir dizi teknik sağlar. Örneğin, bir kelime çantası (bag-of-words) veya bir TF-IDF (Term Frequency-Inverse Document Frequency) matrisi oluşturabilir ve bu temsilleri kullanarak metin belgelerini sınıflandırabilir veya kümeleyebilirsiniz. Ayrıca, metin belgelerini konu modelleri (örneğin, Latent Dirichlet Allocation veya LDA) ile analiz edebilir ve belgeleri veya kelimeleri vektör uzayına gömerek (örneğin, Word2Vec veya GloVe kullanarak) semantik ilişkileri analiz edebilirsiniz.

· Makine Öğrenimi Entegrasyonu: Text Analytics Toolbox, metin verilerinin sayısal bir formatta temsilini oluşturabilir, böylece bu verileri diğer MATLAB fonksiyonları ve toolbox’larıyla birlikte kullanabilirsiniz. Örneğin, oluşturduğunuz özellikler, Makine Öğrenmesi Toolbox veya Derin Öğrenme Toolbox gibi diğer toolbox’larda bir makine öğrenmesi modeli eğitmek için kullanılabilir.

Sonuç olarak, Text Analytics Toolbox, metin verilerini analiz etmek ve metin verilerinden bilgi çıkarmak için geniş bir araç seti sunar. Bu toolbox, duygu analizi, konu modelleme, metin sınıflandırma, ve daha birçok uygulama için kullanılabilir.

2- Text Analytics Toolbox Fonksiyonları

2.1-Metin Verilerinin Hazırlanması

2.1.1- Import ve Export

  • extractFileText : Bir dosyanın içerisindeki metin verilerini bir dize (string) formatında alır.
  • extractHTMLText : Bu fonksiyon koddaki HTML kodunu ayrıştırır ve metni çıkarır.
  • readPDFFormData : Bu işlem, PDF formatındaki verileri bir struct yapısına aktarır.
  • writeTextDocument : Bu işlev, metinlerin belirtilen dokümana yazılmasını sağlar.

2.1.2- HTML Parsing

  • htmlTree: Bu fonksiyon, bir HTML dosyasının veya web sayfasının ağaç yapısını oluşturur.
  • findElement :Ağaçtaki CSS selector ile eşleşen öğeleri döndürür. Bu fonksiyon bu ögeyi bulmakta yardımcı olur.
  • getAttribute :Ağacın kök düğümünün özniteliğini getirir. Bu öznitelik ayarlanmazsa işlev eksik bir değer döndürür.
  • ismissing: MATLAB’da bir tablo, zaman tablosu, dizin veya dizinin eksik değerlerini tespit etmek için kullanılır. Bu fonksiyon, eksik değerlerin olduğu yerlerde true değerleri ve eksik olmayan değerlerin olduğu yerlerde false değerleri içeren bir mantıksal dizi döndürür. MATLAB’da eksik değerler genellikle NaN (Sayısal olmayan), NaT (Zaman değil), “” (boş karakter dizileri) veya <undefined> (eksik kategorik veya dizge değerler) gibi özel değerlerle temsil edilir. ismissing fonksiyonu, bu özel değerleri tespit eder ve hangi elemanların eksik olduğunu belirler.
  • string : string(str32), UTF-32 temsili str32'yi string’e dönüştürür.

2.1.3- Document Preprocessing (Belge Ön İşleme)

  • tokenizedDocument :Dizinin öğelerini simgeleştirerek belirtilmiş bir belge dizisi döndürür.
  • erasePunctuation : Noktalama işaretlerini ve sembolleri string’in öğelerinden siler. Unicode noktalama işaretleri veya sembol sınıflarına ait karakterleri kaldırır.
  • eraseTags : HTML ve XML yorumlarını ve etiketlerini string öğelerinden siler.
  • eraseURLs : HTTP ve HTTPS URL’lerini string öğelerinden siler.
  • removeStopWords : “a”, “and”, “to” ve “the” gibi sözcükler (durdurma sözcükleri olarak bilinir) verilere gürültü ekleyebilir. Bu kelimeleri kaldırır.
  • removeShortWords : Verilen index değerine göre veya daha kısa sözcükleri belgelerden kaldırır.
  • removeLongWords : Verilen index değerine göre veya daha uzun sözcükleri belgelerden kaldırır.
  • removeWords : Belirtilmiş sözcükleri dokümanlardan kaldırır. İşlev varsayılan olarak büyük/küçük harfe duyarlıdır.
  • normalizeWords: Bu fonksiyon, belgelerdeki kelimeleri normalleştirir yani belirli bir standarda dönüştürür.
  • replaceWords: Bu fonksiyon, belgelerde belirli kelimeleri başka kelimelerle değiştirmenizi sağlar.
  • replaceNgrams: Bu fonksiyon, belgelerde belirli kelime gruplarını (n-gramlar) başka kelime gruplarıyla değiştirmenizi sağlar.
  • stopWords: Bu fonksiyon, genellikle metin analizi sırasında dikkate alınmayan, yani “durma kelimesi” (stop word) olarak tanımlanan belirli İngilizce kelimelerin bir listesini döndürür. Durma kelimeleri genellikle çok sık kullanılan ve genellikle tek başına çok az bilgi içeren kelimelerdir. İngilizce’de “the”, “is”, “at”, “which” ve “on” gibi kelimeler durma kelimesi olarak kabul edilir.
  • decodeHTMLEntities: String öğelerindeki HTML ve XML karakter varlıklarını ve sayısal karakter referanslarını Unicode eşdeğerleriyle değiştirir.
  • lower: Belgelerdeki her bir büyük karakteri karşılık gelen küçük harfe dönüştürür ve diğer tüm karakterleri değiştirmeden bırakır
  • upper: Belgelerdeki her bir küçük karakteri karşılık gelen büyük harfe dönüştürür ve diğer tüm karakterleri değiştirmeden bırakır.

2.1.4- Token Details (Token Detayları)

  • context:- Parametre olarak verilen tek bir sözcüğün geçtiği yeri arar ve sözcüğü context içinde ve konumlarını gösteren bir tablo döndürür. İşlev varsayılan olarak büyük/küçük harfe duyarlıdır.
  • tokenDetails: tokenizedDocument dizisi belgelerindeki token’lar için bir token ayrıntıları tablosu döndürür.
  • addSentenceDetails: Belgelerdeki cümle sınırlarını algılar ve token ayrıntılarını günceller.
  • addPartOfSpeechDetails: Belgelerdeki konuşma bölümlerini algılar ve token ayrıntılarını günceller. İşlev, varsayılan olarak, konuşma bölümü etiketlemesi için metni yeniden tokenlaştırır. Örneğin, işlev “you’re” kelimesini “you” ve “‘are” kelimelerine böler.
  • addLemmaDetails: Lemma ayrıntılarını belgelere ekler ve token ayrıntılarını günceller
  • addLangaugeDetails: Belgelerin dilini algılar ve token ayrıntılarını günceller. İşlev, yalnızca dil ayrıntıları eksik olan belirteçlere ayrıntılar ekler.
  • addEntityDetails: Varlıklara etiket eklemek için kullanılır. Metindeki kişi adlarını, konumları, kuruluşları ve diğer adlandırılmış varlıkları algılamak için kullanılır. Bu işlem, adlandırılmış varlık tanıma olarak bilinir.
  • addDependencyDetails: Belgelere gramer bağımlılığı ayrıntıları ekler ve belirteç ayrıntılarını günceller.
  • addTypeDetails: Belgelerdeki token türlerini algılar ve token ayrıntılarını günceller. İşlev, yalnızca türü bilinmeyen tokenlara tür ayrıntıları ekler.
  • splitSentences: splitSentences(document), tek bir tokenizedDocument nesnesini bir tokenizedDocument cümle dizisine böler. Bir nevi cümleyi bölme işlemini sağlar.
  • corpusLanguage: Parametre olarak gönderilen string içindeki metnin dilini algılar.
  • abbrevations: “sk.”, “Dr.” ve “vb.” gibi nokta içeren kısaltmalar cümle algılamayı etkiler.

2.1.5- Word and N-Gram Counting ( Kelime ve N-Gram Sayma )

  • bagOfWords: (terim-sıklık sayacı olarak da bilinir), bir koleksiyonun her belgesinde sözcüklerin kaç kez göründüğünü kaydeder. bagOfWords metni kelimelere ayırmaz.
  • bagOfNgrams: Bir koleksiyonun her belgesinde her n-gramın kaç kez göründüğünü kaydeder. Bir n-gram, birbirini izleyen n kelimeden oluşan bir koleksiyondur. bagOfNgrams metni kelimelere ayırmaz.
  • addDocument: Parametre olarak gönderilen dokümanı bagOfWords’e ekler.
  • removeDocument: Parametre olarak gönderilen idx tarafından belirtilen indekslere sahip belgeleri bag-of-words’den kaldırır.
  • removeInfrequentWords: Bu fonksiyon, belgelerde belirli bir sayıdan az geçen kelimeleri siler. Bu sayede, metin analizi ve modelleme sırasında gürültüyü azaltabilir ve daha az karmaşık bir kelime özellik matrisi oluşturabilirsiniz.
  • removeInfrequentNgrams: Bu fonksiyon, belirli bir eşik değerinden daha az kez görünen N-gramları belgelerden siler. Bir N-gram, bir dizi içindeki N ardışık öğenin bir gruplamasıdır. Metin analizinde, genellikle N ardışık kelimeye atıfta bulunur.
  • removeNgrams: Bu fonksiyon, belgelerden belirli bir N-gramı (N ardışık kelime) siler. Metin analizinde, bir N-gram, bir dizi içindeki N ardışık öğenin bir gruplamasıdır. Örneğin, bir 2-gram iki ardışık kelimeyi, bir 3-gram üç ardışık kelimeyi temsil eder.Bu fonksiyon, bir belge dizisi veya belge matrisi ve bir N-gram alır. Bu fonksiyon, belirtilen N-gramı belgelerden siler ve bu N-gram’ın silindiği yeni bir belge dizisi veya belge matrisi döndürür.
  • removeEmptyDocuments: Kelimesi olmayan belgeleri documents’ten kaldırır.
  • topkwords: Toolbox’ında bulunan bir fonksiyon olup, belgelerdeki en sık görünen K kelimeyi döndürür. Bu fonksiyon genellikle, belgelerdeki en yaygın kelimeleri belirlemek için kullanılır. Bu, örneğin belgelerin genel konusunu anlamak veya belgelerdeki öne çıkan temaları belirlemek için kullanılabilir.Bu fonksiyon, bir belge dizisi veya belge matrisi ve bir K değeri alır. K değeri, döndürülecek kelime sayısını belirtir. Bu fonksiyon, belgelerde en sık görünen K kelimeyi ve bu kelimelerin belgelerdeki sayısını bir tablo şeklinde döndürür.
  • topkngrams: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, belgelerdeki en sık görünen K N-gramı döndürür.Bir N-gram, bir dizi içindeki N ardışık öğenin bir gruplamasıdır. Metin analizinde, genellikle N ardışık kelimeye atıfta bulunur. Bu fonksiyon, bir belge dizisi veya belge matrisi, N-gram boyutu ve bir K değeri alır. N-gram boyutu, N-gramın kaç kelime içereceğini belirtir. K değeri, döndürülecek N-gram sayısını belirtir. Bu fonksiyon, belgelerde en sık görünen K N-gramı ve bu N-gramların belgelerdeki sayısını bir tablo şeklinde döndürür.
  • encode: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, belgeleri belge terim matrisine veya belge kestirme matrisine dönüştürür.Belge terim matrisi, belgeler ve belgelerdeki terimler (kelimeler) arasındaki ilişkiyi gösterir. Satırlar belgeleri, sütunlar terimleri temsil eder. Her hücre, o belgedeki terimin frekansını belirtir.Belge kestirme matrisi, belgeler ve belgelerdeki kestirmeler (N-gramlar) arasındaki ilişkiyi gösterir. Satırlar belgeleri, sütunlar kestirmeleri temsil eder. Her hücre, o belgedeki kestirmenin frekansını belirtir. Bu fonksiyon, bir belge dizisi veya belge matrisi alır ve belge terim matrisini veya belge kestirme matrisini döndürür.
  • tfidf: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, belge terim matrisinden TF-IDF ağırlıklarını hesaplar. TF-IDF (Terim Frekansı — Ters Belge Frekansı), belgelerdeki kelimelerin önemini belirlemek için kullanılan bir tekniktir. Bir kelimenin TF-IDF ağırlığı, belgenin uzunluğuna ve belgedeki kelime sayısına (terim frekansı) ve tüm belgelerdeki belge sayısına ve kelimenin belirdiği belge sayısına (ters belge frekansı) bağlıdır.
  • join: Bu fonksiyon, MATLAB’da bir dizi işlevinden biridir ve genellikle metin dizileri, hücre dizileri veya karakter dizileri üzerinde kullanılır. Bu işlev, belirtilen bir ayırıcı kullanarak dizi öğelerini birleştirir.

2.1.6- Spelling Correction and Edit Distance (Yazım Düzeltme ve Düzenleme Mesafesi)

  • correctSpelling: tokenizedDocument dizisi belgelerindeki sözcüklerin yazımını düzeltir.
  • editDistance: editDistance(str1,str2), str1'i str2'ye dönüştürmek için gereken en düşük sayıda grafem (insan tarafından algılanan karakterler için Unicode terim) ekleme, silme ve değiştirme işlemlerini döndürür.
  • editDistanceSearcher: Bir mesafe arama aracı oluşturur ve Vocabulary ile MaximumDistance özelliklerini ayarlar
  • knnsearch: Kelimelerdeki her bir öğeye olan uzaklık arayıcı düzenlemesindeki en yakın komşuların indekslerini bulur.

2.1.7- Document Manipulation and Conversion (Belge Manipülasyonu ve Dönüştürme)

  • docfun: docfun(func,documents), işlev tanıtıcısı tarafından belirtilen işlevi çağırır func ve documents öğelerini sözcüklerin dize vektörü olarak iletir.
  • containsWords: Parametre olarak alınan herhangi bir documents tokenının words eşleştiği yerde 1; aksi halde 0 döndürür.
  • containsNgrams: Parametre olarak alınan herhangi bir n-gram documents’in ngrams ile eşleştiği yerde 1 döndürür; aksi halde 0 döndürür.
  • contains: Parametre olarak alınan herhangi bir documents tokenının pat parametresi içermesi durumunda 1 döndürür; aksi halde 0 döndürür.
  • doclength: Parametre olarak alınan herhangi bir documents’teki her bir belgedeki belirteç sayısını döndürür.
  • doc2cell: tokenizedDocument dizisini hücre dizisine dönüştürür
  • joinWords: Parametre olarak alınan her document’teki sözcükleri bir boşlukla birleştirerek tokenizedDocument dizisini bir dize dizisine dönüştürür.

2.1.8- Unicode

  • textanalytics.unicode.nfc: MATLAB’ın Text Analytics Toolbox’ında bir fonksiyon olup, Unicode metnini NFC (Normalization Form Canonical Composition) formuna dönüştürür. Unicode metni, çeşitli dillerdeki karakterleri temsil etmek için kullanılan bir standarttır. Ancak, bazı karakterler birden fazla şekilde ifade edilebilir. Örneğin, bir harf ve onun üzerine bir aksan işareti ayrı ayrı veya birleşik bir karakter olarak temsil edilebilir. Bu, metin işleme ve analizi sırasında sorunlara yol açabilir.NFC normalizasyonu, bu sorunu çözer. Birleşik karakterleri tek bir karakter olarak ifade eder. Bu, metin analizi sırasında tutarlılık sağlar ve hataları önler.
  • textanalytics.unicode.nfd: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, Unicode metnini NFD (Normalization Form Canonical Decomposition) formuna dönüştürür. NFD normalizasyonu, birleşik karakterleri ayrık bileşenlerine ayırır. Örneğin, birleşik bir karakter olan ‘ö’ (o ve üstündeki iki nokta), ‘o’ ve üstündeki iki nokta olarak iki ayrı karaktere ayrılır. textanalytics.unicode.nfd fonksiyonu bir metin dizesi alır ve NFD formunda aynı metin dizesini döndürür.
  • textanalytics.unicode.nfkc: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, Unicode metnini NFKC (Normalization Form KC: Compatibility Composition) formuna dönüştürür. NFKC normalizasyonu, Unicode metnini uyumluluk bileşimine dönüştürür. Bu, belirli kod noktalarını uyumlu eşdeğerlerine dönüştürerek metni daha tutarlı ve işlemesi daha kolay hale getirir. textanalytics.unicode.nfkc fonksiyonu bir metin dizesi alır ve NFKC formunda aynı metin dizesini döndürür.
  • textanalytics.unicode.nfkd: MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, Unicode metnini NFKD (Normalization Form KD: Compatibility Decomposition) formuna dönüştürür. NFKD normalizasyonu, Unicode metnini uyumluluk çözümlemesine dönüştürür. Bu, belirli kod noktalarını uyumlu eşdeğerlerine ayırarak metni daha tutarlı ve işlemesi daha kolay hale getirir. textanalytics.unicode.nfkd fonksiyonu bir metin dizesi alır ve NFKD formunda aynı metin dizesini döndürür.
  • textanalytics.unicode.UTF32: MATLAB’ın Text Analytics Toolbox’ında bulunan bir işlev olup, bir metin dizesini UTF-32 kod noktalarına dönüştürür. UTF-32, her Unicode karakterini tam olarak 32 bit ile temsil eden bir karakter kodlama biçimidir. Bu, her karakterin aynı boyutta olduğu anlamına gelir, bu da belirli bir karaktere erişimi kolaylaştırır, ancak daha fazla bellek gerektirir. textanalytics.unicode.UTF32 fonksiyonu bir metin dizesi alır ve UTF-32 kod noktalarının bir dizisini döndürür.
  • characterCategories: Bu fonksiyon, MATLAB’ın Text Analytics Toolbox’ında bulunan bir fonksiyon olup, bir metin dizesindeki her karakterin Unicode karakter kategorisini döndürür. Unicode karakter kategorisi, bir karakterin genel tipini tanımlar. Örneğin, ‘A’ karakteri bir harf, ‘1’ bir rakam ve ‘.’ bir noktalama işareti olabilir.characterCategories fonksiyonu bir metin dizesi alır ve her karakterin Unicode karakter kategorisini bir dizi olarak döndürür.

2.2- Modelleme ve Tahmin

2.2.1- Sentiment Analysis (Duygu Analizi)

  • ratioSentimentScores : ratioSentimentScores(documents), pozitif ve negatif belirteçlerin oranına dayalı olarak belirteçleştirilmiş belgeler için yaklaşım puanları döndürür.
  • vaderSentimentScores : vaderSentimentScores(documents), simgeleştirilmiş documents için yaklaşım puanları döndürür. İşlev, algoritma kurallarına göre ayarlanmış ve ardından -1 ile 1 arasında normalleştirilmiş bireysel token puanlarını toplayarak bileşik puanları hesaplar.

2.2.2- Document Summarization and Similarity

  • bleuEvaluationScore : bleuEvaluationScore(candidate,references), belirtilen aday belge ile referans belgeler arasındaki BLEU benzerlik puanını döndürür.
  • cosineSimilarity : cosineSimilarity(documents), sözcük sayımlarından türetilen tf-idf matrisini kullanarak belirtilen belgeler için ikili kosinüs benzerliklerini döndürür.
  • rougeEvaluationScore : rougeEvaluationScore(candidate,references), belirtilen candidate belge ile referans belgeler arasındaki ROUGE puanını döndürür.

2.2.3 Topic Modelling and Dimension Reduction

  • ldaModel : Gizli bir Dirichlet tahsisi (LDA) modeli, bir belge koleksiyonundaki temel konuları keşfeden ve konulardaki sözcük olasılıklarını çıkaran bir konu modelidir.
  • lsaModel : Bir gizli semantik analiz (LSA) modeli, belgeler ile içerdikleri sözcükler arasındaki ilişkileri keşfeder.

2.2.4 Word Embeddings and Encodings

  • readWordEmbedding : readWordEmbedding(filename), metin dosyasında veya zip dosyası dosya adında saklanan önceden eğitilmiş kelime katıştırmayı okur.
  • wordEncoding : wordEncoding(documents), belgelerdeki sözcüklerden bir sözcük kodlaması oluşturur.

2.3 Display and Presentation( Ekran ve Sunum)

  • wordcloud : wordcloud(str), str’deki metni simgeleştirerek ve önceden işleyerek ve ardından sözcükleri, sözcük sıklık sayımlarına karşılık gelen boyutlarda görüntüleyerek bir sözcük bulutu grafiği oluşturur. Bu sözdizimi İngilizce, Japonca, Almanca ve Korece metinleri destekler.
  • textscatter : textscatter(x,y,str), x ve y vektörleri tarafından belirtilen konumlarda str öğeleriyle bir metin dağılım grafiği oluşturur ve elde edilen TextScatter nesnesini döndürür.
  • textscatter3 : textscatter3(x,y,z,str), x, y ve z vektörleri tarafından belirtilen konumlarda str öğeleriyle bir 3D metin dağılım grafiği oluşturur
  • sentenceChart : sentenceChart (sentence) cümlenin bağımlılık tablosunu çizer.
  • workCloudCounts: Genellikle bir kelime bulutu oluşturmak için kullanılır. Bir kelime bulutu, belgelerdeki kelimeleri görselleştirir, en sık kullanılan kelimeler genellikle daha büyük ve/veya daha koyu renkte görünür. wordCloudCounts fonksiyonu, bir belge dizisi veya belge matrisi alır ve belgelerdeki kelimelerin sayısını içeren bir tablo döndürür.

3 UYGULAMA

Text Analytics Toolbox ile gerçekleştirilebilecek etkileyici uygulamalardan biri Duygu Analizi’dir. Bu projeyi hayata geçirmek için Kaggle’dan seçilen, duygu analizi üzerine odaklanmış 50000’e aşkın IMDb film incelemelerinden oluşan bir dataset kullanılmıştır.

Veri setinde 2 alan bulunmaktadır;

1-) Review

2-) Sentiment

İlk olarak Text Analytics Toolbox içerisinde yer alan fonksiyonları kullanabilir halde olabilmek için bu aracı Matlab üzerinden yüklememiz gerekmektedir. Apps başlığı altından Get More Apps alanına tıkladığınızda arama alanına “Text Analytics Toolbox” yazarak bu aracı indirebilirsiniz.

Şekil 1 Get More Apps
Şekil 2 Text Analytics Toolbox

Toolbox yüklendikten sonra imdbSentimentAnalysis.m uzantılı bir matlab dosyası oluşturulur. Bu matlab dosyası üzerinde yapmak istediğimiz duygu analizi çalışmalarını gerçekleştireceğiz. Öncelikli olarak “Kaggle” üzerinden aldığımız IMDb film incelemelerini içeren .csv uzantılı datayı okumak için readTable fonksiyonundan yararlanıldı. İçeri aktarılan verilerin string tipinde aktarılması daha sonraki işlemler için önemli bir durumdur. O nedenle TextType olarak string olduğu özellikle belirtilmiştir.

Şekil 3 imdbSentimentAnalysis.m Excel Okuma

Bu kısımda “disp” fonksiyonu excel içerisindeki datayı Command Window’da göstermeyi sağlamaktadır. Ancak sorgu çalıştıktan sonra da bu datayı aşağıdaki alandan görebilirsiniz.

Şekil 4 Excel üzerindeki datayı görme 1
Şekil 5 Excel üzerindeki datayı görme 2

Bu uygulama bazında duygu analizi sadece film incelemelerinden gerçekleştirileceği için exceldeki “review“ alanından faydalanılmıştır.

Şekil 6 Data içerisinde seçilen kolon

Data’daki yorum bölümü alındığında, her cümleyi bir kelime koleksiyonuna dönüştürmek için tokenizedDocument işlevi uygulanır. Bu koleksiyon, tüm kelimeleri, emojileri ve noktalama işaretlerini içerir. Daha sonra, metin analizi yapmak üzere bu kelime koleksiyonları yani token dizileri kullanılır.

Şekil 7 tokenizedDocument Fonksiyonu Kullanımı
Şekil 8 tokenizedDocument Çıktı

Sonrasında ‘addPartOfSpeechDetails’ işlevi devreye girer. Bu işlev, cümlenin içindeki konuşma bölümlerini tanır ve bunları etiketler. Mesela “don’t” kelimesini “do” ve “not” olmak üzere ikiye ayırıp cümleyi de tekrar tokenlara ayırır.

Şekil 9 addPartOfSpeechDetails Kullanımı
Şekil 10 addPartOfSpeechDetails çıktı

‘erasePunctuation’ işlevi, incelemeleri içeren metinlerdeki tüm noktalama işaretlerini siler. Bu işlemin amacı, noktalama işaretlerinin duygusal anlamın algılanmasında önemli olmamasıdır. Bu unsurların çıkarılması, analiz sürecini daha hızlı hale getirecektir.

Şekil 11 erasePunctuation Kullanımı
Şekil 12 erasePunctuation Çıktı

“removeStopWords” fonksiyonu, metinden ‘stop words’ olarak bilinen ve tek başına çok fazla anlam taşımayan kelimeleri, örneğin “a”, “and”, “to” gibi bağlaçları kaldırır ve metni yeniden tokenlara ayırır.

Şekil 13 removeStopWords Kullanımı
Şekil 14 removeStopWords Çıktı

“removeShortWords” fonksiyonu, belirtilen indekse eşit veya daha az sayıda harf içeren kelimeleri metinden çıkartır. Bu işlem, genellikle çok kısa kelimelerin çoğunlukla önemli bir anlam taşımayacağı varsayımıyla, metin analizi sırasında gereksiz gürültüyü azaltmak için yapılır. Aşağıdaki örnekte index 2 olarak alınmıştır.

Şekil 15 removeShortWords Kullanımı
Şekil 16 removeShortWords Çıktı

‘removeLongWords’ işlevi kullanılarak, belirli bir indeksten daha fazla harfe sahip kelimeler cümleden atılır. Bu adımın amacı, çok uzun kelimelerin yaratabileceği gürültüyü azaltmak ve daha hassas bir metin analizi gerçekleştirmektir.

Şekil 17 removeLongWords Kullanımı
Şekil 18 removeLongWords Çıktı

‘removeEmptyDocuments’ işlevi, herhangi bir kelime içermeyen cümlelerin veri setinden kaldırılmasını sağlar. Bu, veri setinde gereksiz cümle yoğunluğunun önüne geçer.

Şekil 19 removeEmptyDocuments Kullanımı
Şekil 20 removeEmptyDocuments Çıktı

“addLemmaDetails’ işlevi sayesinde, kelimelerin çekimli ve diğer varyantları kelimelerin kök formuna indirgenir. Bu yöntemle, kelimelerin daha basit halleri elde edilir.Yukarıdaki outputa hemen hemen benzer ama kelimeleri kök formatına indirgemiş hali karşımıza çıkar.

Şekil 21 addLemmaDetails Kullanımı

‘vaderSentimentScores’ işlevi, tokenize edilmiş cümleler için bir duygu puanı hesaplar. Bu fonksiyon -1 ile 1 arasında değerler üretir; pozitif ifadeler, yoğunluklarına bağlı olarak 1'e, negatif ifadeler ise yoğunluklarına göre -1'e yakın değerler alır. Duygu ifade etmeyen cümleler 0 değerini alır.

Şekil 22 vaderSentimentScores Kullanımı
Şekil 23 vaderSentimentScores Çıktı

compoundScores, -1 ile +1 arasında değerler sağlamıştı. Bu aşamada, 0 ile 1 arasındaki değerlerin pozitif olduğu bilindiği için, bu değerler strPositive adında bir değişkende saklanır.Aynı değerler negatif ve nötr işlemler için strNegative ve strNeutral değişkenlerinde saklanır.

Şekil 24 strPositive Değişkeninin Tanımlanması

Son olarak bu karşılıkların figürlerini çizdirebilmek için 3 tane Word Cloud eklenmiştir. Başlıklar, hangi kelimelerin hangi Word Cloud’a ait olduğu göstermek için kullanılmıştır. Bunun sonucunda elde edilen figure ve kod aşağıdaki gibidir.

Şekil 25 Pozitif,Negatif, Nötr değerler için wordcloud oluşturma kodları

Text Analytics Toolbox kullanılarak kelimeler doğru duygu alanına yerleştirilmeye çalıştırılmıştır.

Şekil 26 Pozitif,Negatif, Nötr değerler için Wordcloud gösterimi

Projenin Kodları

https://github.com/KardelRuveyda/imdb-reviews-sentiment-analysis

Repository Detayı

  • .m uzantılı matlab dosyası
  • Datanın bulunduğu csv dosyası
  • İlgili Figure’un kaydedildiği figüre dosyası

Bu yolculukta, MATLAB’ın Text Analytics Toolbox’ıyla IMDb film incelemeleri verilerini nasıl analiz ettiğimizi ve bu sürecin bize neler öğrettiğini gördük ve bu Toolbox’ı yakından incelemiş olduk. Bu deneyim, umarım film dünyasının karmaşık duygusal dokusunu çözümleme yeteneğimizi geliştirmiştir ve veri biliminin sinemanın anlaşılmasına nasıl katkıda bulunabileceğini göstermiştir.

Teknoloji ve sanatın bu benzersiz uyumunda, duyguların kodlarıyla bir sonraki deneyiminizde buluşmak dileğiyle…

--

--

Kardel Rüveyda ÇETİN
Kardel Rüveyda ÇETİN

Written by Kardel Rüveyda ÇETİN

Software Development Lead @DogusTeknoloji | Microsoft MVP | Mathematical Engineer | Speaker | Blogger | Founder&Organizer @thecoderverse

No responses yet