Este repositório é baseado no artigo:
CLS, Averaging, or Layer Combinations? Embedding Strategies for Text Classification Across BERT Variants
Eliton Perin, Mariana Caravanti, Anderson Bessa e Edson Matsubara
Referência: Este repositório contém os experimentos descritos no artigo, que investiga estratégias de extração de embeddings de variantes do BERT para tarefas de classificação de texto, avaliando CLS token, média das camadas finais e combinações da primeira e última camada.
A literatura oferece recomendações inconsistentes sobre a melhor forma de extrair embeddings de variantes do BERT ao projetar classificadores de texto. Algumas abordagens recomendam o uso do token CLS, outras sugerem a média entre as primeiras e últimas camadas, ou apenas a última camada. Para resolver essas contradições, realizamos uma avaliação experimental em benchmarks de classificação de texto — incluindo R8, SST2, Movie Review, TREC6 Overruling, R52, TREC6, Snippets e Ohsumed — utilizando variantes populares do BERT, como RoBERTa, DistilBERT, DeBERTa-v3, MPNet, ModernBERT e o BERT original.
Foram testadas todas as combinações entre datasets, modelos e estratégias de embeddings: CLS, média da última camada e média entre a primeira e última camada. Os resultados foram analisados estatisticamente usando ANOVA e teste t pareado. O estudo fornece evidências práticas sobre as melhores escolhas de extração de embeddings para melhorar o desempenho em tarefas de classificação textual, oferecendo orientações úteis para pesquisadores e profissionais da área.
- Python 3.9 ou superior (recomendado: 3.10)
- pip atualizado
- CUDA 11.8 instalado (para uso com GPU)
git clone git@github.com:liafacom/text_classification_bert_variants.git
cd text_classification_bert_variantspython -m venv .venv
source .venv/bin/activate # Linux/Mac
# ou
.venv\Scripts\activate # Windowspip install torch==2.1.0+cu118 torchvision==0.16.0+cu118 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118pip install -r requirements.txtpip install git+https://github.com/liafacom/text_dataset.gitO projeto inclui um arquivo requirements.txt com as seguintes dependências:
wandb==0.17.4
seaborn==0.13.2
scikit-learn==1.5.1
numpy==1.26.4
pandas==2.2.2
matplotlib==3.9.1
transformers==4.51.2
tqdm==4.66.4
O script run.sh automatiza a execução dos experimentos para diferentes configurações de semente aleatória, dataset, número de épocas e tamanho de batch. Ele utiliza o script principal benchmark_transformers_classic.py para realizar os testes.
SEEDS=(0)
DATASETS=("MR")
EPOCHS=(10)
BATCH_SIZES=(16)
ID_CUDA=0
TAGS="test machine1"Certifique-se de que o script run.sh está com permissão de execução:
chmod +x run.sh
./run.shO script irá iterar sobre todas as combinações dos valores definidos e executar chamadas como:
python3 benchmark_transformers_classic.py --seed 0 --dataset MR --epochs 10 --batch_size 16 --cuda 0 --tags "test machine1"Link para as rodadas dos experimentos no Wandb: Experimentos
Obs.: Filtre pela tag: paper2. As demais tags foram usadas para teste. Para uma visualização melhor, agrupe por: dataset_name, transformer_model_name, embedding_type. Selecione as colunas de interesse, por exemplo: test_accuracy.
Um Colab foi produzido para comparar resultados em gráficos, figuras e tabelas e estão disponíveis aqui: figure_graph_diagrams.ipynb.
