
¿Bertópica es una técnica de modelado de temas que aprovecha? Transformadores y C-TF-IDF para crear grupos densos que permiten temas fácilmente interpretables mientras mantienen palabras importantes en las descripciones del tema.
Bertópica admite todo tipo de técnicas de modelado de temas:
| Guiado | Supervisado | Semi-supervisado |
| Manual | Distribuciones de tope múltiples | Jerárquico |
| Basado en clases | Dinámica | En línea/incremental |
| Multimodal | Múltiple | Generación de texto/LLM |
| Cero-shot (¡nuevo!) | Fusionar modelos (¡nuevos!) | Palabras de semillas (¡nuevas!) |
Las publicaciones medianas correspondientes se pueden encontrar aquí, aquí y aquí. Para una descripción más detallada, puede leer el documento o ver una breve descripción general.
La instalación, con transformadores de oraciones, se puede hacer utilizando PYPI:
pip install bertopicSi desea instalar Bertópica con otros modelos de incrustación, puede elegir uno de los siguientes:
# Choose an embedding backend
pip install bertopic[flair,gensim,spacy,use]
# Topic modeling with images
pip install bertopic[vision]Para obtener una descripción general en profundidad de las características de Bertópica, puede consultar la documentación completa o puede seguir con uno de los ejemplos a continuación:
| Nombre | Enlace |
|---|---|
| Comience aquí: las mejores prácticas en Bertópica | |
| ? ¡Nuevo! - Modelado de temas sobre grandes datos (aceleración de GPU) | |
| ? ¡Nuevo! - Modelado de temas con Llama 2? | |
| ? ¡Nuevo! - Modelado de temas con LLM cuantizados | |
| Modelado de temas con Bertópica | |
| (Personalizado) Incrustar modelos en Bertópica | |
| Personalización avanzada en Bertópica | |
| (Semi-) Modelado de temas supervisado con Bertópica | |
| Modelado de temas dinámicos con los tweets de Trump | |
| Modelado de temas ARXIV Resúmenes |
Comenzamos extrayendo temas del conocido conjunto de datos de 20 grupos de noticias que contienen documentos en inglés:
from bertopic import BERTopic
from sklearn . datasets import fetch_20newsgroups
docs = fetch_20newsgroups ( subset = 'all' , remove = ( 'headers' , 'footers' , 'quotes' ))[ 'data' ]
topic_model = BERTopic ()
topics , probs = topic_model . fit_transform ( docs )Después de generar temas y sus probabilidades, podemos acceder a todos los temas junto con sus representaciones de temas:
> >> topic_model . get_topic_info ()
Topic Count Name
- 1 4630 - 1_ can_your_will_any
0 693 49_ windows_drive_dos_file
1 466 32_j esus_bible_christian_faith
2 441 2_ space_launch_orbit_lunar
3 381 22_ key_encryption_keys_encrypted
... El tema -1 se refiere a todos los documentos atípicos y generalmente se ignoran. Cada palabra en un tema describe el tema subyacente de ese tema y puede usarse para interpretar ese tema. A continuación, echemos un vistazo al tema más frecuente que se generó:
> >> topic_model . get_topic ( 0 )
[( 'windows' , 0.006152228076250982 ),
( 'drive' , 0.004982897610645755 ),
( 'dos' , 0.004845038866360651 ),
( 'file' , 0.004140142872194834 ),
( 'disk' , 0.004131678774810884 ),
( 'mac' , 0.003624848635985097 ),
( 'memory' , 0.0034840976976789903 ),
( 'software' , 0.0034415334250699077 ),
( 'email' , 0.0034239554442333257 ),
( 'pc' , 0.003047105930670237 )] Usando .get_document_info , también podemos extraer información sobre un nivel de documento, como sus temas, probabilidades correspondientes, si son documentos representativos para un tema, etc.:
> >> topic_model . get_document_info ( docs )
Document Topic Name Top_n_words Probability ...
I am sure some bashers of Pens ... 0 0_ game_team_games_season game - team - games ... 0.200010 ...
My brother is in the market for ... - 1 - 1_ can_your_will_any can - your - will ... 0.420668 ...
Finally you said what you dream ... - 1 - 1_ can_your_will_any can - your - will ... 0.807259 ...
Think ! It ' s the SCSI card doing ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.071746 ...
1 ) I have an old Jasmine drive ... 49 49_ windows_drive_dos_file windows - drive - docs ... 0.038983 ... Tip : Use BERTopic(language="multilingual") para seleccionar un modelo que admita más de 50 idiomas.
En Bertópica, hay una serie de representaciones de temas diferentes que podemos elegir. Todos son bastante diferentes entre sí y dan perspectivas y variaciones interesantes de las representaciones de temas. Un gran comienzo es KeyBERTInspired , que para muchos usuarios aumenta la coherencia y reduce las palabras de parada de las representaciones de temas resultantes:
from bertopic . representation import KeyBERTInspired
# Fine-tune your topic representations
representation_model = KeyBERTInspired ()
topic_model = BERTopic ( representation_model = representation_model )Sin embargo, es posible que desee usar algo más poderoso para describir sus grupos. Incluso puede usar ChatGPT u otros modelos de OpenAI para generar etiquetas, resúmenes, frases, palabras clave y más:
import openai
from bertopic . representation import OpenAI
# Fine-tune topic representations with GPT
client = openai . OpenAI ( api_key = "sk-..." )
representation_model = OpenAI ( client , model = "gpt-3.5-turbo" , chat = True )
topic_model = BERTopic ( representation_model = representation_model ) Tip : en lugar de iterar sobre todas estas diferentes representaciones de temas, puede modelarlas simultáneamente con representaciones de temas de múltiples aspectos en Bertópica.
Después de haber entrenado a nuestro modelo Bertópico, podemos pasar por cientos de temas para obtener una buena comprensión de los temas que se extrajeron. Sin embargo, eso lleva bastante tiempo y carece de una representación global. En cambio, podemos usar una de las muchas opciones de visualización en Bertópica. Por ejemplo, podemos visualizar los temas que se generaron de manera muy similar a LDAVIS:
topic_model . visualize_topics ()
De manera predeterminada, los pasos principales para el modelado de temas con BerTopic son los transformadores de oraciones, UMAP, HDBSCAN y C-TF-IDF en secuencia. Sin embargo, supone cierta independencia entre estos pasos, lo que hace que Bertópica sea bastante modular. En otras palabras, Bertopic no solo le permite construir su propio modelo de tema, sino explorar varias técnicas de modelado de temas además de su modelo de tema personalizado:
Puede intercambiar cualquiera de estos modelos o incluso eliminarlos por completo. Los siguientes pasos son completamente modulares:
Bertópica tiene muchas funciones que rápidamente pueden volverse abrumadoras. Para aliviar este problema, encontrará una descripción general de todos los métodos y una breve descripción de su propósito.
A continuación, encontrará una descripción general de las funciones comunes en Bertópica.
| Método | Código |
|---|---|
| Ajustar el modelo | .fit(docs) |
| Ajustar el modelo y predecir documentos | .fit_transform(docs) |
| Predecir nuevos documentos | .transform([new_doc]) |
| Acceder al tema único | .get_topic(topic=12) |
| Acceda a todos los temas | .get_topics() |
| Obtener frek de temas | .get_topic_freq() |
| Obtenga toda la información del tema | .get_topic_info() |
| Obtenga toda la información del documento | .get_document_info(docs) |
| Obtener documentos representativos por tema | .get_representative_docs() |
| Actualizar la representación del tema | .update_topics(docs, n_gram_range=(1, 3)) |
| Generar etiquetas de temas | .generate_topic_labels() |
| Establecer etiquetas de temas | .set_topic_labels(my_custom_labels) |
| Temas de combinación | .merge_topics(docs, topics_to_merge) |
| Reducir NR de temas | .reduce_topics(docs, nr_topics=30) |
| Reducir los valores atípicos | .reduce_outliers(docs, topics) |
| Encontrar temas | .find_topics("vehicle") |
| Guardar modelo | .save("my_model", serialization="safetensors") |
| Modelo de carga | BERTopic.load("my_model") |
| Obtener parámetros | .get_params() |
Después de haber capacitado a su modelo Bertópico, se guardan varios atributos dentro de su modelo. Estos atributos, en parte, se refieren a cómo la información del modelo se almacena en un estimador durante el ajuste. Los atributos que ve a continuación terminan en _ y son atributos públicos que pueden usarse para acceder a la información del modelo.
| Atributo | Descripción |
|---|---|
.topics_ | Los temas que se generan para cada documento después de capacitar o actualizar el modelo de tema. |
.probabilities_ | Las probabilidades que se generan para cada documento si se usa HDBSCAN. |
.topic_sizes_ | El tamaño de cada tema |
.topic_mapper_ | Una clase para rastrear temas y sus mapeos cada vez que se fusionan/reducen. |
.topic_representations_ | Los principales términos n por tema y sus respectivos valores C-TF-IDF. |
.c_tf_idf_ | La matriz de término de tema calculada a través de C-TF-IDF. |
.topic_aspects_ | Los diferentes aspectos o representaciones de cada tema. |
.topic_labels_ | Las etiquetas predeterminadas para cada tema. |
.custom_labels_ | Etiquetas personalizadas para cada tema generado a través de .set_topic_labels . |
.topic_embeddings_ | Se utilizó los incrustaciones para cada tema si se utilizó embedding_model . |
.representative_docs_ | Se utiliza los documentos representativos para cada tema si se usa HDBSCAN. |
Hay muchos casos de uso diferentes en los que se puede usar el modelado de temas. Como tal, se han desarrollado varias variaciones de Bertópica de tal manera que un paquete se puede usar en muchos casos de uso.
| Método | Código |
|---|---|
| Aproximación de distribución de temas | .approximate_distribution(docs) |
| Modelado de temas en línea | .partial_fit(doc) |
| Modelado de temas semi-supervisado | .fit(docs, y=y) |
| Modelado de temas supervisado | .fit(docs, y=y) |
| Modelado de temas manuales | .fit(docs, y=y) |
| Modelado de temas multimodal | .fit(docs, images=images) |
| Modelado de temas por clase | .topics_per_class(docs, classes) |
| Modelado de temas dinámicos | .topics_over_time(docs, timestamps) |
| Modelado de temas jerárquicos | .hierarchical_topics(docs) |
| Modelado de temas guiados | BERTopic(seed_topic_list=seed_topic_list) |
| Modelado de temas de disparo cero | BERTopic(zeroshot_topic_list=zeroshot_topic_list) |
| Fusionar múltiples modelos | BERTopic.merge_models([topic_model_1, topic_model_2]) |
Evaluar los modelos de temas puede ser bastante difícil debido a la naturaleza algo subjetiva de la evaluación. Visualizar diferentes aspectos del modelo de tema ayuda a comprender el modelo y facilita el ajuste del modelo a su gusto.
| Método | Código |
|---|---|
| Visualizar temas | .visualize_topics() |
| Visualizar documentos | .visualize_documents() |
| Visualizar la jerarquía de documentos | .visualize_hierarchical_documents() |
| Visualizar la jerarquía de temas | .visualize_hierarchy() |
| Visualizar el árbol de temas | .get_topic_tree(hierarchical_topics) |
| Visualizar los términos del tema | .visualize_barchart() |
| Visualizar la similitud del tema | .visualize_heatmap() |
| Visualizar la disminución del puntaje de término | .visualize_term_rank() |
| Visualizar la distribución de probabilidad del tema | .visualize_distribution(probs[0]) |
| Visualizar temas con el tiempo | .visualize_topics_over_time(topics_over_time) |
| Visualizar temas por clase | .visualize_topics_per_class(topics_per_class) |
Para citar el papel bertópico, utilice la siguiente referencia de Bibtex:
@article{grootendorst2022bertopic,
title={BERTopic: Neural topic modeling with a class-based TF-IDF procedure},
author={Grootendorst, Maarten},
journal={arXiv preprint arXiv:2203.05794},
year={2022}
}