Maestría en Visual BERT | Desata el poder de tu primer encuentro

Maestría en Visual BERT | Potencia tu primer encuentro

Introducción

Google dice que BERT es un gran avance, una de las mayores mejoras en la historia de la búsqueda. Ayuda a Google a entender lo que las personas buscan de manera más precisa. El dominio de BERT de Visual BERT es especial porque puede entender las palabras en una oración al mirar las palabras antes y después de ellas. Esto le ayuda a comprender mejor el significado de las oraciones. Es como cuando entendemos una oración considerando todas sus palabras.

BERT ayuda a las computadoras a comprender el significado del texto en diferentes situaciones. Por ejemplo, puede ayudar a clasificar texto, entender los sentimientos de las personas en un mensaje, responder preguntas reconocidas y los nombres de cosas o personas. El uso de BERT en la búsqueda de Google muestra cómo los modelos de lenguaje han avanzado mucho y hacen nuestras interacciones con las computadoras más naturales y útiles.

Objetivos de Aprendizaje

  • Aprender qué significa BERT (Bidirectional Encoder Representations from Transformers).
  • Tener conocimiento de cómo se entrena BERT con una gran cantidad de datos de texto.
  • Comprender el concepto de pre-entrenamiento y cómo ayuda a BERT a desarrollar la comprensión del lenguaje.
  • Reconocer que BERT considera tanto el contexto izquierdo como el derecho de las palabras en una oración.
  • Utilizar BERT en los motores de búsqueda para entender mejor las consultas de los usuarios.
  • Explorar el modelo de lenguaje enmascarado y las tareas de predicción de la siguiente oración utilizadas en el entrenamiento de BERT.

Este artículo fue publicado como parte del Data Science Blogathon.

¿Qué es BERT?

BERT significa Bidirectional Encoder Representations from Transformers. Es un modelo informático especial que ayuda a las computadoras a comprender y procesar el lenguaje humano. Es una herramienta inteligente que puede leer y entender texto como el nuestro.

Lo que hace especial a BERT es que puede entender el significado de las palabras en una oración al mirar las palabras antes y después de ellas. Es como leer una oración y comprender su significado considerando todas las palabras juntas.

BERT se entrena utilizando texto de libros, artículos y sitios web. Esto le ayuda a aprender patrones y conexiones entre las palabras. Entonces, cuando le damos a BERT una oración, puede averiguar el significado y el contexto de cada palabra en función de su entrenamiento.

Esta poderosa capacidad de BERT para comprender el lenguaje se utiliza de muchas formas diferentes. También puede ayudar con tareas como la clasificación de texto, la comprensión del sentimiento o la emoción en un mensaje y responder preguntas.

Conjunto de datos SST2

Enlace del conjunto de datos: https://github.com/clairett/pytorch-sentiment-classification/tree/master/data/SST2

En este artículo, utilizaremos el conjunto de datos mencionado anteriormente, que consiste en oraciones extraídas de reseñas de películas. El valor 1 representa una etiqueta positiva y el 0 representa una etiqueta negativa para cada oración.

Al entrenar un modelo con este conjunto de datos, podemos enseñarle al modelo a clasificar nuevas oraciones como positivas o negativas en función de los patrones que aprende de los datos etiquetados.

Modelos: Clasificación del Sentimiento de las Oraciones

Nuestro objetivo es crear un modelo de análisis de sentimiento para clasificar oraciones como positivas o negativas.

Al combinar el poder de las capacidades de procesamiento de oraciones de DistilBERT con las habilidades de clasificación de la regresión logística, podemos construir un modelo eficiente y preciso de análisis de sentimiento.

Generar incrustaciones de oraciones con DistilBERT: Utilizar el modelo pre-entrenado de DistilBERT para generar incrustaciones de oraciones para 2,000 oraciones.

Estas incrustaciones de oraciones capturan información importante sobre el significado y el contexto de las oraciones.

Realizar la división de entrenamiento/prueba: dividir el conjunto de datos en conjuntos de entrenamiento y prueba.

Utilice el conjunto de entrenamiento para entrenar el modelo de regresión logística, mientras que el conjunto de prueba se utilizará para la evaluación.

Entrenar el modelo de regresión logística: utilizar el conjunto de entrenamiento para entrenar el modelo de regresión logística utilizando scikit-learn.

El modelo de regresión logística aprende a clasificar las oraciones como positivas o negativas en función de las incrustaciones de oraciones.

Siguiendo este plan, podemos aprovechar el poder de DistilBERT para generar incrustaciones de oraciones informativas y luego entrenar un modelo de regresión logística para realizar la clasificación de sentimientos. El paso de evaluación nos permite evaluar el rendimiento del modelo en la predicción del sentimiento de nuevas oraciones.

¿Cómo se calcula una única predicción?

A continuación se explica cómo un modelo entrenado calcula su predicción utilizando la oración de ejemplo “una reflexión visualmente impresionante sobre el amor”:

