in

Modelado de temas con BERT

1W94GjvT6vBzDGY50qPHZDA
Imagen del autor.

Modelado de temas con BERT

Aprovechamiento de BERT y TF-IDF para crear temas fácilmente interpretables.

Maarten Grootendorst

Maarten Grootendorst

5 de oct de 2020·8 min de lectura

A menudo, cuando el propietario de un producto se me acerca para realizar algunos análisis basados ​​en PNL, normalmente me hacen la siguiente pregunta:

‘W¿Qué tema se puede encontrar con frecuencia en estos documentos?

Sin ninguna categoría o etiqueta, me veo obligado a buscar técnicas no supervisadas para extraer estos temas, a saber Modelado de temas.

Aunque los modelos de temas como LDA y NMF han demostrado ser buenos puntos de partida, siempre sentí que se necesitaba bastante esfuerzo mediante el ajuste de hiperparámetros para crear temas significativos.

Además, quería usar tramodelos basados ​​en nsformer como BERT ya que han mostrado resultados asombrosos en varias tareas de PNL en los últimos años. Modelos pre-entrenados son especialmente útiles ya que se supone que contienen representaciones más precisas de palabras y oraciones.

Hace unas semanas vi este gran proyecto llamado Top2Vec * que aprovechó las incrustaciones de documentos y palabras para crear temas que fueran fácilmente interpretables. Comencé a buscar en el código para generalizar Top2Vec de modo que pudiera usarse con modelos de transformadores previamente entrenados.

La gran ventaja de Doc2Vec es que las incrustaciones de documentos y palabras resultantes se incrustan conjuntamente en el mismo espacio, lo que permite que las incrustaciones de documentos se representen mediante incrustaciones de palabras cercanas. Desafortunadamente, esto resultó ser difícil ya que las incrustaciones de BERT se basan en tokens y no necesariamente ocupan el mismo espacio **.

En su lugar, decidí crear un algoritmo diferente que pudiera usar BERT y embeddings de transformadores. El resultado es BERTopic, un algoritmo para generar temas utilizando incrustaciones de última generación.

El tema principal de este artículo no será el uso de BERTopic sino un tutorial sobre cómo usar BERT para crear su propio modelo de tema.

PAPEL*: Angelov, D. (2020). Top2Vec: Representaciones distribuidas de temas. preimpresión de arXiv arXiv: 2008.09470.

NOTA**: Aunque podría hacer que ocupen el mismo espacio, el tamaño resultante de las incrustaciones de palabras es bastante grande debido a la naturaleza contextual de BERT. Además, existe la posibilidad de que las incrustaciones de oraciones o documentos resultantes degraden la calidad.

1. Datos y paquetes

Para este ejemplo, usamos el famoso 20 Newsgroups conjunto de datos que contiene aproximadamente 18000 publicaciones de grupos de noticias sobre 20 temas. Con Scikit-Learn, podemos descargar y preparar rápidamente los datos:

Si desea acelerar el entrenamiento, puede seleccionar el subconjunto train ya que disminuirá la cantidad de publicaciones que extraiga.

NOTA: Si desea aplicar el modelado de temas no en todo el documento sino en el nivel de párrafo, le sugiero que divida sus datos antes de crear las incrustaciones.

2. Incrustaciones

El primer paso que tenemos que hacer es convertir los documentos en datos numéricos. Usamos BERT para este propósito, ya que extrae diferentes incrustaciones basadas en el contexto de la palabra. No solo eso, hay muchos modelos previamente entrenados disponibles listos para ser utilizados.

La forma en que genera las incrustaciones BERT para un documento depende de usted. Sin embargo, prefiero usar el sentence-transformers package, ya que las incrustaciones resultantes han demostrado ser de alta calidad y, por lo general, funcionan bastante bien para incrustaciones a nivel de documento.

Instale el paquete con pip install sentence-transformers antes de generar las incrustaciones de documentos. Si tiene problemas para instalar este paquete, entonces vale la pena instalar Pytorch primero.

Luego, ejecute el siguiente código para transformar sus documentos en vectores de 512 dimensiones:

Estamos usando Distilbert ya que proporciona un buen equilibrio entre velocidad y rendimiento. El paquete tiene varios modelos multilingües disponibles para su uso.

NOTA: Dado que los modelos de transformadores tienen un límite de token, es posible que se produzcan algunos errores al ingresar documentos grandes. En ese caso, podría considerar dividir los documentos en párrafos.

3. Agrupación

Queremos asegurarnos de que los documentos con temas similares estén agrupados de manera que podamos encontrar los temas dentro de estos grupos. Antes de hacerlo, primero debemos reducir la dimensionalidad de las incrustaciones, ya que muchos algoritmos de agrupación manejan mal la dimensionalidad alta.

UMAP

De los pocos algoritmos de reducción de dimensionalidad, se puede decir que UMAP es el de mejor rendimiento, ya que mantiene una parte significativa de la estructura local de alta dimensión en una dimensionalidad más baja.

Instale el paquete con pip install umap-learn antes de reducir la dimensionalidad de las incrustaciones de documentos. Reducimos la dimensionalidad a 5 mientras mantenemos el tamaño del vecindario local en 15. Puede jugar con estos valores para optimizar la creación de su tema. Tenga en cuenta que una dimensionalidad demasiado baja da como resultado una pérdida de información, mientras que una dimensionalidad demasiado alta da como resultado resultados de agrupamiento más deficientes.

HDBSAN

Después de haber reducido la dimensionalidad de las incrustaciones de documentos a 5, podemos agrupar los documentos con HDBSCAN. HDBSCAN es un algoritmo basado en densidad que funciona bastante bien con UMAP ya que UMAP mantiene mucha estructura local incluso en espacios de menor dimensión. Además, HDBSCAN no fuerza los puntos de datos a los clústeres, ya que los considera valores atípicos.

