(PNL) revolucionó la forma en que interactuamos con la tecnología.
¿Recuerdas cuando aparecieron por primera vez los chatbots y sonaban como robots? ¡Afortunadamente, eso es cosa del pasado!
Los modelos Transformer han agitado su varita mágica y remodelado las tareas de PNL. Pero antes de dejar esta publicación pensando “Caray, los transformadores son demasiado densos para aprender”, tengan paciencia. No entraremos en otro artículo técnico tratando de enseñarle las matemáticas detrás de esta increíble tecnología, sino que aprenderemos en la práctica lo que puede hacer por nosotros.
Con Transformers Pipeline de Hugging Face, las tareas de PNL son más fáciles que nunca.
¡Exploremos!
La única explicación sobre qué es un transformador
Piense en los modelos de transformadores como la élite del mundo de la PNL.
Los transformadores destacan por su capacidad para centrarse en varias partes de una secuencia de entrada a través de un mecanismo llamado “autoatención”.
Los transformadores son poderosos debido a la “autoatención”, una característica que les permite decidir qué partes específicas de una oración son las más importantes para concentrarse en un momento dado.
¿Has oído hablar alguna vez de BERT, GPT o RoBERTa? ¡Esos son ellos! BERT (Representaciones de codificador bidireccional de Transformers) es un revolucionario modelo de lenguaje de inteligencia artificial de Google de 2018 que comprende el contexto del texto leyendo palabras de izquierda a derecha y de derecha a izquierda simultáneamente.
Basta de hablar, comencemos a sumergirnos en el paquete de transformadores. [1].
Introducción al oleoducto Transformers
La biblioteca Transformers ofrece un conjunto de herramientas completo para entrenar y ejecutar modelos previamente entrenados de última generación. La clase Pipeline, que es nuestro tema principal, proporciona una interfaz fácil de usar para diversas tareas, por ejemplo:
Generación de texto Segmentación de imágenes Reconocimiento de voz Control de calidad de documentos.
Preparación
Antes de comenzar, ejecutemos los conceptos básicos y reunamos nuestras herramientas. Necesitaremos Python, la biblioteca de transformadores y tal vez PyTorch o TensorFlow. La instalación es como de costumbre: transformadores de instalación de tuberías.
IDE como Anaconda o plataformas como Google Colab ya los incluyen como instalación estándar. No hay problema.
La clase Pipeline le permite ejecutar muchas tareas de aprendizaje automático utilizando cualquier modelo disponible en Hugging Face Hub. Es tan simple como conectarlo y jugar.
Si bien cada tarea viene con un modelo predeterminado y un preprocesador preconfigurados, puede personalizarlos fácilmente utilizando el parámetro de modelo para intercambiar un modelo diferente de su elección.
Código
Comencemos con los transformadores 101 y veamos cómo funciona antes de profundizar más. La primera tarea que realizaremos es un análisis de sentimiento simple sobre cualquier titular de noticias determinado.
de transformadores import pipeline classifier = pipeline(“sentiment-analysis”) clasificador(“Instagram quiere limitar el spam de hashtags”).
La respuesta es la siguiente.
No se proporcionó ningún modelo, el valor predeterminado es distilbert/distilbert-base-uncased-finetuned-sst-2-english y revisión 714eb0f (https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english). No se recomienda utilizar una tubería sin especificar el nombre del modelo y la revisión en producción. Dispositivo configurado para usar CPU
[{‘label’: ‘NEGATIVE’, ‘score’: 0.988932728767395}]
Como no proporcionamos un parámetro de modelo, optó por la opción predeterminada. A modo de clasificación, obtuvimos que el sentimiento sobre este titular es 98% NEGATIVO. Además, podríamos tener una lista de oraciones para clasificar, no solo una.
Súper fácil, ¿verdad? Pero eso no es sólo eso. Podemos seguir explorando otras funcionalidades interesantes.
Clasificación de tiro cero
Una clasificación de tiro cero significa etiquetar un texto que aún no ha sido etiquetado. Entonces no tenemos un patrón claro para eso. Todo lo que tenemos que hacer entonces es aprobar algunas clases para que el modelo elija una. Esto puede resultar muy útil al crear conjuntos de datos de entrenamiento para el aprendizaje automático.
Esta vez, alimentamos el método con el argumento del modelo y una lista de oraciones para clasificar.
clasificador = tubería(“clasificación-tiro-cero”, modelo = ‘facebook/bart-large-mnli’) clasificador(
[“Inter Miami wins the MLS”, “Match tonight betwee Chiefs vs. Patriots”, “Michael Jordan plans to sell Charlotte Hornets”]etiquetas_candidatas=[“soccer”, “football”, “basketball”]
)
[{‘sequence’: ‘Inter Miami wins the MLS’,
‘labels’: [‘soccer’, ‘football’, ‘basketball’]’puntuaciones’: [0.9162040948867798, 0.07244189083576202, 0.011354007758200169]}, {‘sequence’: ‘Partido de esta noche entre Chiefs vs. Patriots’, ‘labels’: [‘football’, ‘basketball’, ‘soccer’]’puntuaciones’: [0.9281435608863831, 0.0391676239669323, 0.032688744366168976]}, {‘sequence’: ‘Michael Jordan planea vender Charlotte Hornets’, ‘labels’: [‘basketball’, ‘football’, ‘soccer’]’puntuaciones’: [0.9859175682067871, 0.009983371943235397, 0.004099058918654919]}]
¡Parece que el modelo hizo un gran trabajo al etiquetar estas oraciones!
Generación de texto
El paquete también puede generar texto. Esta es una buena forma de crear un pequeño generador de historias simpáticas para contarlas a nuestros hijos antes de acostarse. Estamos aumentando el parámetro de temperatura para hacer que el modelo sea más creativo.
generador = tubería(“generación de texto”, temperatura=0.8) generador(“Érase una vez, en una tierra donde estaba el Rey Piña”)
[{‘generated_text’:
“Once upon a time, in a land where the King Pineapple was a common
crop, the Queen of the North had lived in a small village. The Queen had always
lived in a small village, and her daughter, who was also the daughter of the Queen,
had lived in a larger village. The royal family would come to the Queen’s village,
and then the Queen would return to her castle and live there with her daughters.
In the middle of the night, she would lay down on the royal bed and kiss the princess
at least once, and then she would return to her castle to live there with her men.
In the daytime, however, the Queen would be gone forever, and her mother would be alone.
The reason for this disappearance, in the form of the Great Northern Passage
and the Great Northern Passage, was the royal family had always wanted to take
the place of the Queen. In the end, they took the place of the Queen, and went
with their daughter to meet the King. At that time, the King was the only person
on the island who had ever heard of the Great Northern Passage, and his return was
in the past.
After Queen Elizabeth’s death, the royal family went to the
Great Northern Passage, to seek out the Princess of England and put her there.
The Princess of England had been in”}]
Reconocimiento de nombre y entidad
Esta tarea puede reconocer una persona (PER), una ubicación (LOC) o una entidad (ORG) en un texto determinado. Esto es excelente para crear listas de marketing rápidas de nombres de clientes potenciales, por ejemplo.
ner = pipeline(“ner”, grouped_entities=True) ner(“El hombre aterrizó en la luna en 1969. Neil Armstrong fue el primer hombre en pisar la superficie de la Luna. Era un astronauta de la NASA.”)
[{‘entity_group’: ‘PER’, ‘score’: np.float32(0.99960065),’word’: ‘Neil Armstrong’,
‘start’: 36, ‘end’: 50},
{‘entity_group’: ‘LOC’, ‘score’: np.float32(0.82190216), ‘word’: ‘Moon’,
‘start’: 84, ‘end’: 88},
{‘entity_group’: ‘ORG’, ‘score’: np.float32(0.9842771), ‘word’: ‘NASA’,
‘start’: 109, ‘end’: 113},
{‘entity_group’: ‘MISC’, ‘score’: np.float32(0.8394754), ‘word’: ‘As’,
‘start’: 114, ‘end’: 116}]
Resumen
Posiblemente una de las tareas más utilizadas, el resumen nos permite reducir un texto, manteniendo su esencia y partes importantes. Resumamos esta página de Wikipedia sobre Transformers.
resumen = canalización (“resumen”) resumen (“”” En el aprendizaje profundo, el transformador es una arquitectura de red neuronal artificial basada en el mecanismo de atención de múltiples cabezas, en el que el texto se convierte en representaciones numéricas llamadas tokens, y cada token se convierte en un vector mediante una búsqueda en una tabla de incrustación de palabras.[1] En cada capa, cada token se contextualiza dentro del alcance de la ventana de contexto con otros tokens (desenmascarados) a través de un mecanismo de atención paralelo de múltiples cabezales, lo que permite amplificar la señal de los tokens clave y disminuir los tokens menos importantes. Los transformadores tienen la ventaja de no tener unidades recurrentes, por lo que requieren menos tiempo de entrenamiento que las arquitecturas neuronales recurrentes (RNN) anteriores, como la memoria a corto plazo (LSTM).[2] Se han adoptado ampliamente variaciones posteriores para entrenar modelos de lenguaje grandes (LLM) en conjuntos de datos (lenguaje) grandes.[3]
“””)
[{‘summary_text’:
‘ In deep learning, the transformer is an artificial neural network architecture
based on the multi-head attention mechanism . Transformerers have the advantage of
having no recurrent units, therefore requiring less training time than earlier
recurrent neural architectures (RNNs) such as long short-term memory (LSTM)’}]
¡Excelente!
Reconocimiento de imágenes
Hay otras tareas más complejas, como el reconocimiento de imágenes. Y tan fácil de usar como los demás.
image_classifier = canalización( task=”image-classification”, model=”google/vit-base-patch16-224″ ) resultado = image_classifier( “https://images.unsplash.com/photo-1689009480504-6420452a7e8e?q=80&w=687&auto=forma t&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D” ) imprimir(resultado)
[{‘label’: ‘Yorkshire terrier’, ‘score’: 0.9792122840881348},
{‘label’: ‘Australian terrier’, ‘score’: 0.00648861238732934},
{‘label’: ‘silky terrier, Sydney silky’, ‘score’: 0.00571345305070281},
{‘label’: ‘Norfolk terrier’, ‘score’: 0.0013639888493344188},
{‘label’: ‘Norwich terrier’, ‘score’: 0.0010306559270247817}]
Entonces, con este par de ejemplos, es fácil ver lo sencillo que es utilizar la biblioteca Transformers para realizar diferentes tareas con muy poco código.
Concluyendo
¿Qué pasa si resumimos nuestro conocimiento aplicándolo en un pequeño proyecto práctico?
Creemos una aplicación Streamlit simple que pueda leer un currículum y devolver el análisis de sentimientos y clasificar el tono del texto como [“Senior”, “Junior”, “Trainee”, “Blue-collar”, “White-collar”, “Self-employed”]
En el siguiente código:
Importe los paquetes Cree título y subtítulo de la página Agregue un área de entrada de texto Tokenice el texto y divídalo en fragmentos para la tarea del transformador. Ver la lista de modelos [4]. importar streamlit como st importar antorcha desde transformadores importar tubería desde transformadores importar AutoTokenizer desde langchain_community.document_loaders importar PyPDFLoader desde langchain.text_splitter importar RecursiveCharacterTextSplitter st.title(“Análisis de sentimiento del currículum”) st.caption(“Comprobación del sentimiento y el tono del lenguaje de su currículum”) # Agregar área de texto de entrada text = st.text_area(“Ingrese el texto de su currículum aquí”) # 1. Cargue el tokenizador que desee model_checkpoint = “bert-base-uncased” tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) # 2. Tokenice el texto sin relleno ni truncamiento # Devolvemos tensores o listas para dividirlos manualmente tokens = tokenizer(text, add_special_tokens=False, return_tensors=”pt”)[“input_ids”][0]
# 3. Crear una instancia del divisor de texto con un tamaño de fragmento de 500 palabras y una superposición de 100 palabras para que no se pierda el contexto text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100) # 4. Dividir en fragmentos para una recuperación eficiente de fragmentos = text_splitter.split_documents(text) # 5. Volver a convertir en cadenas o agregar tokens especiales para la entrada del modelo decoded_chunks = []
para trozos en trozos: # Esto añade [CLS] y [SEP] y vuelve a convertir a un formato que le guste al modelo final_input = tokenizer.prepare_for_model(chunk.tolist(), add_special_tokens=True) decoded_chunks.append(tokenizer.decode(final_input[‘input_ids’])) st.write(f”Creado {len(decoded_chunks)} fragmentos.”)
A continuación, iniciaremos la tubería del transformador para:
Realice el análisis de sentimiento y devuelva el% de confianza. Clasifica el tono del texto y devuelve el % de confianza. # Inicializar canal de análisis de sentimiento sentiment_pipeline = pipeline(“sentiment-analysis”) # Realizar análisis de sentimiento if st.button(“Analyze”): col1, col2 = st.columns(2) con col1: # Análisis de sentimiento sentimiento = sentiment_pipeline(decoded_chunks)[0]
st.write(f”Sentimiento: {sentimiento[‘label’]}”) st.write(f”Confianza: {100*sentimiento[‘score’]:.1f}%”) con col2: # Categorizar tono tone_pipeline = pipeline(“clasificación de disparo cero”, modelo = ‘facebook/bart-large-mnli’, candidato_labels=[“Senior”, “Junior”, “Trainee”, “Blue-collar”, “White-collar”, “Self-employed”]) tono = tone_pipeline(fragmentos_decodificados)[0]
st.write(f”Tono: {tono[‘labels’][0]}”) st.write(f”Confianza: {100*tono[‘scores’][0]:.1f}%”)
Aquí está la captura de pantalla.
Antes de ir
Las tuberías de Transformers Hugging Face (HF) son realmente un punto de inflexión para los profesionales de datos. Proporcionan una forma increíblemente optimizada de abordar tareas complejas de aprendizaje automático, como la generación de texto o la segmentación de imágenes, utilizando solo unas pocas líneas de código.
HF ya ha hecho el trabajo pesado al integrar una lógica de modelo sofisticada en métodos simples e intuitivos.
Esto desvía el enfoque de la codificación de bajo nivel y nos permite centrarnos en lo que realmente importa: usar nuestra creatividad para crear aplicaciones impactantes del mundo real.
Si te gustó este contenido, encuentra más sobre mí en mi sitio web.
https://gustavorsantos.me
Repositorio GitHub
https://github.com/gurezende/Resume-Sentiment-Analysis
Referencias
[1. Transformers package] https://huggingface.co/docs/transformers/index
[2. Transformers Pipelines] https://huggingface.co/docs/transformers/pipeline_tutorial
[3. Pipelines Examples] https://huggingface.co/learn/llm-course/chapter1/3#summarization
[3. HF Models] huggingface.co/models