Tokenización: Cada palabra de la frase se divide en componentes más pequeños conocidos como tokens. El tokenizador también inserta tokens específicos como ‘CLS’ al principio y ‘SEP’ al final.

Conversión de token a ID: El tokenizador luego reemplaza cada token con su ID correspondiente de la tabla de incrustación. La tabla de incrustación es un componente que viene con el modelo entrenado y asigna tokens a sus representaciones numéricas.

La forma de entrada: Después de tokenizar y convertir, DistilBERT transforma la oración de entrada en la forma adecuada para su procesamiento. Representa la oración como una secuencia de IDs de tokens con la adición de tokens únicos.

Tenga en cuenta que puede realizar todos estos pasos, incluida la tokenización y la conversión de ID, utilizando una sola línea de código con el tokenizador proporcionado por la biblioteca.

Después de estos pasos de preprocesamiento, la oración de entrada se prepara en un formato que se puede alimentar al modelo DistilBERT para su procesamiento y predicción.

Flujo a través de DistilBERT

De hecho, pasar el vector de entrada a través de DistilBERT sigue un proceso similar al de BERT. La salida consistiría en un vector para cada token de entrada, donde cada vector contiene 768 números (floats).

En el caso de la clasificación de oraciones, nos enfocamos solo en el primer vector, que corresponde al token [CLS]. El token [CLS] está diseñado para capturar el contexto general de toda la secuencia, por lo que usar solo el primer vector (el token [CLS]) para la clasificación de oraciones en modelos como BERT funciona. La ubicación de este token, su función en el preentrenamiento y la técnica de agrupamiento contribuyen a su capacidad para codificar información significativa para tareas de clasificación. Además, utilizar solo el token [CLS] reduce la complejidad computacional y los requisitos de memoria, al tiempo que permite que el modelo realice predicciones precisas para una amplia gama de tareas de clasificación. Este vector se pasa como entrada al modelo de regresión logística.

El papel del modelo de regresión logística es clasificar este vector en función de lo que aprendió durante su fase de entrenamiento. Podemos visualizar el cálculo de la predicción de la siguiente manera:

  • El modelo de regresión logística toma el vector de entrada (asociado con el token [CLS]) como su entrada.
  • Aplica un conjunto de pesos aprendidos a cada uno de los 768 números en el vector.
  • Los números ponderados se suman y se agrega un término de sesgo adicional.

Finalmente, el resultado de la suma se pasa a través de una función sigmoide para producir el puntaje de predicción.

La fase de entrenamiento del modelo de regresión logística y el código completo para todo el proceso se discutirán en la próxima sección.

Implementación desde cero

Esta sección destacará el código para entrenar este modelo de clasificación de oraciones.

Cargar la biblioteca

Comencemos importando las herramientas del oficio. Podemos usar df.head() para ver las primeras cinco filas del dataframe y ver cómo se ve los datos.

Importar el modelo y el tokenizer pre-entrenados de DistilBERT

Vamos a tokenizar el conjunto de datos, pero con una pequeña diferencia del ejemplo anterior. En lugar de tokenizar y procesar una oración a la vez, procesaremos todas las oraciones juntas como un lote.

model_class, tokenizer_class, pretrained_weights = (ppb.DistilBertModel, ppb.DistilBertTokenizer,
                                                     'distilbert-base-uncased')
                                                     
                                                     

## ¿Quieres BERT en lugar de distilBERT? 
##Descomenta la siguiente línea:
#model_class, tokenizer_class, pretrained_weights = (ppb.BertModel, ppb.BertTokenizer, 
                                                            'bert-base-uncased')
                                                            
                                                            
                                                            
                                                            
# Cargar el modelo/tokenizer pre-entrenado
tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)

Por ejemplo, supongamos que tenemos un conjunto de datos de reseñas de películas y queremos tokenizar y procesar 2,000 reseñas al mismo tiempo. Usaremos un tokenizer llamado DistilBertTokenizer, una herramienta diseñada específicamente para tokenizar texto utilizando el modelo DistilBERT.

El tokenizer toma todo el conjunto de oraciones y realiza la tokenización, que implica dividir las oraciones en unidades más pequeñas llamadas tokens. También agrega tokens especiales, como [CLS] al principio y [SEP] al final de cada oración.

Tokenización

Como resultado, cada oración se convierte en una lista de ids. El conjunto de datos consiste en una lista de listas (o una serie/dataframe de pandas). Las frases más cortas deben rellenarse con el id de token 0 para que todos los vectores tengan la misma longitud. Ahora tenemos una matriz/tensor que se puede proporcionar a BERT después del relleno:

tokenized = df[0].apply((lambda x: tokenizer.
            encode(x, add_special_tokens=True)))

Procesamiento con DistilBERT

La matriz de tokens rellenados se convierte ahora en un tensor de entrada, que enviamos a DistilBERT.

input_ids = torch.tensor(np.array(padded))

with torch.no_grad():
    last_hidden_states = model(input_ids)

