CoolFace
Datasetpublic

ma2za/many_emotions

Many Emotions Many Emotions is a 2.7-million-row multilingual text-classification dataset for recognizing seven emotion categories in English, French, Italian, Spanish, and German. It combines examples from Emotion, DailyDialog, and GoEmotions. The default unsplit corpus contains 2,710,740 non-empty rows derived from 550,123 source IDs. Every row records its source dataset and source-specific license. The current release is 2.0.0. See CHANGELOG.md for changes from the original… See the full description on the dataset page: https://huggingface.co/datasets/ma2za/many_emotions.

sourceHugging Faceotherupdated 2mo agoView on Hugging Face
9likes303downloads
Dataset Card

Many Emotions

Many Emotions is a 2.7-million-row multilingual text-classification dataset for recognizing seven emotion categories in English, French, Italian, Spanish, and German. It combines examples from Emotion, DailyDialog, and GoEmotions.

The default unsplit corpus contains 2,710,740 non-empty rows derived from 550,123 source IDs. Every row records its source dataset and source-specific license.

The current release is 2.0.0. See CHANGELOG.md for changes from the original 2023 release.

No train/test split is implied. The default all configuration intentionally exposes one full partition. Create splits appropriate for your task and group them by source_id.

Labels

IDLabelRowsShare
0anger306,52911.3%
1fear242,4628.9%
2joy765,47928.2%
3love186,0616.9%
4sadness615,52022.7%
5surprise94,2983.5%
6neutral500,39118.5%

Load the dataset

Install the required library:

bash
pip install datasets

Load the complete corpus as one dataset:

python
from datasets import load_dataset

dataset = load_dataset("ma2za/many_emotions", split="full")

For exploration, tutorials, and integration tests, load the deterministic 10,000-row sample:

python
sample = load_dataset("ma2za/many_emotions", "sample", split="full")

The sample excludes known exact-text label conflicts and is balanced as evenly as possible across the 35 language-label combinations. It is not an evaluation split and should not be used as a benchmark.

all is the default configuration. Calling load_dataset("ma2za/many_emotions") without split="full" returns a DatasetDict containing that partition.

The repository retains the raw gzip file for archival access. Load it explicitly with:

python
raw = load_dataset(
    "json",
    data_files="hf://datasets/ma2za/many_emotions/data/many_emotions.json.gz",
    split="train",
)

The deprecated row-level gzip files also remain available for reproducibility, but they are not published as Hub configurations:

python
base = "hf://datasets/ma2za/many_emotions/data"
legacy = load_dataset(
    "json",
    data_files={
        "train": f"{base}/split_dataset_train.jsonl.gz",
        "validation": f"{base}/split_dataset_validation.jsonl.gz",
        "test": f"{base}/split_dataset_test.jsonl.gz",
    },
)

Both Hub configurations expose one partition named full. No repository code is executed when loading them.

Dataset structure

Default unsplit corpus

PartitionRows
full2,710,740

The default corpus is stored in 11 Zstandard-compressed Parquet shards. It adds explicit source_id and label_name columns and omits the single empty record found in the legacy files.

Balanced sample

ConfigurationPartitionRowsPurpose
samplefull10,000Fast exploration, tutorials, and integration tests

The sample contains 285 or 286 rows from each language-label combination and zero rows marked as exact-text label conflicts. Selection is deterministic by ID. Its source distribution is not balanced.

Deprecated legacy splits

SplitRows
train2,439,666
validation135,538
test135,537
Total2,710,741

These splits are retained only for reproducibility. They are row-level splits, not source-grouped splits. Removing the final language suffix from id gives the source ID. Its membership across the legacy splits is:

Source ID membershipSource IDs
train only327,997
validation only141
test only134
train and validation99,233
train and test99,487
validation and test39
all three splits23,092

Pairwise, train shares 122,325 source IDs with validation and 122,579 with test. Validation and test share 23,131 source IDs.

The default corpus contains approximately the same number of rows for each language:

LanguageCodeRows
Englishen550,122
Germande542,598
Italianit541,145
Spanishes538,699
Frenchfr538,176

Data fields

FieldTypeDescription
idstringExample identifier derived from the source and language.
source_idstringShared identifier for all retained language variants of a source example. Available in all.
textstringText to classify.
labelintegerEmotion class ID from 0 through 6.
label_namestringHuman-readable emotion label. Available in all.
datasetstringSource dataset: emotion, daily_dialog, or go_emotions.
licensestringLicense or usage designation inherited from the source row.
languagestringISO 639-1 language code: de, en, es, fr, or it.
is_label_conflictbooleanWhether the exact (language, text) value has more than one label in the corpus.
label_variantsintegerNumber of distinct labels associated with the exact (language, text) value.

Example:

json
{
  "id": "emotion_199458_en",
  "source_id": "emotion_199458",
  "text": "i live with a big wonderful family that wants me to feel welcomed so sitting alone in my room is not an option",
  "label": 2,
  "label_name": "joy",
  "dataset": "emotion",
  "license": "educational/research",
  "language": "en",
  "is_label_conflict": false,
  "label_variants": 1
}

Raw data

data/many_emotions.json.gz contains 598,298 records. Each record contains the English text in text and parallel French, Italian, Spanish, and German text in fr, it, es, and de. It also retains the original source label ID before normalization to the seven prepared labels above.

Unlike the prepared corpus, the raw file does not normalize labels or select one language column.

The prepared data retains 550,123 of the raw source IDs; 48,175 raw IDs are absent. Among retained source IDs, 530,398 have all five languages, while 19,725 have between one and four languages.

Source composition

Counts in the default unsplit corpus:

