Los modelos de temas contextualizados (CTM) son una familia de modelos temáticos que utilizan representaciones previamente capacitadas del lenguaje (por ejemplo, BERT) para apoyar el modelado de temas. Vea los documentos para más detalles:
Nuestra nueva familia de modelado de temas admite muchos idiomas diferentes (es decir, el que respalda los modelos Huggingface) y viene en dos versiones: CombinedTM combina incrustaciones contextuales con la buena bolsa de palabras viejas para hacer temas más coherentes; Zeroshottm es el modelo de tema perfecto para la tarea en la que puede tener palabras faltantes en los datos de la prueba y también, si se capacita con incrustaciones multilingües, ¡hereda la propiedad de ser un modelo de tema multilingüe!
La gran ventaja es que puede usar diferentes incrustaciones para CTMS. Por lo tanto, cuando sale un nuevo método de incrustación, puede usarlo en el código y mejorar sus resultados. Ya no estamos limitados por el arco.
¡También tenemos a Kitty! Un nuevo submódulo que se puede utilizar para crear un clasificador humano en el bucle para clasificar rápidamente sus documentos y crear grupos nombrados.
Puede ver nuestra publicación de blog mediana o comenzar desde uno de nuestros tutoriales de Colab:
| Nombre | Enlace |
|---|---|
| TM combinado en datos de Wikipedia (Preproc+Saving+Viz) (estable v2.3.0 ) | |
| Modelado de temas interlingües de shot cero (Preprocs+Viz) (estable v2.3.0 ) | |
| Kitty: clasificador humano en el bucle (uso de alto nivel) (estable v2.2.0 ) | |
| SuperCTM y β-CTM (uso de alto nivel) (estable V2.2.0 ) |
IMPORTANTE : Si desea usar CUDA, necesita instalar la versión correcta de los sistemas CUDA que coincida con su distribución, consulte Pytorch.
Instale el paquete con PIP
pip install -U contextualized_topic_modelsUn aspecto importante a tener en cuenta es qué red desea usar: la que combina incrustaciones contextualizadas y el arco (combinado) o el que solo usa incrustaciones contextualizadas (Zeroshottm)
Pero recuerde que puede hacer modelos de temas interlingües de cero disparos solo con el modelo Zeroshottm.
Los modelos de temas contextualizados también admiten Supervisión (SuperCTM). Puede leer más sobre esto en la documentación.
También tenemos Kitty: una utilidad que puede usar para hacer una clasificación humana más simple en el bucle de sus documentos. Esto puede ser muy útil para el filtrado de documentos. ¡También funciona en un entorno interlingüístico y, por lo tanto, puede filtrar documentos en un idioma que no conoce!
Si encuentra esto útil, puede citar los siguientes documentos :)
Zeroshottm
@InProcedings {Bianchi-Etal-2021-Cross,
title = "modelos de temas contextualizados interlingües con aprendizaje de disparo cero",
autor = "Bianchi, Federico y Terragni, Silvia y Hovy, Dirk y
Nozza, Debora y Fersini, Elisabetta ",
booktitle = "Actas de la 16ª Conferencia del Capítulo Europeo de la Asociación de Lingüística Computacional: Volumen principal",
mes = APR,
año = "2021",
dirección = "en línea",
Publisher = "Asociación de Lingüística Computacional",
url = "https://www.aclweb.org/anthology/2021.eacl-main.143",
páginas = "1676--1683",
}
CombinedTM
@InproCedings {bianchi-etal-2021-pre,
title = "La capacitación previa es un tema candente: las incrustaciones de documentos contextualizados mejoran la coherencia del tema",
autor = "Bianchi, Federico y
Terragni, Silvia y
Hovy, dirk ",
booktitle = "Actas de la 59ª Reunión Anual de la Asociación de Lingüística Computacional y la 11ª Conferencia Internacional Conjunta sobre Procesamiento del Lenguaje Natural (Volumen 2: Documentos cortos)",
mes = agosto,
año = "2021",
dirección = "en línea",
Publisher = "Asociación de Lingüística Computacional",
url = "https://aclanthology.org/2021.acl-short.96",
doi = "10.18653/v1/2021.acl-short.96",
páginas = "759--766",
}
Algunos de los ejemplos a continuación utilizan un modelo multilingüe de incrustación paraphrase-multilingual-mpnet-base-v2 . Esto significa que las representaciones que va a usar son mutlilingües. Sin embargo, es posible que necesite una cobertura más amplia de idiomas o solo un idioma específico. Consulte la página de la documentación para ver cómo elegir un modelo para otro idioma. En ese caso, puede consultar a Sbert para encontrar el modelo perfecto para usar.
Aquí, puede leer más sobre el lenguaje específico y el mulitlingual.
Definitivamente debe echar un vistazo a la documentación para comprender mejor cómo funcionan estos modelos de temas.
Así es como puedes usar el CombinedTM. Este es un modelo de tema estándar que también utiliza incrustaciones contextualizadas. Lo bueno de CombinedTM es que hace que su tema sea mucho más coherente (consulte el documento https://arxiv.org/abs/2004.03974). N_Components = 50 especifica el número de temas.
from contextualized_topic_models . models . ctm import CombinedTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
qt = TopicModelDataPreparation ( "all-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = list_of_unpreprocessed_documents , text_for_bow = list_of_preprocessed_documents )
ctm = CombinedTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 ) # 50 topics
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )Notas avanzadas: TM combinado combina el arco con Sbert, un proceso que parece aumentar la coherencia de los temas predichos (https://arxiv.org/pdf/2004.03974.pdf).
Nuestro Zeroshottm se puede usar para el modelado de temas de disparo cero. Puede manejar palabras que no se usan durante la fase de entrenamiento. Más interesante, este modelo se puede utilizar para el modelado de temas interlingües (consulte las siguientes secciones). Vea el documento (https://www.aclweb.org/anthology/2021.eacl-main.143)
from contextualized_topic_models . models . ctm import ZeroShotTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
text_for_contextual = [
"hello, this is unpreprocessed text you can give to the model" ,
"have fun with our topic model" ,
]
text_for_bow = [
"hello unpreprocessed give model" ,
"fun topic model" ,
]
qt = TopicModelDataPreparation ( "paraphrase-multilingual-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = text_for_contextual , text_for_bow = text_for_bow )
ctm = ZeroShotTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 )
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )Como puede ver, la API de alto nivel para manejar el texto es bastante fácil de usar; text_for_bert debe usarse para pasar al modelo una lista de documentos que no están preprocesados. En su lugar, para text_for_bow debe pasar el texto preprocesado utilizado para construir el arco.
Notas avanzadas: de esta manera, Sbert puede usar toda la información en el texto para generar las representaciones.
Una vez que el modelo está entrenado, ¡es muy fácil obtener los temas!
ctm . get_topics ()El método de transformación se encargará de la mayoría de las cosas para usted, por ejemplo, la generación de un arco correspondiente al considerar solo las palabras que el modelo ha visto en el entrenamiento. Sin embargo, esto viene con algunos baches cuando se trata de Zeroshottm, como lo veremos en la siguiente sección.
Sin embargo, puede cargar manualmente los incrustaciones si lo desea (consulte la parte avanzada de esta documentación).
Si usa CombinedTM, debe incluir el texto de prueba para el arco:
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual , text_for_bow = testing_text_for_bow )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each documentSi usa Zeroshottm , no necesita usar Testing_Text_For_bow porque si está utilizando un conjunto diferente de documentos de prueba, esto creará un arco de un tamaño diferente. Por lo tanto, la mejor manera de hacer esto es pasar solo el texto que se dará en la entrada al modelo contexual:
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 )Una vez que haya entrenado el modelo Zeroshottm con incrustaciones multilingües, puede usar esta tubería simple para predecir los temas de documentos en un lenguaje diferente (siempre que este lenguaje esté cubierto por parafraseando-Multilingüe-MPNET-Base-V2 ).
# here we have a Spanish document
testing_text_for_contextual = [
"hola, bienvenido" ,
]
# since we are doing multilingual topic modeling, we do not need the BoW in
# ZeroShotTM when doing cross-lingual experiments (it does not make sense, since we trained with an english Bow
# to use the spanish BoW)
testing_dataset = qt . transform ( testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each documentNotas avanzadas: No necesitamos pasar la bolsa española de la palabra: ¡la bolsa de palabras de los dos idiomas no será comparable! Lo estamos pasando al modelo por razones de compatibilidad, pero no puede obtener la salida del modelo (es decir, el arco previsto del lenguaje entrenado) y compararlo con el lenguaje de prueba uno.
¿Necesita un script rápido para ejecutar la tubería de preprocesamiento? ¡Te tenemos cubierto! Cargue sus documentos y luego use nuestra clase SimpleProcessing. Filtrará automáticamente palabras poco frecuentes y eliminará documentos que están vacíos después del entrenamiento. El método de preprocesos devolverá los documentos preprocesados y no improcesados. Generalmente usamos el no prisionero para Bert y el preprocesado para la bolsa de la palabra.
from contextualized_topic_models . utils . preprocessing import WhiteSpacePreprocessing
documents = [ line . strip () for line in open ( "unpreprocessed_documents.txt" ). readlines ()]
sp = WhiteSpacePreprocessing ( documents , "english" )
preprocessed_documents , unpreprocessed_corpus , vocab , retained_indices = sp . preprocess ()¿Tiene incrustaciones personalizadas y desea usarlos para obtener resultados más rápidos? ¡Dévelos a Kitty!
from contextualized_topic_models . models . kitty_classifier import Kitty
import numpy as np
# read the training data
training_data = list ( map ( lambda x : x . strip (), open ( "train_data" ). readlines ()))
custom_embeddings = np . load ( 'custom_embeddings.npy' )
kt = Kitty ()
kt . train ( training_data , custom_embeddings = custom_embeddings , stopwords_list = [ "stopwords" ])
print ( kt . pretty_print_word_classes ())NOTA: Las integridades personalizadas deben ser Numpy.Arrays.
Este paquete fue creado con Cookiecutter y la plantilla del proyecto Audreyr/Cookiecutter-Pypackage. Para aliviar el uso de la biblioteca, también hemos incluido el paquete RBO, todos los derechos reservados al autor de ese paquete.
Recuerda que esta es una herramienta de investigación :)