This repository contains experiments for fine-tuning language models to predict personality traits from text, along with explainability analysis to understand model decisions.
This code repository accompanies our paper:
Title: Text speaks louder: Insights into Personality from Natural Language Processing
Authors: Saeteros, D., Gallardo-Pujol, D., & Ortiz-Martínez, D.
Journal: PLOS ONE
Status: In press
Year: 2025
If you use this code or the findings from our research, please cite our paper:
@article{Saeteros2025,
title={Text speaks louder: Insights into Personality from Natural Language Processing},
author={Saeteros, D. and Gallardo-Pujol, D. and Ortiz-Martínez, D.},
journal={PLOS ONE},
year={2025},
note={In press}
}The repository is organized as follows:
├── explainability/
│ ├── big_five/
│ │ ├── explainable_ai_expers_essays_agr.ipynb
│ │ ├── explainable_ai_expers_essays_con.ipynb
│ │ ├── explainable_ai_expers_essays_ext.ipynb
│ │ ├── explainable_ai_expers_essays_neu.ipynb
│ │ ├── explainable_ai_expers_essays_opn.ipynb
│ │ └── utils.py
│ └── mbti/
│ ├── masked/
│ │ ├── explainable_ai_expers_masked_mbti_ft_bert.ipynb
│ │ ├── explainable_ai_expers_masked_mbti_ie_bert.ipynb
│ │ ├── explainable_ai_expers_masked_mbti_jp_bert.ipynb
│ │ ├── explainable_ai_expers_masked_mbti_ns_bert.ipynb
│ │ └── utils.py
│ └── unmasked/
│ ├── explainable_ai_expers_mbti_ft_bert.ipynb
│ ├── explainable_ai_expers_mbti_ie_bert.ipynb
│ ├── explainable_ai_expers_mbti_jp_bert.ipynb
│ ├── explainable_ai_expers_mbti_ns_bert.ipynb
│ └── utils.py
├── fine_tuning/
│ ├── fine_tuning_expers_essays.ipynb
│ └── fine_tuning_expers_mbti.ipynb
Two main datasets are used in this project:
- Essays dataset (Big 5 personality traits: Extraversion, Neuroticism, Agreeableness, Conscientiousness, Openness)
- MBTI dataset (Myers-Briggs Type Indicator dimensions: I/E, N/S, F/T, J/P)
YOU CAN GET THEM UPON REQUEST TO THE AUTHORS
Install the required packages:
pip install torch transformers transformers-interpret memory_profiler datasets accelerate nltk tweet-preprocessor pandas matplotlib seaborn wordcloudThe data is already preprocessed and available (you can get them upon request):
- Essays dataset:
df_essays_fragm_train.csv,df_essays_fragm_valid.csv, anddf_essays_fragm_test.csv - MBTI dataset:
df_mbti_fragm_train.csv,df_mbti_fragm_valid.csv, anddf_mbti_fragm_test.csv
The fine_tuning/ directory contains scripts for fine-tuning BERT and RoBERTa models on both datasets:
fine_tuning_expers_essays.ipynb: Fine-tunes models on the Big Five personality traitsfine_tuning_expers_mbti.ipynb: Fine-tunes models on the MBTI dimensions with options for masking MBTI-related terms
Fine-tuned models are saved to the ./fine_tuning_models/ directory.
The explainability/ directory contains notebooks for analyzing and visualizing what influences model predictions:
Separate notebooks for each of the Big Five traits:
explainable_ai_expers_essays_agr.ipynb: Agreeablenessexplainable_ai_expers_essays_con.ipynb: Conscientiousnessexplainable_ai_expers_essays_ext.ipynb: Extraversionexplainable_ai_expers_essays_neu.ipynb: Neuroticismexplainable_ai_expers_essays_opn.ipynb: Openness
For MBTI, both masked and unmasked versions are provided:
explainable_ai_expers_mbti_ie_bert.ipynb: Introversion/Extraversionexplainable_ai_expers_mbti_ns_bert.ipynb: Intuition/Sensingexplainable_ai_expers_mbti_ft_bert.ipynb: Feeling/Thinkingexplainable_ai_expers_mbti_jp_bert.ipynb: Judging/Perceiving
explainable_ai_expers_masked_mbti_ie_bert.ipynb: Introversion/Extraversionexplainable_ai_expers_masked_mbti_ns_bert.ipynb: Intuition/Sensingexplainable_ai_expers_masked_mbti_ft_bert.ipynb: Feeling/Thinkingexplainable_ai_expers_masked_mbti_jp_bert.ipynb: Judging/Perceiving
- Data preprocessing and fragmentation
- Text tokenization and model fine-tuning
- ROC AUC and accuracy evaluation metrics
- Support for both BERT and RoBERTa models
- Attribution analysis using
transformers-interpret - Word-level attribution visualization
- Word clouds and bar plots for influential words
- Comparison between correct and incorrect predictions
- Attribution summaries using multiple aggregation techniques
The utils.py files provide common functions for:
- Creating datasets and dataloaders
- Computing evaluation metrics
- Text preprocessing and tokenization
- Attribution filtering and visualization
- Word frequency analysis
The explainability notebooks generate:
- Word clouds showing the most influential words for each class
- Bar plots ranking words by attribution scores
- Histograms of attribution scores
- HTML visualizations of attributions in specific texts
- Pickle files containing attribution data for further analysis