Entrenamiento de datos multilabel débilmente etiquetados con Google BERT: clasificación de documentos de Westeros y Essos
Conocimiento de fondo: Conocimiento de Google BERT, NLP
Introducción
Documentos sobre clasificación de texto en el contexto de NLP en su mayoría lidiar con datos claramente etiquetados que solo se ajustan a una clase (problemas de clasificación de una sola etiqueta ; por ejemplo, una imagen contiene un gato o no).
En el mundo real, sin embargo, a menudo tenemos que trabaje con datos no solo con 1) etiquetas débiles debido a la falta de mano de obra para etiquetar datos. Sino también 2) nuestros problemas son generalmente etiquetas múltiples : un solo documento tiene varias etiquetas. (p. ej., una imagen puede tener gatos Y perros)
Además, los analistas de diferentes compañías a menudo tienen categorías altamente relevantes internamente altamente específicas que no se pueden ubicar de forma ordenada según API comerciales de NLP como Google Cloud ML.
Soy parte de un equipo que trabaja en un proyecto de PNL para hacer una clasificación de texto de varias etiquetas para una institución financiera.
Estamos bajo un NDA, por lo que no puedo revelar en qué compañía estamos trabajando o la tarea específica. Así que usando nombres de la serie de libros de George RR Martin para anonimizar mis datos y, con suerte, darte un divertido ejemplo de aprendizaje.
Voy a dar una descripción del problema en términos del universo ficticio “Una canción de fuego y hielo”. Continúa para discutir un poco más sobre cómo utilicé Google BERT para resolver este problema.
Descripción del problema
Imagina el siguiente escenario:
Eres un mago de la tierra de Asshai armado con un espejo negro mágico llamado “computadora”. La Mano del Rey Viserys II Targaryen te ha contactado para ayudarlo. Todos los días, él y su personal reciben documentos que cubren entidades políticas de todo Westeros y Essos; la mayoría de los documentos son de fuentes oficiales de la corte y comparten un formato similar. Pero también forman parte de otras fuentes, como cartas e informes de espías.
En última instancia, lo que quiere la Mano del Rey es tomar decisiones preservar la paz y la prosperidad en el reino. Pero él y su personal pasan mucho tiempo teniendo que leer todos estos documentos y compilarlos en informes.
La Mano y su personal han clasificado y validado muestra de los documentos para usted. Mientras que con su computadora. Puede obtener mágicamente una muestra de documentos aunque sin etiquetas de espíritus con nombres como “Guugle”, “B’eeng” y “Yaa Huu”. También tiene acceso a un golem con el nombre de BERT. Que ha recibido capacitación en más de 6 millones de formas de comunicación.
La Mano del Rey le da una cantidad determinada de tiempo para crear un modelo prototipo. Posteriormente, comparará sus resultados en datos “en vivo”. En comparación con el rendimiento de su propio personal en esos mismos datos.
Básicamente tenemos:
- Una lista de diferentes etiquetas que los documentos cubren. (Grandes casas, ciudades libres, otras facciones) Los documentos pueden cubrir más de una categoría.
- Una pequeña muestra validada por humanos (King’s Hand y su personal)
- Acceso a documentos adicionales sin etiquetas (datos en línea sobre el raspado)
Realizaremos una prueba contra la Mano del Rey y su personal en datos “en vivo”.
Google Bert: Enfoque de aprendizaje automático
Con suerte, lo anterior le dio una metáfora divertida para nuestro problema que no fue demasiado confuso.
Así es como abordé el problema:
Siguiendo las pautas de Andrew Ng, idealmente deberíamos tener conjuntos de datos de tren, validación y prueba.
En la mejor situación posible, los conjuntos de datos deben ser similares entre sí. Pero si esto no es posible, al menos deberíamos tener el conjunto de validación similar al conjunto de prueba. Luego entrenamos y ajustamos los hiperparámetros en el conjunto de trenes para obtener buenos resultados al evaluar el conjunto de validación antes de finalmente aplicarlo al conjunto de prueba.
En este caso, eliminé una gran cantidad de documentos de la web. Usando la presencia de las palabras clave en los titulares como etiquetas débiles.
Así, por ejemplo, cuando estaba raspando documentos para la Casa Stark. Busqué en Bing el dominio: “varys.com” intitle: “brandon stark” y lo traté como una etiqueta débil para “House Stark”.
Luego extraje las cadenas de todos los archivos HTML y PDF que raspé y puse todo en un gran marco de datos. Después de eso, afiné BERT en el texto raspado para tener un modelo BERT afinado en el lenguaje “político”.
Primer enfoque :
Mi enfoque inicial en este punto era simplemente ingresar y tokenizar documentos enteros en BERT como un todo, dejándolo truncar documentos que terminan con más de 512 toques de WordPiece y etiquetar ese documento con mi única etiqueta débil.
Recuerda que debido a la forma en que raspado, solo hay una etiqueta débil por documento. Por ejemplo, “House Stark”, pero el documento en sí también podría mencionar “House Lannister”, etc.
Básicamente, tenía pocas muestras positivas por etiqueta en comparación con las muestras “negativas”. Muchas de las cuales en realidad eran falsas negativas. De los 10,000 documentos, tal vez 100 fueron etiquetados como “Casa Stark” de mis datos raspados. Pero en realidad, muchos de los 9,900 restantes también podrían contener información sobre “Casa Stark”.
Para lidiar con esto, en mi función de pérdida ( sigmoide con pérdida de entropía cruzada binaria ) Aumenté el peso para muestras positivas. (pos_weight en PyTorch). Intuitivamente, estoy tratando cada muestra positiva con una importancia de * pos_weight. Con un pos_weight de 10, contaría que las muestras positivas valían 10 veces más que las muestras “negativas”.
La métrica que optimicé fue la puntuación F1 combinada, con una ligera preferencia por la recuperación.
En este enfoque, obtuve aproximadamente un puntaje de F1 de 0.35 en el conjunto de validación: el puntaje de F1 se ubicó alrededor de 5 a 6 épocas de entrenamiento del clasificador de Google BERT.
Esto no fue muy bueno y fue peor que el aprendizaje automático clásico. algoritmos que usaban el tf-idf que usaba mi compañero.
Segundo enfoque :
En este punto, pensé que los textos truncados y la falta de etiquetas eran una gran limitación para utilizar Google BERT.
Creé una secuencia de comandos de reglas de spaCy con palabras clave coincidentes para cada etiqueta. p.ej. Para la Casa Stark, incluiría “Stark, winterfell, bran stark, robb Stark” y así sucesivamente. Siempre que el comparador seleccionara una de las palabras clave, marcaría ese artículo con un “1” para esa categoría (por ejemplo, “Casa Stark”).
Luego, dividí los textos en párrafos individuales en función de la cadena en bruto ” n “y ejecuté el guión de matcher de reglas en los textos divididos.
Finalmente ajusté mi modelo Google BERT para esta tarea de clasificación específica.
En esencia, estaba entrenando el modelo Google BERT en las palabras clave, y esperaba que obtendría más información contextual más allá de lo que ofrecían las palabras clave.
Con este enfoque, mi puntaje de F1 alcanzó alrededor de 0,50 en el conjunto de validación. Que era más alto que un modelo de “solo reglas de juego”.
¡Así que el modelo recogió información adicional!
Definitivamente había margen de mejora: en este punto, solo comparé el rendimiento de mi amigo con un enfoque basado en tf-idf. Y francamente es una pérdida de tiempo entrenar al Google BERT para obtener valores. Que coinciden con un modelo más antiguo y computacionalmente más barato.
En este punto, pensé que para captar características humanas adicionales que no se podían capturar con el igualador de reglas. Solo tendría que ajustar el modelo en el el conjunto de validación. Puesto que fue etiquetado a mano por expertos humanos.
Lo hice, y cuando finalmente llegó para la prueba de prueba de concepto, el propio Match de Google BERT produjo puntajes de F1 que superaron el de tf- Modelo IDF (alrededor de 0,68).
Sin embargo, al final, encontramos que un conjunto del modelo Google BERT y del modelo tf-idf produjo una puntuación de F1 aún mejor.
Puntos de aprendizaje y avenidas para mejora
Mirando blogs y foros de discusión, y Hablando con algunos de mis compañeros. Encuentro que las personas están usando Google BERT de diferentes maneras. Este documento describe las dos divisiones principales: 1) tomando los pesos “congelados” como una característica que se usará en una tarea posterior, 2) descongelando los pesos y ajustándolos para esa tarea específica. En el documento, se representan como hielo (❄️) ️y fuego (🔥) respectivamente.
Elegí ir con fuego 🔥, y creo que el papel demuestra que el BERT parece funcionar mejor con este enfoque que con el hielo ice️ enfoque. Sospecho que esto podría deberse a la capacidad de Google BERT para detectar el contexto que se pierde con el enfoque approach️.
En la tarea anterior, al ajustar el modelo en el conjunto de validación. También simplemente usé el método BERT predeterminado del texto ingresado. Es decir, se trataba de un texto truncado que iba más allá de la longitud máxima de la secuencia.
Un documento reciente chino mencionó que el hecho de tomar una combinación del principio del documento y el final del documento ayudó a mejorar Sus puntajes para documentos largos. Planeo implementar esto en futuras versiones del modelo.
También he estado estudiando Snorkel que te ayuda a crear un modelo probabilístico para etiquetas débiles siempre que tengas algo de “oro”. estándar “, datos validados por humanos para compararlos con.
Conclusión
En el mundo real, los datos etiquetados son un lujo, y hay que pensar en formas de trabajar con etiquetas débiles para tareas de aprendizaje automático. Entrenar un modelo BERT en un lenguaje específico de dominio. Luego ajustarlo en “etiquetas débiles” basadas en palabras clave. Y finalmente finalmente hacerlo en un conjunto de datos validado por humanos parece producir resultados que superan los modelos tradicionales de PNL.