--- license: apache-2.0 --- In this project, we have refined the capabilities of a pre-existing sentiment analysis model to assess the Big Five personality traits for a given text/sentence. By meticulously fine-tuning this model using a specially curated dataset tailored for personality traits, it has learned to correlate specific textual inputs with distinct personality characteristics. This targeted approach has significantly enhanced the model's precision in identifying the Big Five personality traits from text, outperforming other models that were developed or fine-tuned on more generalized datasets. The accuracy reaches 51%, and F1 score is 42%. Both are much higher than the similar personality-detection models hosted in huggingface. In other words, our model remarkably outperforms other models. Please cite: "Wang, R., and Sun, K. 2024. Personality Detection of the Characters in English Fiction" if you use this model. The following provides the code to implement the task of detecting personality from an input text. ```python #import packages from transformers import AutoModelForSequenceClassification, AutoTokenizer import torch model = AutoModelForSequenceClassification.from_pretrained("Kevintu/Personality_LM") tokenizer = AutoTokenizer.from_pretrained("KevSun/Personality_LM") # Example new text input #new_text = "I really enjoy working on complex problems and collaborating with others." # Define the path to your text file file_path = 'path/to/your/textfile.txt' # Read the content of the file with open(file_path, 'r', encoding='utf-8') as file: new_text = file.read() # Encode the text using the same tokenizer used during training encoded_input = tokenizer(new_text, return_tensors='pt', padding=True, truncation=True, max_length=64) # Move the model to the correct device (CPU in this case, or GPU if available) model.eval() # Set the model to evaluation mode # Perform the prediction with torch.no_grad(): outputs = model(**encoded_input) # Get the predictions (the output here depends on whether you are doing regression or classification) predictions = outputs.logits.squeeze() # Assuming the model is a regression model and outputs raw scores predicted_scores = predictions.numpy() # Convert to numpy array if necessary trait_names = ["Agreeableness", "Openness", "Conscientiousness", "Extraversion", "Neuroticism"] # Print the predicted personality traits scores for trait, score in zip(trait_names, predicted_scores): print(f"{trait}: {score:.4f}") ##"output": "agreeableness: 0.46; openness: 0.27; conscientiousness: 0.31; extraversion: 0.1; neuroticism: 0.84" ```