Un viaje a las fabulosas aplicaciones de los transformadores — Parte 2: Hacia la IA

Estás leyendo la publicación: Un viaje a las fabulosas aplicaciones de los transformadores — Parte 2: Hacia la IA

Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.

Un viaje a las fabulosas aplicaciones de los transformadores — Parte 2

Demostración con énfasis en PNL usando Python, Hugging Face

La arquitectura de transformadores se usa ampliamente en el procesamiento del lenguaje natural y contribuyó en gran medida a la necesidad de los modelos de lenguaje grande (LLM) del momento. Con el auge de transferir el aprendizaje en NLP usando LLM, muchos modelos se construyen y comparten con la comunidad de investigación en cara de abrazo.

Vamos a ver algunas de las intrigantes aplicaciones de los transformadores en NLP con demostraciones y explicaciones. Este artículo es una continuación de uno anterior vinculado a continuación.

Medio

Los modelos de caras abrazadas que se usan en este artículo también se pueden usar como un modelo Plug-and-Play usando la API de inferencia acelerada. Consulte amablemente este artículo para obtener más información sobre cómo utilizar un modelo utilizando su API.

Modelos ML Plug-and-Play con ‘API de inferencia acelerada’ de Hugging Face

El código de demostración para todas las aplicaciones discutidas, junto con el enlace de Colab, se proporciona en este enlace GitHub. Al ser un artículo introductorio, los detalles sobre los modelos discutidos están vinculados en las secciones respectivas. Para que todas las aplicaciones funcionen (excepto por la similitud de oraciones), necesitamos instalar la biblioteca de transformadores usando pip install transformers.

Las aplicaciones que vamos a ver en este artículo son

6. Traducción

7. Clasificación de fichas

8. Similitud de oraciones

9. Clasificación de tiro cero

10. Máscara de relleno

6. Traducción

Una aplicación interesante y útil con transformadores es la capacidad de traducir texto entre idiomas. Hay varios modelos disponibles para la tarea de traducción, dependiendo de los idiomas que se utilicen en la fase de formación.

En nuestro ejemplo, vamos a traducir un texto del idioma inglés al idioma italiano. Para saber qué modelo puede realizar la traducción, tenemos que explorar la biblioteca Hugging Face. El modelo nombrado Helsinki-NLP/opus-mt-en-it realiza esta traducción, y la usaremos para nuestra demostración.

El primer paso es instanciar la canalización con la traducción de la tarea. El nombre de la tarea varía según los idiomas que se traten. Puede encontrar más información sobre la traducción del texto en diferentes idiomas, los modelos correspondientes y los conjuntos de datos en este enlace.

En nuestro caso, la tarea es translation_en_to_it y se proporciona junto con el nombre del modelo de la siguiente manera.

de oleoducto de importación de transformadores
text_translator = pipeline(“traducción_en_a_it”, model=”Helsinki-NLP/opus-mt-en-it”)

input_text se almacena con la oración en inglés que deseamos traducir.

input_text = “Este texto está traducido del inglés al italiano”

En la siguiente línea, cargamos la entrada a nuestro modelo y almacenamos la salida en italian_text. Al imprimir el mismo, obtenemos la versión traducida de nuestra entrada.

texto_italiano = traductor_texto(texto_entrada, clean_up_tokenization_spaces=Verdadero)
imprimir (texto_italiano)
Producción:
[{‘translation_text’: “Questo testo è tradotto dall’inglese all’italiano”}]

🔥 Recomendado:  ¿Vale la pena la protección de dominio? Cómo, beneficios y costos

7. Clasificación de fichas

Clasificación de tokens es la tarea de asignar una etiqueta/etiqueta a las palabras presentes en el texto. Una palabra individual en la oración se llama token. Ejemplos de clasificación de fichas son Reconocimiento de entidad nombrada(NER) y Parte del discurso(PoS) etiquetado.

Hemos cubierto NER en la primera parte de nuestro artículo, por lo que aquí veremos la segunda tarea, el etiquetado de PoS. El etiquetado de partes del discurso es el proceso de identificar la parte correspondiente del discurso de una palabra y etiquetarla con etiquetas como sustantivos, pronombres, adjetivos, adverbios, etc., en una oración.

