Ein katalanischer Albert (A Lite Bert), Googles, das selbst überprüftes Lernen von Sprachdarstellungen antritt.
Es wird auf einem Korpus von 19.557.475 Satzpaaren (mit 729 Millionen einzigartigen Wörtern) aus der katalanischen Untergruppe des Oscar -Datensatzes von Inria ausgebildet. Wir verwenden einen Validierungssatz von 833.259 Satzpaaren, um das Modell zu bewerten.
Sie können das Original -Albert -Papier hier lesen.
Sie sind auf der Model Hub -Seite von Huggingface erhältlich
| Modell | Bogen. | Trainingsdaten | Spiele damit | Visualisieren Sie es |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | Winzig (ungezogen) | Oscar (4,3 GB Text) | Karte auf dem Modell Hub | Visualisieren Sie in Exbert |
codegram / calbert-base-uncased | Basis (ungezogen) | Oscar (4,3 GB Text) | Karte auf dem Modell Hub | Visualisieren Sie in Exbert |
Sie brauchen nur die transformers Library. Nichts anderes zu klonen oder zu installieren.
Um auszuwählen, welche Modellversion verwendet werden soll ( tiny oder base ), denken Sie daran, dass kleinere Modelle weniger leistungsfähig sind, aber flinker und weniger ressourcenhungry zu laufen.
pip install transformers from transformers import AutoModel , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "codegram/calbert-base-uncased" )
model = AutoModel . from_pretrained ( "codegram/calbert-base-uncased" )
model . eval () # disable dropoutNun zu den beiden Hauptanwendungsfällen, die Sie tun können.
Dies ist der einfachste Anwendungsfall, aber nicht das nützlichste. Trotzdem ist es hier! Was auch immer Sie maskieren möchten, verwenden Sie das spezielle Token [MASK] um es anzuzeigen. Das Modell gibt die wahrscheinlichsten Kandidaten für das maskierte Wort aus.
from transformers import pipeline
calbert_fill_mask = pipeline ( "fill-mask" , model = "codegram/calbert-base-uncased" , tokenizer = "codegram/calbert-base-uncased" )
results = calbert_fill_mask ( "M'agrada [MASK] això" )
# results
# [{'sequence': "[CLS] m'agrada molt aixo[SEP]", 'score': 0.614592969417572, 'token': 61},
# {'sequence': "[CLS] m'agrada moltíssim aixo[SEP]", 'score': 0.06058056280016899, 'token': 4867},
# {'sequence': "[CLS] m'agrada més aixo[SEP]", 'score': 0.017195818945765495, 'token': 43},
# {'sequence': "[CLS] m'agrada llegir aixo[SEP]", 'score': 0.016321714967489243, 'token': 684},
# {'sequence': "[CLS] m'agrada escriure aixo[SEP]", 'score': 0.012185849249362946, 'token': 1306}]Der extrahierte Feature -Vektor kann verwendet werden, um beispielsweise Dokumente als dichte Vektoren in Elasticsearch zu indexieren und Ähnlichkeitssuche durchzuführen.
Ein weiterer Anwendungsfall ist das Verständnis der natürlichen Sprache -diese Vektoren als abstrakte Darstellungen von Dokumenten/Sätzen zu verwenden, die als Eingabe für andere nachgeschaltete Modelle wie Klassifikatoren verwendet werden können.
Hier erfahren Sie, wie Sie die Vektoren aus einem Satz oder einem Dokument extrahieren:
import torch
# Tokenize in sub-words with SentencePiece
tokenized_sentence = tokenizer . tokenize ( "M'és una mica igual" )
# ['▁m', "'", 'es', '▁una', '▁mica', '▁igual']
# 1-hot encode and add special starting and end tokens
encoded_sentence = tokenizer . encode ( tokenized_sentence )
# [2, 109, 7, 71, 36, 371, 1103, 3]
# NB: Can be done in one step : tokenize.encode("M'és una mica igual")
# Feed tokens to Calbert as a torch tensor (batch dim 1)
encoded_sentence = torch . tensor ( encoded_sentence ). unsqueeze ( 0 )
embeddings , _ = model ( encoded_sentence )
embeddings . size ()
# torch.Size([1, 8, 768])
embeddings . detach ()
# tensor([[[-0.0261, 0.1166, -0.1075, ..., -0.0368, 0.0193, 0.0017],
# [ 0.1289, -0.2252, 0.9881, ..., -0.1353, 0.3534, 0.0734],
# [-0.0328, -1.2364, 0.9466, ..., 0.3455, 0.7010, -0.2085],
# ...,
# [ 0.0397, -1.0228, -0.2239, ..., 0.2932, 0.1248, 0.0813],
# [-0.0261, 0.1165, -0.1074, ..., -0.0368, 0.0193, 0.0017],
# [-0.1934, -0.2357, -0.2554, ..., 0.1831, 0.6085, 0.1421]]]) Dies ist Teil der angewandten Forschung, die wir bei Codegram durchführen (wer soll für die Zeit und den Berechnung danken!).
Dies wäre eine Menge Schmerzen gewesen, um zu bauen, ohne die leistungsstarken Transformers und Tokenizer -Bibliotheken von Suggingface zu machen. Vielen Dank, dass Sie NLP eigentlich schön gemacht haben, mit ihnen zu arbeiten!
Dank von Google Research für das Erstellen und Open-Sourcing Albert in erster Linie.
Albert ist ein Sprachmodell, dh ein neuronales Netzwerk, das Sequenzen mit einer bestimmten Struktur lernen kann, z. B. Sätze in der natürlichen Sprache (aber nicht nur natürlicher Sprache!).
Aber wie lernen sie Sprache? Verschiedene Sprachmodelle werden mit unterschiedlichen Vorwandsaufgaben geschult, nämlich Herausforderungen, die Sie ihnen geben, damit sie lernen können, wie Sprache funktioniert. Die Idee ist, dass sie, um bei dieser einen Aufgabe wieder gut zu werden, indirekt die Grammatik der Sprache und sogar ihre Semantik und ihren Stil lernen müssen.
Traditionelle (auch kausale ) Sprachmodelle werden normalerweise mit der Aufgabe geschult, das nächste Wort in einer Sequenz vorherzusagen , wie folgt:
Albert hat jedoch eine andere Familie, die als maskierte Sprachmodelle bezeichnet wird. In dieser Familie ist die Vorwand Aufgabe, die sie lernen müssen, ähnlich, aber anstatt immer das letzte Wort in einer Sequenz vorherzusagen, werden einige Wörter im Satz zufällig in Lücken (oder maskiert ) wie folgt:
Diese Aufgabe ist etwas schwieriger und erfordert, was noch wichtiger ist, den Kontext zu verstehen, der eine Rohlage viel besser umgibt.
Es stellt sich heraus, dass ein Sprachmodell bei dieser ziemlich sinnlosen Pretext -Aufgabe, sobald es sehr, sehr gut wird, leicht für viel interessantere Aufgaben wiederholt werden kann.
Sobald eine Sprache Grammatik und Semantik lernt, kann sie beispielsweise zu einem sehr guten Klassifikator für Sätze und sogar ganze Dokumente werden.
Wenn Sie es dann beibringen, Tweets oder Dokumente in Kategorien zu klassifizieren (oder zum Beispiel die Stimmung oder Toxizität zu identifizieren), sieht es nicht mehr nur eine Reihe verwirrender Charaktere, sondern es ist das "Lesen" des Dokuments auf einer viel abstrakteren Ebene, sodass es viel leichter "sinnvoller" kann. (Beachten Sie die Luftzitate, das ist keine Magie, aber es ist wahrscheinlich das nächste.)
Weil es in Katalanisch keine Sprachmodelle gibt! Und es gibt viel katalanischer Text zu verarbeiten. (In Katalonien).
Für das Abhängigkeitsmanagement verwenden wir Gedichte (und natürlich Docker).
pip install -U poetry
poetry install
poetry shell Das Produktionsbild zum Training des Modells befindet sich unter docker/ und heißt codegram/calbert . Es enthält die neuesten Abhängigkeiten, aber kein Code - Deepkit wird den Code in jedem Experiment versenden (lesen Sie weiter, um mehr über Deepkit zu erfahren).
Alle Konfigurationen leben unter config . Dort können Sie Parameter im Zusammenhang mit Training, Tokenisierung und allem kontrollieren und sogar auswählen, welche Version des Modells zu trainieren ist.
Die gesamte Konfiguration ist überschrieben, da es sich um die Hydra -Konfiguration handelt. Überprüfen Sie ihre Dokumente.
Eine winzige Untergruppe des Datensatzes lebt unter dist/data , damit Sie ein kleines Modell trainieren und schnelle Experimente lokal durchführen können.
Um den vollständigen Datensatz herunterzuladen und ihn automatisch in Training / Validierung aufzuteilen, führen Sie diesen Befehl einfach aus:
python -m calbert download_data --out-dir dataset Die vorbereiteten Tokenisierer befinden sich bei dist/tokenizer-{cased,uncased} . Sie sind nur am vollständigen Trainingset ausgebildet.
Wenn Sie den Tokenizer erneut ausdehnen möchten (standardmäßig ungezogen):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerUm die mit einem festgestellten Häken zu trainieren, überschreiben Sie einfach die entsprechende Hydra -Konfiguration:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=FalseWir verwenden Deepkit, um Experimente zu laufen und zu verfolgen. Laden Sie es kostenlos für Ihre Plattform Ihrer Wahl herunter, wenn Sie lokal ausführen möchten, oder überprüfen Sie ihre Dokumente, um den kostenlosen Community -Server auszuführen.
Um sicherzustellen, dass alles funktioniert, trainieren wir ein Testmodell mit dem tatsächlichen Docker -Bild in Deepkit:
deepkit run test.deepkit.ymlStandardmäßig trainiert es in Ihrer lokalen Deepkit -Instanz mit Ihrer CPU. Lesen Sie ihre Dokumente, um zu erfahren, wie Sie Ihre Läufe anpassen.
Konfigurieren Sie einen Cluster in Ihrem lokalen Deepkit mit mindestens einer Maschine mit einer GPU.
deepkit run --clusterSobald Sie ein geschultes Modell haben, können Sie es exportieren, um sie als Standardmodell für das Standardmodell von Suggingface -Transformatoren zu verwenden.
Stellen wir uns beispielsweise vor, Sie haben ein base-uncased ausgebildet und möchten es exportieren.
Laden Sie den export von den Ausgängen in Ihrem Deepkit -Lauf herunter und rennen Sie:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test