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.
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.
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 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")
Bereiten Sie diesmal den folgenden Satz vor.
text = "This is a pen."
text2 = "I am a man"
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
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.
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]
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