Comenzamos importando la canalización y creando una instancia con la clasificación de token de tarea.

de oleoducto de importación de transformadores

pos_classifier = pipeline(“clasificación-token”, modelo = “vblagoje/bert-english-uncased-finetuned-pos”)

Como se indicó anteriormente, el modelo que hemos utilizado es vblagoje/bert-english-uncased-finetuned-pos. Ahora clasificaremos las fichas y las mostraremos.

tags = pos_classifier(“Hola, me alegro cuando veo cascadas.”)
imprimir (etiquetas)

Producción:
[{‘entity’: ‘INTJ’, ‘score’: 0.9958117, ‘index’: 1, ‘word’: ‘hello’, ‘start’: 0, ‘end’: 5}, {‘entity’: ‘PRON’, ‘score’: 0.9995704, ‘index’: 2, ‘word’: ‘i’, ‘start’: 6, ‘end’: 7}, {‘entity’: ‘AUX’, ‘score’: 0.9966484, ‘index’: 3, ‘word’: ‘am’, ‘start’: 8, ‘end’: 10}, {‘entity’: ‘ADJ’, ‘score’: 0.99829704, ‘index’: 4, ‘word’: ‘happy’, ‘start’: 11, ‘end’: 16}, {‘entity’: ‘ADV’, ‘score’: 0.99861526, ‘index’: 5, ‘word’: ‘when’, ‘start’: 17, ‘end’: 21}, {‘entity’: ‘PRON’, ‘score’: 0.9995561, ‘index’: 6, ‘word’: ‘i’, ‘start’: 22, ‘end’: 23}, {‘entity’: ‘VERB’, ‘score’: 0.99941325, ‘index’: 7, ‘word’: ‘see’, ‘start’: 24, ‘end’: 27}, {‘entity’: ‘NOUN’, ‘score’: 0.9958626, ‘index’: 8, ‘word’: ‘waterfalls’, ‘start’: 28, ‘end’: 38}, {‘entity’: ‘PUNCT’, ‘score’: 0.9996631, ‘index’: 9, ‘word’: ‘.’, ‘start’: 38, ‘end’: 39}]

Para ver claramente el resultado, importaremos pandas y crearemos un marco de datos del resultado y veremos el resultado como se muestra a continuación.

importar pandas como pd
df_tags = pd.DataFrame(etiquetas)
imprimir (df_tags)

Producción:
entidad puntuación índice palabra comienzo fin
0 INTJ 0.995812 1 hola 0 5
1 PRON 0.999570 2 i 6 7
2 AUX 0.996648 3 am 8 10
3 ADJ 0.998297 4 feliz 11 16
4 ADV 0.998615 5 cuando 17 21
5 PRON 0.999556 6 i 22 23
6 VERBO 0.999413 7 ver 24 27
7 SUSTANTIVO 0.995863 8 cascadas 28 38
8 PUNTO 0.999663 9 . 38 39

8. Similitud de oraciones

Una aplicación interesante con los transformadores es la capacidad de extraer incrustaciones de oraciones que capturan información semántica. A incrustación de oraciones es la representación numérica de una oración completa y se utiliza como entrada al modelo. En nuestro ejemplo, usaremos un transformador de oraciones para generar incrustaciones de oraciones y lo usaremos para identificar el semejanza entre dos oraciones.

Para este ejemplo, tenemos que instalar transformadores de oraciones biblioteca de la cara abrazada, a diferencia de las otras aplicaciones donde instalaremos la biblioteca de transformadores. Hay muchos modelos disponibles para la tarea de similitud de oraciones, y vamos a usar el modelo transformadores de oraciones/all-MiniLM-L6-v2 en nuestro ejemplo.

El primer paso es importar SentenceTransformer y util como se muestra a continuación. Se necesita el paquete util para usar la función de similitud de coseno para medir la distancia entre las dos incrustaciones.

!pip instalar transformadores de oraciones
de sentencia_transformadores importar SentenceTransformer, util

El siguiente paso, cargamos input_sentences con oraciones con las que nos gustaría probar nuestro modelo. Damos el nombre del modelo específico que se utilizará para el SentenceTransformer.