Instale el paquete con pip install hdbscan luego crea los clústeres:

¡Excelente! Ahora hemos agrupado documentos similares que deberían representar los temas que los componen. Para visualizar los grupos resultantes, podemos reducir aún más la dimensionalidad a 2 y visualizar los valores atípicos como puntos grises:

1*W94GjvT6vBzDGY50qPHZDA

Temas visualizados mediante la reducción de incrustaciones de frases a un espacio bidimensional. Imagen del autor.

Es difícil visualizar los grupos individuales debido a la cantidad de temas generados (~ 55). Sin embargo, podemos ver que incluso en el espacio bidimensional se mantiene alguna estructura local.

NOTA: Puede omitir el paso de reducción de dimensionalidad si usa un algoritmo de agrupamiento que pueda manejar alta dimensionalidad como un k-Means basado en coseno.

4. Creación de temas

Lo que queremos saber de los clusters que generamos es qué hace que un clúster, según su contenido, sea diferente de otro.

¿Cómo podemos derivar temas de documentos agrupados?

Para resolver esto, se me ocurrió una variante basada en clases de TF-IDF (c-TF-IDF), eso me permitiría extraer lo que hace que cada conjunto de documentos sea único en comparación con el otro.

La intuición detrás del método es la siguiente. Cuando aplica TF-IDF como de costumbre en un conjunto de documentos, lo que está haciendo básicamente es comparar la importancia de las palabras entre documentos.

¿Qué pasa si, en cambio, tratamos todos los documentos en una sola categoría (por ejemplo, un grupo) como un solo documento y luego aplicar TF-IDF? El resultado sería un documento muy largo por categoría y la puntuación TF-IDF resultante demostraría las palabras importantes en un tema.

c-TF-IDF

Para crear esta puntuación TF-IDF basada en clases, primero debemos crear un documento único para cada grupo de documentos:

Luego, aplicamos el TF-IDF basado en clases:

TF-IDF basado en clases uniendo documentos dentro de una clase. Imagen del autor.

Donde el frecuencia de cada palabra t se extrae para cada clase i y dividido por el número total de palabras w. Esta acción puede verse como una forma de regularización de palabras frecuentes en la clase. A continuación, el número total, no unido, de documentos m se divide por la frecuencia total de palabras t en todas las clases n.

Ahora, tenemos un solo importancia valor para cada palabra en un grupo que se puede utilizar para crear el tema. Si tomamos las 10 palabras más importantes de cada grupo, obtendríamos una buena representación de un grupo y, por lo tanto, de un tema.

Representación del tema

Para crear una representación de tema, tomamos las 20 palabras principales por tema en función de sus puntajes c-TF-IDF. Cuanto mayor sea el puntaje, más representativo debe ser de su tema, ya que el puntaje es un proxy de la densidad de información.

Nosotros podemos usar topic_sizes para ver qué tan frecuentes son ciertos temas:

1*KaTFpM8TFgP44HMyVbKvng

Imagen del autor.

El nombre del tema-1 se refiere a todos los documentos que no tenían ningún tema asignado. Lo bueno de HDBSCAN es que no todos los documentos están forzados a un determinado grupo. Si no se pudo encontrar ningún clúster, entonces es simplemente un valor atípico.

Podemos ver que los temas 7, 43, 12 y 41 son los grupos más grandes que pudimos crear. Para ver las palabras que pertenecen a esos temas, simplemente podemos usar el diccionariotop_n_words para acceder a estos temas:

Imagen del autor.

Mirando los cuatro temas más grandes, diría que estos muy bien parecen representar temas fácilmente interpretables.

Puedo ver los deportes, las computadoras, el espacio y la religión como temas claros que se extrajeron de los datos.

5. Reducción de temas

Existe la posibilidad de que, según el conjunto de datos, obtenga cientos de temas que se crearon. Puede modificar los parámetros de HDBSCAN de modo que obtenga menos temas a través de su min_cluster_size parámetro, pero no le permite especificar el número exacto de clústeres.

Un truco ingenioso que Top2Vec estaba usando es la capacidad de reducir la cantidad de temas fusionando los vectores de temas que eran más similares entre sí.

Podemos usar una técnica similar al comparando los vectores c-TF-IDF entre temas, unir los más parecidos, y finalmente recalcular los vectores c-TF-IDF para actualizar la representación de nuestros temas:

Arriba, tomamos el tema menos común y lo fusionamos con el tema más similar. Al repetir esto 19 veces más, redujimos el número de temas de 56 para 36!

NOTA: Podemos omitir la parte de recálculo de esta canalización para acelerar el paso de reducción del tema. Sin embargo, es más preciso volver a calcular los vectores c-TF-IDF ya que representaría mejor el contenido recién generado de los temas. Puede jugar con esto, por ejemplo, actualizando cada n pasos para acelerar el proceso y aún así tener buenas representaciones de temas.

PROPINA: Puede usar el método descrito en este artículo (o simplemente usar BERTopic) para crear también incrustaciones a nivel de oración. La principal ventaja de esto es la posibilidad de ver la distribución de temas dentro de un solo documento.

¡Gracias por leer!

Si, como yo, te apasiona la inteligencia artificial, la ciencia de datos o la psicología, no dudes en agregarme a LinkedIn o seguirme en Gorjeo.

Todos los ejemplos y el código de este artículo se pueden encontrar aquí:

MaartenGr / BERTopic

BERTopic es una técnica de modelado de temas que aprovecha las incrustaciones de BERT y c-TF-IDF para crear grupos densos que permiten …

github.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

vhdx iso disco duro

Cómo convertir fácilmente el disco duro virtual VHDX a ISO

Ciudad de chicago