
O Bertopic é uma técnica de modelagem de tópicos que aproveita? Transformers e C-TF-IDF para criar clusters densos, permitindo tópicos facilmente interpretáveis, mantendo palavras importantes nas descrições de tópicos.
O Bertopic suporta todos os tipos de técnicas de modelagem de tópicos:
| Guiado | Supervisionado | Semi-supervisionado |
| Manual | Distribuições multi-tópicas | Hierárquico |
| Baseada em classe | Dinâmico | Online/incremental |
| Multimodal | Multi-aspecto | Geração de texto/llm |
| Zero-shot (novo!) | Modelos de mesclagem (novo!) | Palavras de sementes (novo!) |
Postagens médias correspondentes podem ser encontradas aqui, aqui e aqui. Para uma visão geral mais detalhada, você pode ler o artigo ou ver uma breve visão geral.
A instalação, com transformadores de frases, pode ser feita usando Pypi:
pip install bertopicSe você deseja instalar o Bertopic com outros modelos de incorporação, poderá escolher um dos seguintes:
# Choose an embedding backend
pip install bertopic[flair,gensim,spacy,use]
# Topic modeling with images
pip install bertopic[vision]Para uma visão geral aprofundada dos recursos do Bertopic, você pode verificar a documentação completa ou acompanhar um dos exemplos abaixo:
| Nome | Link |
|---|---|
| Comece aqui - práticas recomendadas em bertopic | |
| ? Novo! - Modelagem de tópicos em dados grandes (aceleração da GPU) | |
| ? Novo! - Modelagem de tópicos com lhama 2? | |
| ? Novo! - Modelagem de tópicos com LLMs quantizados | |
| Modelagem de tópicos com bertopic | |
| (Personalizado) Modelos de incorporação em bertopic | |
| Personalização avançada em bertopic | |
| Modelagem de tópicos (semi-) supervisionada com bertopic | |
| Modelagem de tópicos dinâmicos com os tweets de Trump | |
| Modelagem de tópicos Abstracts Arxiv |
Começamos extraindo tópicos do conhecido conjunto de dados de 20 grupos de notícias contendo documentos em 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 )Depois de gerar tópicos e suas probabilidades, podemos acessar todos os tópicos, juntamente com suas representações de tópicos:
> >> 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
... O tópico -1 refere -se a todos os documentos externos e normalmente é ignorado. Cada palavra em um tópico descreve o tema subjacente desse tópico e pode ser usado para interpretar esse tópico. Em seguida, vamos dar uma olhada no tópico mais frequente que foi gerado:
> >> 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 , também podemos extrair informações em um nível de documento, como seus tópicos correspondentes, probabilidades, sejam eles documentos representativos para um tópico, 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 selecionar um modelo que suporta mais de 50 idiomas.
No Bertopic, existem várias representações de tópicos diferentes que podemos escolher. Eles são todos bem diferentes um do outro e oferecem perspectivas e variações interessantes de representações de tópicos. Um ótimo começo é KeyBERTInspired , que para muitos usuários aumenta a coerência e reduz as palavras de parada das representações de tópicos resultantes:
from bertopic . representation import KeyBERTInspired
# Fine-tune your topic representations
representation_model = KeyBERTInspired ()
topic_model = BERTopic ( representation_model = representation_model )No entanto, você pode querer usar algo mais poderoso para descrever seus clusters. Você pode até usar o ChatGPT ou outros modelos do OpenAI para gerar rótulos, resumos, frases, palavras -chave e muito mais:
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 : em vez de iterar sobre todas essas diferentes representações de tópicos, você pode modelá-las simultaneamente com representações de tópicos de várias áreas no Bertopic.
Depois de treinar nosso modelo bertópico, podemos passar de maneira iterativa por centenas de tópicos para obter uma boa compreensão dos tópicos que foram extraídos. No entanto, isso leva algum tempo e carece de uma representação global. Em vez disso, podemos usar uma das muitas opções de visualização no Bertopic. Por exemplo, podemos visualizar os tópicos que foram gerados de uma maneira muito semelhante ao LDAVIS:
topic_model . visualize_topics ()
Por padrão, as principais etapas para modelagem de tópicos com o Bertopic são os transformadores de frases, UMAP, HDBSCAN e C-TF-IDF são executados em sequência. No entanto, assume alguma independência entre essas etapas, o que torna o bertópico bastante modular. Em outras palavras, o Bertópico não apenas permite criar seu próprio modelo de tópico, mas também explorar várias técnicas de modelagem de tópicos sobre o seu modelo de tópico personalizado:
Você pode trocar qualquer um desses modelos ou até removê -los completamente. As etapas a seguir são completamente modulares:
O Bertopic tem muitas funções que rapidamente podem se tornar esmagadoras. Para aliviar esse problema, você encontrará uma visão geral de todos os métodos e uma breve descrição de seu objetivo.
Abaixo, você encontrará uma visão geral das funções comuns no Bertopic.
| Método | Código |
|---|---|
| Ajuste o modelo | .fit(docs) |
| Ajuste o modelo e preveja documentos | .fit_transform(docs) |
| Prever novos documentos | .transform([new_doc]) |
| Acesse o único tópico | .get_topic(topic=12) |
| Acesse todos os tópicos | .get_topics() |
| Obtenha tópico freq | .get_topic_freq() |
| Obtenha todas as informações do tópico | .get_topic_info() |
| Obtenha todas as informações do documento | .get_document_info(docs) |
| Obtenha documentos representativos por tópico | .get_representative_docs() |
| Atualizar representação do tópico | .update_topics(docs, n_gram_range=(1, 3)) |
| Gerar rótulos de tópicos | .generate_topic_labels() |
| Definir rótulos de tópicos | .set_topic_labels(my_custom_labels) |
| Mesclar tópicos | .merge_topics(docs, topics_to_merge) |
| Reduza a NR de tópicos | .reduce_topics(docs, nr_topics=30) |
| Reduzir outliers | .reduce_outliers(docs, topics) |
| Encontre tópicos | .find_topics("vehicle") |
| Salvar modelo | .save("my_model", serialization="safetensors") |
| Modelo de carga | BERTopic.load("my_model") |
| Obtenha parâmetros | .get_params() |
Depois de treinar seu modelo bertópico, vários atributos são salvos em seu modelo. Esses atributos, em parte, referem -se a como as informações do modelo são armazenadas em um estimador durante o ajuste. Os atributos que você vê abaixo acabam em _ e são atributos públicos que podem ser usados para acessar informações do modelo.
| Atributo | Descrição |
|---|---|
.topics_ | Os tópicos gerados para cada documento após treinar ou atualizar o modelo de tópico. |
.probabilities_ | As probabilidades geradas para cada documento se hdbscan for usado. |
.topic_sizes_ | O tamanho de cada tópico |
.topic_mapper_ | Uma aula para rastrear tópicos e seus mapeamentos sempre que forem mesclados/reduzidos. |
.topic_representations_ | Os principais termos por tópico e seus respectivos valores C-TF-IDF. |
.c_tf_idf_ | A matriz de termo de tópico, calculada através do c-tf-IDF. |
.topic_aspects_ | Os diferentes aspectos, ou representações, de cada tópico. |
.topic_labels_ | Os rótulos padrão para cada tópico. |
.custom_labels_ | Etiquetas personalizadas para cada tópico, conforme gerado através do .set_topic_labels . |
.topic_embeddings_ | As incorporações para cada tópico se embedding_model foram usadas. |
.representative_docs_ | Os documentos representativos para cada tópico se hdbscan for usado. |
Existem muitos casos de uso diferentes em que a modelagem de tópicos pode ser usada. Como tal, várias variações de bertopic foram desenvolvidas de modo que um pacote possa ser usado em muitos casos de uso.
| Método | Código |
|---|---|
| Aproximação da distribuição de tópicos | .approximate_distribution(docs) |
| Modelagem de tópicos on -line | .partial_fit(doc) |
| Modelagem de tópicos semi-supervisionada | .fit(docs, y=y) |
| Modelagem de tópicos supervisionados | .fit(docs, y=y) |
| Modelagem de tópicos manuais | .fit(docs, y=y) |
| Modelagem de tópicos multimodais | .fit(docs, images=images) |
| Modelagem de tópicos por classe | .topics_per_class(docs, classes) |
| Modelagem de tópicos dinâmicos | .topics_over_time(docs, timestamps) |
| Modelagem de tópicos hierárquicos | .hierarchical_topics(docs) |
| Modelagem de tópicos guiados | BERTopic(seed_topic_list=seed_topic_list) |
| Modelagem de tópicos com tiro zero | BERTopic(zeroshot_topic_list=zeroshot_topic_list) |
| Mesclar vários modelos | BERTopic.merge_models([topic_model_1, topic_model_2]) |
A avaliação de modelos de tópicos pode ser bastante difícil devido à natureza um tanto subjetiva da avaliação. A visualização de diferentes aspectos do modelo de tópico ajuda a entender o modelo e facilita o ajuste do modelo ao seu gosto.
| Método | Código |
|---|---|
| Visualize tópicos | .visualize_topics() |
| Visualize documentos | .visualize_documents() |
| Visualize a hierarquia de documentos | .visualize_hierarchical_documents() |
| Visualize a hierarquia de tópicos | .visualize_hierarchy() |
| Visualize a árvore de tópicos | .get_topic_tree(hierarchical_topics) |
| Visualize os termos do tópico | .visualize_barchart() |
| Visualize a similaridade do tópico | .visualize_heatmap() |
| Visualize o declínio da pontuação do termo | .visualize_term_rank() |
| Visualize a distribuição de probabilidade de tópico | .visualize_distribution(probs[0]) |
| Visualize tópicos ao longo do tempo | .visualize_topics_over_time(topics_over_time) |
| Visualize tópicos por classe | .visualize_topics_per_class(topics_per_class) |
Para citar o papel bertópico, use a seguinte referência 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}
}