🔥 Recomendado:  Los 5 mejores proxies de Phantombuster para 2023 (económicos y confiables)

similarity_model = SentenceTransformer(‘sentence-transformers/all-MiniLM-L6-v2’)
input_sentencias = [“I’m happy”, “I’m not sad”]

En el siguiente paso, extraemos la incrustación de ambas oraciones. Las incrustaciones de ambas oraciones se almacenan en variables separadas.

embedding_1= modelo_de_similitud.encode(input_sentences[0]convert_to_tensor=Verdadero)
embedding_2 = similarity_model.encode(input_sentences[1]convert_to_tensor=Verdadero)

En el último paso, utilizamos la función cos_sim de util para calcular la distancia entre dos vectores (incrustaciones)

imprimir(util.pytorch_cos_sim(incrustar_1, incrustar_2))
Producción:
tensor([[0.4624]])

Cuanto más se acerca el valor a 1, mayor es la similitud entre las oraciones. Si el valor está más cerca de 0, podemos entender que las oraciones no son similares.

9. Clasificación de tiro cero

La clasificación de tiro cero tiene su raíz en Aprendizaje de tiro cero lo que básicamente significa que un clasificador se entrena con un conjunto de etiquetas y se prueba con un conjunto diferente de etiquetas. El conjunto de etiquetas de evaluación no es visto por el modelo en absoluto.

Esto significa que podemos tomar una clasificación de tiro cero modelar, dar entrada y también dar etiquetas propias. El modelo clasificará el texto de acuerdo con las etiquetas que le demos, aunque el modelo no haya sido entrenado por ninguna de estas etiquetas. Ahora probaremos lo mismo en nuestra demostración. Comencemos por instanciar la canalización con la tarea zero-shot-classification.