SourceRowsShareLicense value stored in rows
Emotion2,055,91875.8%educational/research
DailyDialog414,02015.3%CC BY-NC-SA 4.0
GoEmotions240,8028.9%apache license 2.0

Data quality and limitations

The following results come from complete build-time and post-build scans:

  • All 2,710,740 default rows have the documented typed schema, unique IDs, non-empty text, valid language codes, and labels between 0 and 6.
  • The empty legacy record go_emotions_1_48976_es is excluded from all. Its corresponding Spanish field is also empty in the raw record.
  • There are no repeated (language, text, label) triples in the default corpus.
  • There are 159,897 exact (language, text) values associated with multiple labels, involving 323,049 rows. The same text can have as many as six labels. Use is_label_conflict and label_variants to identify them without recomputing this analysis.
  • The deprecated legacy files place the same-language text across train and validation for 14,535 values, train and test for 14,660 values, and validation and test for 888 values. None has the same label on both sides of the measured pair.
  • The deprecated legacy files also distribute translations of the same source example across splits. The default full partition has no split boundaries and makes no evaluation claim.
  • Labels are imbalanced and strongly associated with source. For example, 83.2% of DailyDialog rows and 64.7% of GoEmotions rows are neutral, while the Emotion contribution contains no neutral rows.
  • The translation method and translation-quality evaluation are not documented in this repository. Inspect the languages relevant to your use case before training or evaluation.
  • Median text length is 15 to 16 whitespace-delimited words, depending on language; the 95th percentile is 39 to 42 words.

Source labels are normalized to anger, fear, joy, love, sadness, surprise, and neutral. The default corpus preserves the normalized labels from the legacy prepared files.

Reproducibility

reports/all_validation.json and reports/sample_validation.json record input and shard checksums, row counts, feature definitions, distributions, and conflict statistics.

Rebuild into a separate directory:

bash
python scripts/build_all.py \
  --output-dir build/all \
  --sample-output-dir build/sample \
  --report build/all_validation.json \
  --sample-report build/sample_validation.json
python scripts/validate_all.py \
  --reports build/all_validation.json build/sample_validation.json

The builder concatenates the three legacy files into one partition, derives the additional fields, excludes empty text, annotates exact-text label conflicts, and writes deterministic Parquet files. It also selects the balanced sample by a stable hash of each ID. It does not assign train, validation, or test splits.

Licensing

This dataset combines sources with different licenses or usage designations. The license field preserves that information for each row. Users are responsible for following the terms associated with every source represented in their chosen subset; the repository-level metadata therefore uses license: other rather than applying one license to all rows.

Filter by source provenance or stored license value when a project cannot use every contribution:

python
go_emotions = dataset.filter(lambda row: row["dataset"] == "go_emotions")
apache_rows = dataset.filter(lambda row: row["license"] == "apache license 2.0")

These fields describe inherited provenance. Filtering them is not a legal conclusion about a resulting dataset or downstream use; review the linked upstream terms for your use case.

Citation

For the current version 2.0.0, cite:

Mazza, P. (2026). many_emotions (Revision abb7917) [Data set]. Hugging Face. https://doi.org/10.57967/hf/9639
bibtex
@misc{paolo_mazza_2026,
  author = {paolo mazza},
  title = {many_emotions (Revision abb7917)},
  year = {2026},
  url = {https://huggingface.co/datasets/ma2za/many_emotions},
  doi = {10.57967/hf/9639},
  publisher = {Hugging Face}
}

Many Emotions version 1.0 was originally released in 2023. Its archived citation is:

Mazza, P. (2026). many_emotions (Revision 2f0d037) [Data set]. Hugging Face. https://doi.org/10.57967/hf/9638
bibtex
@misc{paolo_mazza_2026_v1,
  author = {paolo mazza},
  title = {many_emotions (Revision 2f0d037)},
  year = {2026},
  url = {https://huggingface.co/datasets/ma2za/many_emotions},
  doi = {10.57967/hf/9638},
  publisher = {Hugging Face}
}

Also cite the applicable upstream datasets represented in the subset you use.

Upstream datasets

bibtex
@inproceedings{saravia-etal-2018-carer,
  title = {{CARER}: Contextualized Affect Representations for Emotion Recognition},
  author = {Saravia, Elvis and Liu, Hsien-Chi Toby and Huang, Yen-Hao and Wu, Junlin and Chen, Yi-Shin},
  booktitle = {Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing},
  year = {2018},
  publisher = {Association for Computational Linguistics},
  url = {https://aclanthology.org/D18-1404/},
  doi = {10.18653/v1/D18-1404},
  pages = {3687--3697}
}

@inproceedings{li-etal-2017-dailydialog,
  title = {{D}aily{D}ialog: A Manually Labelled Multi-turn Dialogue Dataset},
  author = {Li, Yanran and Su, Hui and Shen, Xiaoyu and Li, Wenjie and Cao, Ziqiang and Niu, Shuzi},
  booktitle = {Proceedings of the Eighth International Joint Conference on Natural Language Processing (Volume 1: Long Papers)},
  year = {2017},
  publisher = {Asian Federation of Natural Language Processing},
  url = {https://aclanthology.org/I17-1099/},
  pages = {986--995}
}

@inproceedings{demszky-etal-2020-goemotions,
  title = {{G}o{E}motions: A Dataset of Fine-Grained Emotions},
  author = {Demszky, Dorottya and Movshovitz-Attias, Dana and Ko, Jeongwoo and Cowen, Alan and Nemade, Gaurav and Ravi, Sujith},
  booktitle = {Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics},
  year = {2020},
  publisher = {Association for Computational Linguistics},
  url = {https://aclanthology.org/2020.acl-main.372/},
  doi = {10.18653/v1/2020.acl-main.372},
  pages = {4040--4054}
}