Inhaltsverzeichnis
In diesem Artikel stellen wir eine Bibliothek vor, mit der Sie auf einfache Weise eine Mehrklassenklassifizierung (Dokumentklassifizierung, Textklassifizierung) von Text durch BERT durchführen können. Die drei Zeilen im Titel sind die methodenähnliche Bedeutung der Bibliothek.
BERT steht für Bidirectional Encoder Representations from Transformers Übersetzt als "bidirektional codierte Darstellung durch Transformer", handelt es sich um ein Verarbeitungsmodell in natürlicher Sprache, das im Oktober 2018 in einem Artikel von Jacob Devlin et al. Von Google veröffentlicht wurde. Die Arbeitsbereiche der Verarbeitung natürlicher Sprache wie Übersetzung, Klassifizierung von Dokumenten sowie Frage und Antwort werden als "Aufgaben (Verarbeitung natürlicher Sprache)" bezeichnet, und BERT erzielte zu diesem Zeitpunkt die höchste Punktzahl bei verschiedenen Aufgaben. Zitat: [Ledge.ai "Was ist BERT?
Referenz: Qiita "Gründliche Erklärung des Papiers von" BERT ", dem König der Verarbeitung natürlicher Sprache"
Zum Glück gibt es bereits viele Beispielartikel zur Textklassifizierung durch BERT. Es ist jedoch ziemlich lang und es ist schwierig, loszulegen.
Referenz: Klassifizierung japanischer Sätze unter Verwendung des Verarbeitungsmodells für natürliche Sprache (BERT) Mehrwertklassifizierung japanischer Sätze mit BERT [PyTorch] Einführung in die Klassifizierung japanischer Dokumente mit BERT
Nach ein wenig Recherche gab es also eine Person, die es in eine handliche Bibliothek gepackt hat ↓ ↓
「Simple Transformers」
Originalartikel: [Einfache Transformatoren - Mehrklassentextklassifizierung mit BERT, RoBERTa, XLNet, XLM und DistilBERT](https://medium.com/swlh/simple-transformers-multi-class-text-classification-with-bert] -roberta-xlnet-xlm-and-8b585000ce3a)
Diese Bibliothek ist eine "funktionierende" Transformer-Bibliothek. Dies ist ideal, wenn Sie Transformer mit drei Codezeilen verwenden möchten, ohne sich um die technischen Details kümmern zu müssen. (Übersetzt aus dem Originalartikel)
Es gibt verschiedene Arten von BERT, Eine Bibliothek namens Transformers kann acht von BERT, GPT, GPT-2, Transformer-XL, XLNet, XLM, RoBERTa und DistliBERT auf ähnliche Weise ausführen. Diese "einfachen Transformatoren" sind eine Bibliothek, die die Verwendung noch einfacher macht.
Offiziell empfehle ich conda, aber ich habe es in einer virtuellen Umgebung gemacht.
Voraussetzungen: $ pip install pandas tqdm scipy scikit-learn transformatoren tensorboardx simple transformers
** Zusätzlich benötigen Sie Pytorch. ** **.
Wenn Sie eine GPU verwenden, müssen Sie CUDA separat installieren. Überprüfen Sie dies daher bitte.
Bei CPU ist es in Ordnung, nur Pytorch zu installieren.
Sie können den Installationsbefehl von dem offiziellen Befehl erhalten, der zu Ihrer Umgebung passt. → Pytorch Official
Übrigens konnte ich in meiner Umgebung den Fehler bei der GPU-Speichermangel nicht vermeiden, also habe ich ihn auf der CPU ausgeführt. Es ist lang.
Zunächst einmal, wenn Sie die offizielle Demo auf Japanisch zusammenfassen
import pandas as pd
train_df = pd.read_csv('data/train.csv', header=None)
train_df['text'] = train_df.iloc[:, 1] + " " + train_df.iloc[:, 2]
train_df = train_df.drop(train_df.columns[[1, 2]], axis=1)
train_df.columns = ['label', 'text']
train_df = train_df[['text', 'label']]
train_df['text'] = train_df['text'].apply(lambda x: x.replace('\\', ' '))
train_df['label'] = train_df['label'].apply(lambda x:x-1)
eval_df = pd.read_csv('data/test.csv', header=None)
eval_df['text'] = eval_df.iloc[:, 1] + " " + eval_df.iloc[:, 2]
eval_df = eval_df.drop(eval_df.columns[[1, 2]], axis=1)
eval_df.columns = ['label', 'text']
eval_df = eval_df[['text', 'label']]
eval_df['text'] = eval_df['text'].apply(lambda x: x.replace('\\', ' '))
eval_df['label'] = eval_df['label'].apply(lambda x:x-1)
from simpletransformers.classification import ClassificationModel
model = ClassificationModel('roberta', 'roberta-base', num_labels=4)
model.train_model(train_df)
result, model_outputs, wrong_predictions = model.eval_model(eval_df)
Das Obige ist das im Originalartikel veröffentlichte Beispiel. Es ist einfach.
Als nächstes frage ich mich, wie viel es in japanischen Sätzen verwendet werden kann (obwohl ich BERT nicht genug verstehe). Ich habe es mit dem bekannten [Livedoor Corpus] versucht (https://www.rondhuit.com/download.html).
Wenn es sich im heruntergeladenen Zustand befindet, wird es für jede Domain in .txt verteilt, daher habe ich es in CSV zusammengefasst. Ersetzen Sie zu diesem Zeitpunkt die Domain durch ein Label, und lassen Sie nur das Label und den Text übrig. Da es für die CPU etwas schwierig ist, wurde der Test in 3 Domänen von 0 bis 2 durchgeführt. (dokujo-tsushin、it-life-hack、kaden-channel)
Teilen Sie dies in Zug und Test
from sklearn.model_selection import train_test_split
X_train_df, X_test_df, y_train_s, y_test_s = train_test_split(
data["text"], data["label"], test_size=0.2, random_state=0, stratify=data["label"]
)
train_df = pd.DataFrame([X_train_df,y_train_s]).T
test_df = pd.DataFrame([X_test_df,y_test_s]).T
train_df["label"] = train_df["label"].astype("int")
test_df["label"] = test_df["label"].astype("int")
from simpletransformers.classification import ClassificationModel
model = ClassificationModel('roberta', 'roberta-base', num_labels=3,use_cuda=False)
model.train_model(train_df)
result, model_outputs, wrong_predictions = model.eval_model(test_df)
Genauigkeit: 0.8798329801724872
Verlust: 0.24364208317164218
war. Ich habe die Originaldaten nicht richtig gelesen, daher kenne ich die Eigenschaften der einzelnen Domänen nicht, aber die Genauigkeit ist gut.
Wenn ich andere Domain-Artikel vorhersage, sieht es außerdem so aus.
Es scheint, dass IT Life Hack und S-MAX der Gadget-Site ähnlich sind.
Ich habe es grob geplottet, ohne es in Domänen zu unterteilen, aber es ist ziemlich geteilt.
Sie können die Textklassifizierung durch BERT einfach durchführen, indem Sie die Daten wie folgt vorbereiten. github Es scheint, dass es für detaillierte Einstellungen und andere Aufgaben verwendet werden kann. Ich habe es berührt, bevor ich etwas über BERT gelernt habe, also werde ich ein wenig lernen und es dann erneut mit verschiedenen Daten versuchen. Bitte benutzen Sie es.
Recommended Posts