A Catalan Albert (A Lite Bert), la versión de Google sobre el aprendizaje auto-supervisado de las representaciones lingüísticas.
Está entrenado en un corpus de 19.557.475 pares de oraciones (que contienen 729 millones de palabras únicas) extraído del subconjunto catalán del conjunto de datos de Oscar de Inria. Utilizamos el conjunto de validación A de 833.259 pares de oraciones para evaluar el modelo.
Puedes leer el artículo original de Albert aquí.
Están disponibles en la página Model Hub de Huggingface
| Modelo | Arco. | Datos de capacitación | Jugar con él | Visualizarlo |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | Pequeño (no basado) | Oscar (4.3 GB de texto) | Tarjeta en Model Hub | Visualizar en Exbert |
codegram / calbert-base-uncased | Base (no basada) | Oscar (4.3 GB de texto) | Tarjeta en Model Hub | Visualizar en Exbert |
Solo necesitas la Biblioteca transformers . Nada más para clonar o instalar.
Para elegir qué versión del modelo usar ( tiny o base ), considere que los modelos más pequeños son menos potentes, pero ágiles y menos hambrientos de recursos para ejecutar.
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 dropoutAhora en los dos casos de uso principales que puede hacer.
Este es el caso de uso más simple, pero no el más útil. Aún así, aquí está! Independientemente de las palabras que desee enmascarar, use el token especial [MASK] para indicarlo. El modelo generará los candidatos más probables para la palabra enmascarada.
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}]El vector de características extraídas se puede utilizar para indexar documentos como vectores densos en Elasticsearch, por ejemplo, y realizar búsquedas de similitud.
Otro caso de uso es la comprensión del lenguaje natural , utilizando estos vectores como representaciones abstractas de documentos/oraciones que pueden usarse como entrada a otros modelos posteriores, como los clasificadores.
Aquí le mostramos cómo extraer los vectores de una oración o documento:
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]]]) Esto es parte de la investigación aplicada que hacemos en CodeGram (¡que agradecerá el tiempo y el cómputo!).
Esto habría sido un montón de dolor de construir sin las poderosas bibliotecas de transformadores y tokenizers de Huggingface. ¡Gracias por hacer que NLP sea realmente agradable para trabajar!
Además, gracias a Google Research por la creación y el bosque abierto Albert en primer lugar.
Albert es un modelo de lenguaje, es decir, una red neuronal que puede aprender secuencias con cierta estructura, como oraciones en el lenguaje natural (¡pero no solo el lenguaje natural!).
Pero, ¿cómo aprenden el lenguaje? Los diferentes modelos de idiomas están entrenados con diferentes tareas de pretexto , a saber, desafíos que les das para que puedan aprender cómo funciona el lenguaje. La idea es que para ser muy bueno en esta tarea, deben aprender indirectamente la gramática del idioma e incluso su semántica y estilo.
Los modelos de lenguaje tradicionales (también conocidos como causales ) generalmente están entrenados con la tarea de predecir la siguiente palabra en una secuencia, como esta:
Sin embargo, Albert es de otra familia llamada modelos de idiomas enmascarados . En esta familia, la tarea de pretexto que tienen que aprender es similar, pero en lugar de predecir siempre la última palabra en una secuencia, algunas palabras en la oración se convierten al azar en espacios en blanco (o enmascarados ), así: como esta:
Esta tarea es un poco más difícil y, lo que es más importante, requiere comprender el contexto que rodea un espacio en blanco mucho mejor.
Resulta que, una vez que un modelo de idioma se vuelve muy, muy bueno en esta tarea de pretexto bastante inútil, se puede reutilizar fácilmente para tareas mucho más interesantes.
Una vez que un idioma aprende gramática y semántica, puede convertirse en un muy buen clasificador de oraciones e incluso documentos completos, por ejemplo.
Si luego le enseña a clasificar tweets o documentos en categorías (o identificar el sentimiento, o la toxicidad, por ejemplo), ya no ve solo un montón de personajes confusos, sino que está "leyendo" el documento a un nivel mucho más abstracto, por lo que puede "tener sentido" mucho más fácilmente. (Tenga en cuenta las citas aéreas, esto no es mágico, pero probablemente sea lo más cercano).
¡Porque no hay modelos de idiomas en catalán! Y hay mucho texto catalán para procesarse. (En Cataluña).
Para la gestión de la dependencia usamos poesía (y Docker, por supuesto).
pip install -U poetry
poetry install
poetry shell La imagen de producción para entrenar el modelo está en docker/ , y se llama codegram/calbert . Contiene todas las últimas dependencias, pero no hay código: Deepkit enviará el código en cada experimento (lea para obtener más información sobre DeepKit).
Todas las configuraciones viven en config . Allí puede controlar los parámetros relacionados con la capacitación, la tokenización y todo, e incluso elegir qué versión del modelo entrenar.
Toda la configuración es anulable, ya que es la configuración de Hydra. Revise sus documentos.
Un pequeño subconjunto del conjunto de datos vive bajo dist/data para que pueda entrenar un modelo pequeño y hacer experimentos rápidos localmente.
Para descargar el conjunto de datos completo y dividirlo automáticamente en capacitación / validación, simplemente ejecute este comando:
python -m calbert download_data --out-dir dataset Los tokenizadores previos a la aparición están en dist/tokenizer-{cased,uncased} . Están entrenados solo en el conjunto de entrenamiento completo.
Si desea volver a entrenar el tokenizer (por defecto no basado):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerPara entrenar al Casado, simplemente anule la configuración de HYDRA apropiada:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=FalseUsamos DeepKit para ejecutar y realizar un seguimiento de los experimentos. Descárguelo de forma gratuita para su plataforma de elección si desea ejecutar localmente, o consulte sus documentos para ejecutar con su servidor comunitario gratuito.
Para asegurarnos de que todo funcione, entrenemos un modelo de prueba con la imagen de Docker real en Deepkit:
deepkit run test.deepkit.ymlPor defecto, lo capacitará en su instancia local de DeepKit, usando su CPU. Lea sus documentos para aprender a personalizar sus ejecuciones.
Configure un clúster en su Deepkit local con al menos una máquina con una GPU.
deepkit run --clusterUna vez que tenga un modelo capacitado, puede exportarlo para que se utilice como un modelo estándar de Transformers Huggingface.
Por ejemplo, imaginemos que entrenó un modelo base-uncased y desea exportarlo.
Descargue la carpeta export de las salidas en su ejecución de DeepKit y ejecute:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test