Las salidas de DistilBERT se almacenan en last_hidden_states después de completar este paso. Dado que solo consideramos 2000 instancias en nuestro escenario, esto será de tamaño 2000 (el número de tokens en la secuencia más larga de los 2000 ejemplos) y 768 (el número de unidades ocultas en el modelo DistilBERT).

Desempaquetando el tensor de salida de BERT

Vamos a inspeccionar las dimensiones del tensor de salida 3D y extraerlo. Suponiendo que tienes la variable last_hidden_states, que contiene el tensor de salida de DistilBERT.

Recapitulando el recorrido de una oración

Cada fila tiene un texto adjunto de nuestro conjunto de datos. Para revisar el flujo de procesamiento de la primera oración, imagínalo de la siguiente manera:

Recortando la parte importante

Sólo elegimos ese recorte del cubo para la categorización de las oraciones, ya que sólo nos interesa el resultado de BERT para el token [CLS].

Para obtener el tensor 2D que nos interesa de ese tensor 3D, lo recortamos de la siguiente manera:

 # Recortar la salida para la primera posición de todas las secuencias, tomar todas las salidas de unidades ocultas
características = last_hidden_states[0][:,0,:].numpy()

Finalmente, la característica es una matriz 2D numpy que incluye todas las incrustaciones de las oraciones de nuestro conjunto de datos.

Aplicar regresión logística

Ya tenemos el conjunto de datos necesario para entrenar nuestro modelo de regresión logística ahora que tenemos la salida de BERT. Las 768 columnas en nuestro primer conjunto de datos comprenden las características y las etiquetas.

Podemos definir y entrenar nuestro modelo de regresión logística en el conjunto de datos después de hacer la división convencional de entrenamiento/prueba del aprendizaje automático.

etiquetas = df[1]
características_entrenamiento, características_prueba, etiquetas_entrenamiento, etiquetas_prueba = train_test_split(características, etiquetas)

Usando esto, el conjunto de datos se divide en conjuntos de entrenamiento y prueba:

Luego, se entrena el modelo de regresión logística utilizando el conjunto de entrenamiento.

lr_clf = LogisticRegression()
lr_clf.fit(características_entrenamiento, etiquetas_entrenamiento)

Después de entrenar el modelo, podemos comparar sus resultados con el conjunto de prueba:

lr_clf.score(características_prueba, etiquetas_prueba)

Lo que le da al modelo una precisión de aproximadamente el 81%.

Conclusión

En conclusión, BERT es un poderoso modelo de lenguaje que ayuda a las computadoras a entender mejor el lenguaje humano. Al considerar el contexto de las palabras y entrenar en grandes cantidades de datos de texto, BERT puede capturar el significado y mejorar la comprensión del lenguaje.

Puntos clave

  • BERT es un modelo de lenguaje que ayuda a las computadoras a entender mejor el lenguaje humano.
  • Considera el contexto de las palabras en una oración, lo que lo hace más inteligente para entender el significado.
  • BERT se entrena en gran cantidad de datos de texto para aprender patrones de lenguaje.
  • Se puede ajustar finamente para tareas específicas como la clasificación de texto o la respuesta a preguntas.
  • BERT mejora los resultados de búsqueda y la comprensión del lenguaje en aplicaciones.
  • Maneja palabras desconocidas dividiéndolas en partes más pequeñas.
  • Se utiliza TensorFlow y PyTorch con BERT.

BERT ha mejorado aplicaciones como los motores de búsqueda y la clasificación de texto, haciéndolos más inteligentes y útiles. En general, BERT es un paso significativo para hacer que las computadoras comprendan el lenguaje humano de manera más efectiva.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Aprendizaje Automático

Anunciando mejoras en la extracción de tablas con Amazon Textract

Amazon Textract es un servicio de aprendizaje automático (ML) que extrae automáticamente texto, escritura a mano y da...

Inteligencia Artificial

Conoce al Creador Estudiante de Robótica presenta la Silla de Ruedas Autónoma con NVIDIA Jetson

Con la ayuda de la IA, los robots, los tractores y los cochecitos de bebé – incluso los parques de patinaje ...

Inteligencia Artificial

Conoce AudioLDM 2 Un marco de trabajo de IA único para la generación de audio que combina habla, música y efectos de sonido

En un mundo cada vez más dependiente de los conceptos de Inteligencia Artificial y Aprendizaje Profundo, el ámbito de...

Inteligencia Artificial

Deci AI presenta DeciDiffusion 1.0 un modelo de difusión latente de texto a imagen de 820 millones de parámetros y 3 veces más rápido que la difusión estable.

Definir el problema La generación de imágenes a partir de texto ha sido durante mucho tiempo un desafío en inteligenc...

Inteligencia Artificial

Donde las rocas y la IA chocan La intersección de la mineralogía y la visión por computadora de cero disparos

Los minerales son sustancias inorgánicas de origen natural con una composición química y una estructura cristalina de...