--- library_name: transformers license: apache-2.0 base_model: distilbert-base-uncased tags: - generated_from_trainer datasets: - financial_phrasebank metrics: - f1 model-index: - name: Finance_DistilBERT_sentiment results: - task: type: text-classification name: Text Classification dataset: name: financial_phrasebank type: financial_phrasebank config: sentences_75agree split: train args: sentences_75agree metrics: - type: f1 value: 0.9101001493367561 name: F1 --- # Finance_DistilBERT_sentiment This model is a fine-tuned version of [distilbert-base-uncased](https://huggingface.co/distilbert-base-uncased) on the financial_phrasebank dataset. It achieves the following results on the evaluation set: - Loss: 0.2763 - F1: 0.9101 - Acc: 0.9088 ## Model description More information needed ## Intended uses & limitations More information needed ## Training and evaluation data More information needed ## Training procedure ### Training hyperparameters The following hyperparameters were used during training: - learning_rate: 4e-06 - train_batch_size: 32 - eval_batch_size: 32 - seed: 42 - optimizer: Use adamw_torch with betas=(0.9,0.999) and epsilon=1e-08 and optimizer_args=No additional optimizer arguments - lr_scheduler_type: linear - lr_scheduler_warmup_steps: 600 - num_epochs: 12 ### Training results (Final epoch) | Training Loss | Epoch | Step | Validation Loss | F1 | Acc | |:-------------:|:-----:|:----:|:---------------:|:------:|:------:| | 0.0975 | 1.0 | 87 | 0.2763 | 0.9101 | 0.9088 | ### Framework versions - Transformers 4.46.2 - Pytorch 2.5.1 - Datasets 3.1.0 - Tokenizers 0.20.3 ```python import matplotlib.pyplot as plt import plotly.graph_objects as go from IPython.display import display, HTML import numpy as np from transformers import pipeline %matplotlib inline # Pipelines classifier = pipeline("text-classification", model="Sharpaxis/Finance_DistilBERT_sentiment", top_k=None) pipe = pipeline("text-classification", model="Sharpaxis/News_classification_distilbert") def finance_text_predictor(text): text = str(text) out = classifier(text)[0] type_news = pipe(text)[0] # Display news type and text in HTML if type_news['label'] == 'LABEL_1': display(HTML(f"""
IMPORTANT TECH/FIN News
{text}
""")) elif type_news['label'] == 'LABEL_0': display(HTML(f"""
NON IMPORTANT NEWS
{text}
""")) # Sentiment analysis scores scores = [sample['score'] for sample in out] labels = [sample['label'] for sample in out] label_map = {'LABEL_0': "Negative", 'LABEL_1': "Neutral", 'LABEL_2': "Positive"} sentiments = [label_map[label] for label in labels] print("SCORES") for i in range(len(scores)): print(f"{sentiments[i]} : {scores[i]:.4f}") print(f"Sentiment of text is {sentiments[np.argmax(scores)]}") # Bar chart for sentiment scores fig = go.Figure( data=[go.Bar(x=sentiments, y=scores, marker=dict(color=["red", "blue", "green"]), width=0.3)] ) fig.update_layout( title="Sentiment Analysis Scores", xaxis_title="Sentiments", yaxis_title="Scores", template="plotly_dark" ) fig.show()