Text Classification
Transformers
Joblib
Safetensors
bert
sentiment-analysis
finance
macroeconomics
climate
esg
policy
ensemble
dictionary
finbert
Eval Results (legacy)
text-embeddings-inference
Instructions to use peyterho/macro-sentiment-finbert with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use peyterho/macro-sentiment-finbert with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="peyterho/macro-sentiment-finbert")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("peyterho/macro-sentiment-finbert") model = AutoModelForSequenceClassification.from_pretrained("peyterho/macro-sentiment-finbert") - Notebooks
- Google Colab
- Kaggle
| """ | |
| Data preparation: combine 5 HF datasets into unified train/test splits. | |
| Labels: 0=negative, 1=neutral, 2=positive | |
| """ | |
| import numpy as np | |
| from datasets import load_dataset, Dataset, DatasetDict, concatenate_datasets, Features, Value | |
| def load_financial_phrasebank(): | |
| ds = load_dataset("nickmuchi/financial-classification") | |
| label_map = {0: 0, 1: 1, 2: 2} # already negative/neutral/positive | |
| def process(ex): | |
| return {"text": ex["text"], "label": label_map[ex["labels"]]} | |
| train = ds["train"].map(process, remove_columns=ds["train"].column_names) | |
| test = ds["test"].map(process, remove_columns=ds["test"].column_names) | |
| return train, test | |
| def load_twitter_financial(): | |
| ds = load_dataset("zeroshot/twitter-financial-news-sentiment") | |
| label_map = {0: 0, 1: 2, 2: 1} # 0=Bear→neg, 1=Bull→pos, 2=Neutral→neutral | |
| def process(ex): | |
| return {"text": ex["text"], "label": label_map[ex["label"]]} | |
| train = ds["train"].map(process, remove_columns=ds["train"].column_names) | |
| test = ds["validation"].map(process, remove_columns=ds["validation"].column_names) | |
| return train, test | |
| def load_auditor_sentiment(): | |
| ds = load_dataset("FinanceInc/auditor_sentiment") | |
| label_map = {0: 0, 1: 1, 2: 2} | |
| def process(ex): | |
| return {"text": ex["sentence"], "label": label_map[ex["label"]]} | |
| train = ds["train"].map(process, remove_columns=ds["train"].column_names) | |
| test = ds["test"].map(process, remove_columns=ds["test"].column_names) | |
| return train, test | |
| def load_fiqa(): | |
| ds = load_dataset("pauri32/fiqa-2018") | |
| def to_label(score): | |
| if score < -0.15: return 0 | |
| elif score > 0.15: return 2 | |
| else: return 1 | |
| def process(ex): | |
| return {"text": ex["sentence"], "label": to_label(ex["sentiment_score"])} | |
| train = ds["train"].map(process, remove_columns=ds["train"].column_names) | |
| val = ds["validation"].map(process, remove_columns=ds["validation"].column_names) | |
| test = ds["test"].map(process, remove_columns=ds["test"].column_names) | |
| train = concatenate_datasets([train, val]) | |
| return train, test | |
| def load_climate_sentiment(): | |
| ds = load_dataset("climatebert/climate_sentiment") | |
| # ClassLabel: 0=risk→neg, 1=neutral, 2=opportunity→pos | |
| def process(ex): | |
| return {"text": ex["text"], "label": int(ex["label"])} | |
| train = ds["train"].map(process, remove_columns=ds["train"].column_names) | |
| test = ds["test"].map(process, remove_columns=ds["test"].column_names) | |
| return train, test | |
| def load_combined_dataset(): | |
| """Load and combine all 5 datasets.""" | |
| loaders = [ | |
| ("financial_phrasebank", load_financial_phrasebank), | |
| ("twitter_financial", load_twitter_financial), | |
| ("auditor_sentiment", load_auditor_sentiment), | |
| ("fiqa", load_fiqa), | |
| ("climate_sentiment", load_climate_sentiment), | |
| ] | |
| all_train, all_test = [], [] | |
| feat = Features({"text": Value("string"), "label": Value("int64")}) | |
| for name, loader in loaders: | |
| print(f"Loading {name}...") | |
| train, test = loader() | |
| # Cast to uniform schema | |
| train = train.cast(feat) | |
| test = test.cast(feat) | |
| print(f" {name}: {len(train)} train, {len(test)} test") | |
| all_train.append(train) | |
| all_test.append(test) | |
| combined_train = concatenate_datasets(all_train) | |
| combined_test = concatenate_datasets(all_test) | |
| # Shuffle | |
| combined_train = combined_train.shuffle(seed=42) | |
| combined_test = combined_test.shuffle(seed=42) | |
| print(f"\nCombined: {len(combined_train)} train, {len(combined_test)} test") | |
| # Label distribution | |
| from collections import Counter | |
| train_dist = Counter(combined_train["label"]) | |
| print(f"Train distribution: {dict(train_dist)}") | |
| return DatasetDict({"train": combined_train, "test": combined_test}) | |
| if __name__ == "__main__": | |
| ds = load_combined_dataset() | |
| print(ds) | |