poltextlab's picture
Upload README.md with huggingface_hub
ce30860
|
raw
history blame
5.66 kB
metadata
license: mit
language:
  - it
tags:
  - zero-shot-classification
  - text-classification
  - pytorch
metrics:
  - accuracy
  - f1-score

poltextlab/xlm-roberta-large-italian-cap-v3

Model description

An xlm-roberta-large model finetuned on italian training data labelled with major topic codes from the Comparative Agendas Project.

How to use the model

Loading and tokenizing input data

import pandas as pd
import numpy as np
from datasets import Dataset
from transformers import (AutoModelForSequenceClassification, AutoTokenizer, 
                          Trainer, TrainingArguments)

CAP_NUM_DICT = {0: '1', 1: '2', 2: '3', 3: '4', 4: '5', 5: '6', 
6: '7', 7: '8', 8: '9', 9: '10', 10: '12', 11: '13', 12: '14', 
13: '15', 14: '16', 15: '17', 16: '18', 17: '19', 18: '20', 19: 
'21', 20: '23', 21: '999'}

tokenizer = AutoTokenizer.from_pretrained('xlm-roberta-large')
num_labels = len(CAP_NUM_DICT)

def tokenize_dataset(data : pd.DataFrame):
    tokenized = tokenizer(data["text"],
                          max_length=MAXLEN,
                          truncation=True,
                          padding="max_length")
    return tokenized

hg_data = Dataset.from_pandas(data)
dataset = hg_data.map(tokenize_dataset, batched=True, remove_columns=hg_data.column_names)

Inference using the Trainer class

model = AutoModelForSequenceClassification.from_pretrained('poltextlab/poltextlab/xlm-roberta-large-italian-cap-v3',
                                                           num_labels=22,
                                                           problem_type="multi_label_classification",
                                                           ignore_mismatched_sizes=True
                                                           )

training_args = TrainingArguments(
    output_dir='.',
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8
)

trainer = Trainer(
    model=model,
    args=training_args
)

probs = trainer.predict(test_dataset=dataset).predictions
predicted = pd.DataFrame(np.argmax(probs, axis=1)).replace({0: CAP_NUM_DICT}).rename(
    columns={0: 'predicted'}).reset_index(drop=True)

Fine-tuning procedure

poltextlab/xlm-roberta-large-italian-cap-v3 was fine-tuned using the Hugging Face Trainer class with the following hyperparameters:

training_args = TrainingArguments(
    output_dir=f"../model/{model_dir}/tmp/",
    logging_dir=f"../logs/{model_dir}/",
    logging_strategy='epoch',
    num_train_epochs=10,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    learning_rate=5e-06,
    seed=42,
    save_strategy='epoch',
    evaluation_strategy='epoch',
    save_total_limit=1,
    load_best_model_at_end=True
)

We also incorporated an EarlyStoppingCallback in the process with a patience of 2 epochs.

Model performance

The model was evaluated on a test set of 4044 examples (10% of the available data).
Model accuracy is 0.75.

label precision recall f1-score support
0 0.74 0.76 0.75 327
1 0.53 0.68 0.6 142
2 0.79 0.8 0.8 163
3 0.84 0.85 0.84 163
4 0.64 0.69 0.66 165
5 0.91 0.84 0.87 171
6 0.77 0.77 0.77 146
7 0.81 0.83 0.82 75
8 0.7 0.73 0.72 78
9 0.87 0.89 0.88 261
10 0.79 0.84 0.82 424
11 0.69 0.62 0.65 78
12 0.58 0.54 0.56 81
13 0.64 0.67 0.65 203
14 0.81 0.76 0.79 169
15 0.82 0.81 0.82 91
16 0.82 0.78 0.8 101
17 0.8 0.74 0.77 348
18 0.69 0.66 0.68 471
19 0.52 0.44 0.47 62
20 0.88 0.67 0.76 113
21 0.64 0.68 0.66 212
macro avg 0.74 0.73 0.73 4044
weighted avg 0.75 0.75 0.75 4044

Inference platform

This model is used by the CAP Babel Machine, an open-source and free natural language processing tool, designed to simplify and speed up projects for comparative research.

Cooperation

Model performance can be significantly improved by extending our training sets. We appreciate every submission of CAP-coded corpora (of any domain and language) at poltextlab{at}poltextlab{dot}com or by using the CAP Babel Machine.

Debugging and issues

This architecture uses the sentencepiece tokenizer. In order to run the model before transformers==4.27 you need to install it manually.

If you encounter a RuntimeError when loading the model using the from_pretrained() method, adding ignore_mismatched_sizes=True should solve the issue.