# xlm-roberta-large-french-cap
## Model description
An `xlm-roberta-large` model finetuned on french training data labelled with [major topic codes](https://www.comparativeagendas.net/pages/master-codebook) from the [Comparative Agendas Project](https://www.comparativeagendas.net/).

## How to use the model
#### Loading and tokenizing input data
```python
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
```python
model = AutoModelForSequenceClassification.from_pretrained('poltextlab/xlm-roberta-large-french-cap',
                                                           num_labels=num_labels,
                                                           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
`xlm-roberta-large-french-cap` was fine-tuned using the Hugging Face Trainer class with the following hyperparameters:
```python
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 2280 examples (10% of the available data).<br>
Model accuracy is **0.71**.
| label        |   precision |   recall |   f1-score |   support |
|:-------------|------------:|---------:|-----------:|----------:|
| 0            |        0.71 |     0.72 |       0.71 |       200 |
| 1            |        0.59 |     0.44 |       0.5  |        62 |
| 2            |        0.82 |     0.74 |       0.78 |        80 |
| 3            |        0.66 |     0.75 |       0.7  |        64 |
| 4            |        0.72 |     0.57 |       0.63 |       186 |
| 5            |        0.75 |     0.76 |       0.76 |       125 |
| 6            |        0.7  |     0.6  |       0.65 |        85 |
| 7            |        0.88 |     0.82 |       0.85 |        45 |
| 8            |        0.7  |     0.74 |       0.72 |        57 |
| 9            |        0.74 |     0.86 |       0.79 |        58 |
| 10           |        0.82 |     0.77 |       0.8  |       154 |
| 11           |        0.55 |     0.65 |       0.59 |       105 |
| 12           |        0.76 |     0.64 |       0.7  |        87 |
| 13           |        0.58 |     0.59 |       0.59 |       106 |
| 14           |        0.8  |     0.8  |       0.8  |        87 |
| 15           |        0.7  |     0.72 |       0.71 |        46 |
| 16           |        0.57 |     0.71 |       0.63 |        59 |
| 17           |        0.64 |     0.79 |       0.71 |       204 |
| 18           |        0.78 |     0.78 |       0.78 |       359 |
| 19           |        0    |     0    |       0    |         7 |
| 20           |        0.76 |     0.7  |       0.73 |       104 |
| 21           |        0    |     0    |       0    |         0 |
| macro avg    |        0.65 |     0.64 |       0.64 |      2280 |
| weighted avg |        0.72 |     0.71 |       0.71 |      2280 |

## Inference platform
This model is used by the [CAP Babel Machine](https://babel.poltextlab.com), 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](https://babel.poltextlab.com).

## 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.

{"language": ["fr"], "license": "mit", "tags": ["zero-shot-classification", "text-classification", "pytorch"], "metrics": ["accuracy", "f1-score"]}
transformers pytorch xlm-roberta text-classification zero-shot-classification fr license:mit autotrain_compatible endpoints_compatible region:us
TAGS
#transformers #pytorch #xlm-roberta #text-classification #zero-shot-classification #fr #license-mit #autotrain_compatible #endpoints_compatible #region-us 

xlm-roberta-large-french-cap
============================


Model description
-----------------


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


How to use the model
--------------------


#### Loading and tokenizing input data


#### Inference using the Trainer class


### Fine-tuning procedure


'xlm-roberta-large-french-cap' was fine-tuned using the Hugging Face Trainer class with the following hyperparameters:


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 2280 examples (10% of the available data).  

Model accuracy is 0.71.



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.



#### Loading and tokenizing input data #### Inference using the Trainer class ### Fine-tuning procedure


'xlm-roberta-large-french-cap' was fine-tuned using the Hugging Face Trainer class with the following hyperparameters:


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 2280 examples (10% of the available data).  

Model accuracy is 0.71.



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.
TAGS
#transformers #pytorch #xlm-roberta #text-classification #zero-shot-classification #fr #license-mit #autotrain_compatible #endpoints_compatible #region-us 
 #### Loading and tokenizing input data #### Inference using the Trainer class ### Fine-tuning procedure


'xlm-roberta-large-french-cap' was fine-tuned using the Hugging Face Trainer class with the following hyperparameters:


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 2280 examples (10% of the available data).  

Model accuracy is 0.71.



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.