Classificazione del testo con encoder Transformer

Transformer encoder for text classification

Spiegazione passo-passo dell’utilizzo degli encoder Transformer per classificare il testo

Foto di Mel Poole su Unsplash

Transformer è, senza dubbio, una delle scoperte più importanti nel campo del deep learning. L’architettura encoder-decoder di questo modello si è dimostrata potente nelle applicazioni cross-domain.

Inizialmente, il Transformer veniva utilizzato solo per compiti di modellazione del linguaggio, come la traduzione automatica, la generazione di testo, la classificazione del testo, il question-answering, ecc. Tuttavia, di recente, il Transformer è stato utilizzato anche per compiti di computer vision, come la classificazione delle immagini, il rilevamento degli oggetti e la segmentazione semantica.

Dato il suo successo e l’esistenza di numerosi modelli sofisticati basati su Transformer come BERT, Vision-Transformer, Swin-Transformer e la famiglia GPT, è fondamentale comprendere il funzionamento interno dell’architettura Transformer.

In questo articolo, analizzeremo solo la parte encoder del Transformer, che può essere utilizzata principalmente per scopi di classificazione. In particolare, utilizzeremo gli encoder Transformer per classificare i testi. Senza ulteriori indugi, diamo prima un’occhiata al dataset che utilizzeremo in questo articolo.

Informazioni sul Dataset

Il dataset che utilizzeremo è il dataset di email. Puoi scaricare questo dataset su Kaggle tramite questo link. Questo dataset è concesso in licenza CC0: Public Domain, il che significa che puoi utilizzare e distribuire liberamente questo dataset.

import mathimport torchimport torch.nn as nnimport torchtextimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom torch.utils.data import DataLoaderfrom tqdm import tqdmfrom torchtext.data.utils import get_tokenizerfrom torchtext.vocab import build_vocab_from_iteratordevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")df = pd.read_csv('spam_ham.csv')df_train, df_test = train_test_split(df, test_size=0.2, random_state=42)print(df_train.head())# Output'''     Category                                            Message1978     spam  Reply to win £100 weekly! Where will the 2006 ...3989      ham  Hello. Sort of out in town already. That . So ...3935      ham   How come guoyang go n tell her? Then u told her?4078…