[PYTHON] Tokenize mit der Hugging Face-Bibliothek

Hintergrund

Vor kurzem habe ich angefangen zu kaggle. Es ist ein Wettbewerb, um Zeichenketten aus Tweets zu extrahieren, aber können Sie ein paar davon treffen? Ich dachte, ich habe versucht, Wörter mit verschiedenen Methoden in Merkmalsmengen umzuwandeln. Zu diesem Zeitpunkt möchte ich Toknizer vorstellen, was praktisch war.

Was ist Tokenizer?

Um ein Wort durch maschinelles Lernen zu lernen, ist es notwendig, das Wort zu quantifizieren (vektorisieren). Der Konverter heißt Tokenizer. Wahrscheinlich. Zum Beispiel  This -> Tokenizer ->713 Quantifizieren Sie so.

transformers Die diesmal verwendete Bibliothek ist eine Bibliothek namens "Transformers", die von "Hugging Face, Inc" entwickelt wurde. Es ist eine Bibliothek, die für die Verarbeitung natürlicher Sprache bekannt ist (zumindest wurde sie häufig in Kaggle verwendet), und es wird nicht nur der Tokenizer, sondern auch das Modell nach der neuesten Methode implementiert.

Lass es uns sofort benutzen

Dieses Mal werde ich "RoBERTa" als Beispiel verwenden. Die Quelle finden Sie hier [https://github.com/ishikawa-takumi/transformers-sample/blob/master/tokenizer.ipynb]. Diese Quelle ist im ipynb-Format und kann in Google Colab oder Visual Studio Code ausgeführt werden. Google Colab Visual Studio Code Alternativ können Sie jeden Code nehmen und auf eine Konsole oder einen Py portieren, um ihn auszuprobieren.

Holen Sie sich Tokenizer

Holen Sie sich den Tokenizer mit transformers.AutoTokenizer.from_pretrained (Modellname). Durch Ändern des "Modellnamens" können Sie den Tokenizer für dieses Modell erhalten. Da wir diesmal RoBERTa verwenden werden, geben Sie "roberta-base" ein. Weitere Modelle finden Sie hier (https://huggingface.co/models). Die Erstellung wird einige Zeit dauern. Warten Sie daher eine Weile.

import transformers

tokenizer = transformers.AutoTokenizer.from_pretrained("roberta-base")

Erstellen Sie einen geeigneten Satz

Bereiten Sie diesmal den folgenden Satz vor.

text = "This is a pen."
text2 = "I am a man"

Vektorisierung

Vektorisieren Sie jeden der erstellten Sätze. Verwenden Sie dazu encode.

ids = tokenizer.encode(text)
# output
# [713, 16, 10, 7670, 4]
ids2 = tokenizer.encode(text2)
# output
# [100, 524, 10, 313]

Jetzt haben Sie die Zahlen für die Wörter, die Sie tun wollten. Betrachtet man den ersten Satz, this -> 713 is -> 16 a -> 10 pen -> 7670 . -> 4 Konvertiert zu! !! !!

Special Token

Was ist ein spezielles Token?

Darüber hinaus erfolgt bei Methoden wie BERT und RoBERTa das Lernen mit Sonderzeichen. Dazu gehören der Satzanfang und die Zeichen, die eine Unterbrechung zwischen Sätzen darstellen. Bitte überprüfen Sie hier für Details. Lassen Sie uns zum Beispiel sehen, welche Zeichen in RoBERTa verwendet werden. Es ist in einer Variablen namens special_tokens_map gepackt.

tokenizer.special_tokens_map
# output
# {'bos_token': '<s>',
#  'eos_token': '</s>',
#  'unk_token': '<unk>',
#  'sep_token': '</s>',
#  'pad_token': '<pad>',
#  'cls_token': '<s>',
#  'mask_token': '<mask>'}

"Bedeutung des Tokens: Zeichen, das dem Token zugewiesen ist" Die Ausgabe ist wie folgt. Beispielsweise wird dem ersten bos_token das Zeichen \ zugewiesen. Auch als die Bedeutung von jedem bos_token: Beginn des Sequenz-Tokens eos_token: Token für das Ende der Sequenz unk_token: Zeichen, die nicht in ID konvertiert werden können (Unbekanntes Token) sep_token: Das Trennzeichen pad_token: Padding (Das zum Auffüllen verwendete Token) cls_token: Zur Klassifizierung (cls_token) mask_token: Mask (Das zum Maskieren von Werten verwendete Token)

ist. Bitte überprüfen Sie die zuvor erwähnte URL für eine detaillierte Erklärung.

Spezielle Token-ID-Prüfung

all_special_tokens ist die dem Special Token zugewiesene Zeichenliste, und all_special_ids wird mit den IDs gefüllt, die dem Special Token entsprechen. Sie sind in derselben Reihenfolge wie all_special_tokens angeordnet. Sieben spezielle Token wurden zuvor vergeben, aber all_special_tokens ist eine Liste mit fünf Zeichen, da einige der zugewiesenen Zeichen doppelt vorhanden sind.

tokenizer.all_special_tokens
# output
# ['<pad>', '<s>', '<mask>', '<unk>', '</s>']
tokenizer.all_special_ids
# output
# [1, 0, 50264, 3, 2]

Spezielles Token hinzugefügt

In RoBERTa und BERT muss beim Lernen und Ableiten mit Model ein spezielles Token hinzugefügt werden. (Ich habe diesmal nicht gepolstert.) Sie können das zuvor überprüfte Spezial-Token manuell anhängen. Es gibt jedoch eine API, die das Spezial-Token zur automatisch eingegebenen Anweisung hinzufügt. Verwenden Sie es also.

ids_with_special_token = tokenizer.build_inputs_with_special_tokens(ids, ids2)
# output(ids_with_special_token)
# [0, 713, 16, 10, 7670, 4, 2, 2, 100, 524, 10, 313, 2]
mask = tokenizer.get_special_tokens_mask(ids, ids2)
# output(mask)
# [1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1]

Um ein spezielles Token hinzuzufügen, tokenizer.build_inputs_with_special_tokens (Text-ID, Text-2-ID) Wird genutzt. Sie können zwei Sätze einfügen (sogar einer ist in Ordnung), und das spezielle Token wird am Anfang, am Ende und am Ende der beiden Sätze richtig eingefügt.

In Zukunft werde ich es tatsächlich mit Model verarbeiten.

Recommended Posts

Tokenize mit der Hugging Face-Bibliothek
Umrisse das Gesicht mit Dlib (1)
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
Aggregieren Sie die Testergebnisse mithilfe der QualityForward Python-Bibliothek
Überprüfen von Methoden und Variablen mithilfe der Bibliothek siehe
Verwendung der 3D-Plotbibliothek MayaVi von Julia
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Teil 1 Führen Sie e-Gov mit der SmartHR-Bibliothek kiji aus (e-Gov-Spezifikationen)
Verwenden Sie die Such-API der National Parliament Library in Python
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
(Python3) Nein. OO (Verwenden Sie die Standardbibliothek?): 5 Shader
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Versuchen Sie es mit der Twitter-API
Klonen Sie mit dem Befehl dd
Versuchen Sie es mit der Twitter-API
Ich habe die Changefinder-Bibliothek ausprobiert!
Versuchen Sie es mit der PeeringDB 2.0-API
2. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (öffentliche Materialien von e-Gov) auszuführen
3. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (Ausführung der Ausführungsumgebung) auszuführen.