de oleoducto de importación de transformadores
zero_shot_classifier = canalización (“clasificación de disparo cero”)
Producción:
No se suministró ningún modelo, el valor predeterminado era facebook/bart-large-mnli y la revisión c626438 (https://huggingface.co/facebook/bart-large-mnli).
No se recomienda usar una canalización sin especificar un nombre de modelo y una revisión en producción.
Descargando: 100%
1.15k/1.15k [00:00<00:00, 28.0kB/s]
Descargando: 100%
1,63G/1,63G [00:26<00:00, 63.5MB/s]
Descargando: 100%
26,0/26,0 [00:00<00:00, 467B/s]
Descargando: 100%
899k/899k [00:00<00:00, 5.16MB/s]
Descargando: 100%
456k/456k [00:00<00:00, 2.73MB/s]
Descargando: 100%
1,36 M/1,36 M [00:00<00:00, 2.71MB/s]

Como no hemos dado un modelo concreto, el modelo facebook/bart-grande-mnli es seleccionado por la biblioteca, y los pesos del modelo se descargan y se refieren con zero_shot_classifier.

El siguiente paso es definir el texto de entrada y las etiquetas con las que necesitamos la clasificación. Usando zero_shot_classifier, pasamos el texto de entrada y las etiquetas para clasificar.

input_sentence = “Tengo hambre y estoy enojado. Creo que un helado me hará sentir bien”
etiquetas = [‘food’, ‘travel’,’entertainment’,’sad’,’happy’,’neutral’]
resultados = zero_shot_classifier(input_sentence, etiquetas)
imprimir (resultados)

Producción:
{‘secuencia’: ‘Tengo hambre y estoy enojado. Creo que un helado me hará sentir bien’, ‘etiquetas’: [‘food’, ‘sad’, ‘entertainment’, ‘travel’, ‘neutral’, ‘happy’]’puntuaciones’: [0.8720405101776123, 0.07575708627700806, 0.023996146395802498, 0.010163746774196625, 0.009797507897019386, 0.00824508722871542]}

Para ver claramente el resultado, importaremos la biblioteca pandas y veremos el resultado en un marco de datos. Como se muestra en el siguiente cuadro de datos, la puntuación de las etiquetas comida y tristeza es mayor que la de las otras etiquetas. Podemos ver que la oración dada se relaciona con la etiqueta comida más que con todas las demás etiquetas. Así que obtenemos la puntuación más alta en eso.

importar pandas como pd
df_result = pd.DataFrame(resultados)
imprimir (df_resultado.loc[:, [‘labels’,’scores’]])
Producción:
etiquetas puntuaciones
0 comida 0.872041
1 triste 0.075757
2 entretenimiento 0.023996
3 viajes 0.010164
4 neutro 0.009798
5 feliz 0.008245

10. Máscara de relleno

El concepto de Modelado de lenguaje enmascarado (MLM) se ocupa de predecir palabras para reemplazar las palabras enmascaradas a propósito en los datos. Esto ayuda a mejorar la comprensión estadística del lenguaje con el que se utiliza el modelo. entrenado y conduce a mejores representaciones de texto. El mérito de MLM es el entrenamiento previo autosupervisado que no necesita datos etiquetados para el entrenamiento.

🔥 Recomendado:  ¿Debe aceptar un recorte salarial para un nuevo trabajo?

La tarea máscara de rellenotratando así de enmascarar palabras aleatorias en la oración dada y explorando las diversas sugerencias dadas por el modelo para reemplazar la máscara.

Comencemos con la creación de instancias de canalización con la tarea de máscara de relleno como se muestra a continuación. Como no hemos dado un modelo específico, el modelo por defecto (destilroberta-base) se descarga.

de oleoducto de importación de transformadores
fill_mask_clf = pipeline(“fill-mask”)

Producción:
No se suministró ningún modelo, por defecto a distilroberta-base y revisión ec58a5b (https://huggingface.co/distilroberta-base).
No se recomienda usar una canalización sin especificar un nombre de modelo y una revisión en producción.
Descargando: 100%
480/480 [00:00<00:00, 13.5kB/s]
Descargando: 100%
331M/331M [00:08<00:00, 43.4MB/s]
Descargando: 100%
899k/899k [00:00<00:00, 1.56MB/s]
Descargando: 100%
456k/456k [00:00<00:00, 1.77MB/s]
Descargando: 100%
1,36 M/1,36 M [00:00<00:00, 1.77MB/s]

Ahora le damos una oración al modelo enmascarando una palabra con el token . Al imprimir la salida, vemos cinco posibles palabras diferentes para la palabra enmascarada, la puntuación correspondiente, la representación del token y la oración completa con la palabra predicha.

print(fill_mask_clf(“La inteligencia artificial será en el futuro”))

Producción:
[{‘score’: 0.061495572328567505,
‘token’: 30208,
‘token_str’: ‘ commonplace’,
‘sequence’: ‘artificial intelligence is going to be commonplace in the future’},
{‘score’: 0.05322642996907234,
‘token’: 25107,
‘token_str’: ‘ ubiquitous’,
‘sequence’: ‘artificial intelligence is going to be ubiquitous in the future’},
{‘score’: 0.0344822071492672,
‘token’: 5616,
‘token_str’: ‘ useful’,
‘sequence’: ‘artificial intelligence is going to be useful in the future’},
{‘score’: 0.033160075545310974,
‘token’: 6128,
‘token_str’: ‘ everywhere’,
‘sequence’: ‘artificial intelligence is going to be everywhere in the future’},
{‘score’: 0.025654001161456108,
‘token’: 956,
‘token_str’: ‘ needed’,
‘sequence’: ‘artificial intelligence is going to be needed in the future’}]

Resumen

En estas dos partes del artículo, analizamos las 10 aplicaciones más importantes que se pueden lograr con los transformadores. La conclusión es que, con el auge de los transformadores y los grandes modelos de lenguaje, las tareas complejas que habrían necesitado mucho tiempo y costo ahora están disponibles para usarlas con facilidad. También hay que tener en cuenta que el mismo modelo se puede utilizar para diferentes tareas.

La idea es entender las posibilidades de un modelo y afinar para su propio propósito. Cuanto más lo intentamos, más aprendemos.

Encuentre más artículos relacionados con la PNL en este página.

¡¡Gracias!!


Un viaje a las fabulosas aplicaciones de los transformadores: Parte 2 se publicó originalmente en Hacia la IA en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.

Publicado a través de Hacia la IA