@INPROCEEDINGS{9302239,
author={Sönmezöz, Kaan and Uğur, Özgür and Diri, Banu},
booktitle={2020 28th Signal Processing and Communications Applications Conference (SIU)},
title={MBTI Personality Prediction With Machine Learning},
year={2020},
volume={},
number={},
pages={1-4},
doi={10.1109/SIU49456.2020.9302239}}
- Proje Tanımı
- Projenin Genel Yapısı
- Repository Hiyerarşisi
- Kullanılan Teknolojiler
- Gereksinimler
- Neden MBTI
- Oluşturulan Veriseti
- Diğer Çalışmalar
- Kamuya Açık Verisetleri
-
Crawling
- Verisetinin oluşturulduğu aşamadır.
- eksisozluk.com'dan daha önceden belirlenmiş olan kullanıcıların entryleri indirilir.
-
Elimination
- Crawling sonucunda oluşan veriseti kullanılır.
- bkz, spoiler ve # içeren entryler silinir. Bu kelimeler bir olayı olduğu gibi aktarmak için kullanılmaktadır. Herhangi bir öznel ifade içermediğinden kullanıcıların kişiliklerinin tahmin edilmesinde önemli bir rol oynamadıkları düşünülmüştür ve silinmişlerdir.
-
Pre-processing
-
Üç farklı şekilde preprocessing yapılmıştır. Python dilinde Normalizasyon ve Stemming ile alakalı yeterli destek olmadığı için Zemberek kütüphanesi kullanıldı.
-
Temelde yapılan pre-processing aşamaları
- Uppercase to lowercase
- Linklerin silinmesi
- Rakamların silinmesi
- Noktalama işaretlerinin silinmesi
- Stop words çıkarılması
-
Snowball Stemmer'ın kullanılması
- Yukarıdakilere ek olarak Python dili için geliştirilmiş olan SnowballStemmer içerisindeki TurkishStemmer kullanıldı.
- Snowball Stemmer
- Yukarıdakilere ek olarak Python dili için geliştirilmiş olan SnowballStemmer içerisindeki TurkishStemmer kullanıldı.
-
Zemberek
- Temelde yapılan işlemlere ek olarak:
- Normalizasyon
- Lemmatization
- Temelde yapılan işlemlere ek olarak:
-
-
Feature Extraction
- TF
- TF-IDF
- LDA
- Word vectors
-
Model Training
- Naive Bayes
- SVM
- RandomForest
- fastText Classification
-
Model Evaluation
- Confussion Matrix
- Accuracy
- Precision
- Recall
- F-Score
.
├── data/
| ├── eliminated_data/
| | └── eliminated_all_users_v2.zip
| ├── preprocessed_data/
| | ├── python/
| | | └── preprocessed_dataset.zip
| | └── zemberek/
| | └── preprocessed_dataset_zemberek.zip
| ├── raw_data/
| | ├── dataset_v1/
| | | └── dataset_v1_structured.zip
| | └── dataset_v2/
| | ├── all_users_v2.csv
| | ├── all_users_v2.zip
| | └── dataset_v2_structured.zip
| ├── README.md
| ├── splitted_data_660_user_from_all_headlines.xlsx
| └── stop_words_tr.txt
├── resources/ # Bu klasör altında bu proje ile alakalı makaleler ve yararlanıbilecek kaynaklar yer alır.
├── src/
| ├── crawler/
| ├── elimination/
| ├── feature-extraction/
| ├── models/
| ├── preprocessing/
| ├── count_words.py
| └── README.md
├── .gitattributes
├── .gitignore
└── README.md
- NodeJS
- Java
- Python
- npm
- Google Colab
-
Veri setini baştan kendiniz oluşturacaksanız
-
NodeJS'in bilgisayarınızda kurulu olması gerekmektedir. Bilgisayarınızda kurulu olup olmadığını anlamak için:
node --version
komutunu çalıştırın. v10.16.3 (yüklü olan sürüm versiyonu) gibi bir çıktıyla karşılaşıyorsanız NodeJS bilgisayarınızda yüklüdür.
-
NodeJS için gerekli paketlerin yönetilmesini sağlayan npm'in de kurulu olması gerekmektedir. Npm'in kurulu olup olmadığını anlamak için
npm --version
komutunu çalıştırın. 6.9.0 (kurulu olan versiyon numarası) gibi bir çıktıyla karşılaşıyorsanız npm yüklüdür. Bazı NodeJS sürümlerinde npm içerisinde gelmektedir. O yüzden npm'i direkt kurmadan önce bir kontrol etmenizde yarar var.
- Veri setini tekrardan oluşturmayacaksanız,
/data/raw_data/dataset_v2/all_users_v2.zip
veri setini kullanabilirsiniz.
-
-
Zemberek pre-processing ile ilgili adımları kendiniz tekrar etmek istiyorsanız JDK'nın bilgisayarınızda kurulu olduğundan emin olun.
-
Veri setini tekrardan kendiniz oluşturduysanız bu adımı da kendinizin tekrardan çalıştırması gerekmektedir.
-
Bu adımı tekrar etmek istemiyorsanız,
data/preprocessed_data/zemberek/preprocessed_dataset_zemberek.zip
veri setini kullanabilirsiniz. -
Zemberek ile ilgili dependency'ler pom.xml ile yönetilmektedir. Sizin tek yapmanız gereken kullanıldığınız IDE yardımıyla bu dependency'lerin indirilmesini sağlamaktır.
- Zemberek Normalizasyon ve Lemmatization aşamalarında ekstradan iki tane dosyaya ihtiyaç duymaktadır.
Onları
src/preprocessing/dependencies
alt ında bulabilirsiniz. Bu dosyaları indirdiğiniz zaman kodda da ilgili path'lerin değiştirildiğinden emin olun.
- Zemberek Normalizasyon ve Lemmatization aşamalarında ekstradan iki tane dosyaya ihtiyaç duymaktadır.
Onları
-
-
Pre-processing işlemlerinde kullanılan stop words bir dosyadan okunmaktadır. Bunun sebebi stop words'un internetten araştırmalar yapılarak genişletilmiş bir halde olmasıdır. NLTK ve Zemberek içerisindeki kelimeler dışında ekstradan kelimeler bulunmaktadır. Ayrıca
src/count_words.py
ile veri setlerinde geçen en çok 1000 kelimenin listesinin çıkarılması ve bu kelimelerin bazılarının stop words dosyasına dahil edilmesi mümkündür. -
Anaconda ortamı kullanılarak proje geliştirilmiştir. Bu sayede ihtiyaç duyulan çoğu gereksinim Anaconda tarafından çözülmüştür.
-
https://eksisozluk.com/16personalities-com--5123196?p=1 (yaklaşık 600 entry)
-
https://eksisozluk.com/sozlukculerin-kisilik-analizleri--4133116?p=6 (yaklaşık 60 entry)
-
https://eksisozluk.com/16-personalities--4966174 (yaklaşık 30 entry)
-
https://eksisozluk.com/myers-briggs-kisilik-gostergesi--797181?p=1 (yaklaşık 520 entry)
Yukarıda bulunan başlıkların altına insanlar internet üzerinden çözmüş oldukları MBTI kişilik testlerini paylaştılar. Bu verileri kullanarak paylaştıkları kendilerine ait olan kişilik özellikleri ve girmiş oldukları entry'ler toplanarak bunlarla etiketli bir veri seti elde etmiş olacağız.
Çözmüş oldukları MBTI testi sonucundan çıkan kişiliklerini belirtmiş toplam 660 kullanıcılı bir veri setimiz oluşmuş durumdadır.