Контекстуализированные тематические модели (CTM) представляют собой семейство тематических моделей, которые используют предварительно обученные представления языка (например, BERT) для поддержки тематических моделирования. Смотрите документы для деталей:
Наша новая семейная моделирование темы поддерживает множество различных языков (то есть, которая поддерживается моделями HuggingFace) и поставляется в двух версиях: CombiNedTM сочетает в себе контекстуальные встраивания со старым старым пакетом слов, чтобы сделать более последовательные темы; ZeroShottm - это идеальная тематическая модель для задачи, в которой у вас могут быть отсутствующие слова в тестовых данных, а также, если они обучены многоязычным вставкам, наследует свойство многоязычной тематической модели!
Большим преимуществом является то, что вы можете использовать различные встроения для CTMS. Таким образом, когда выходит новый метод внедрения, вы можете использовать его в коде и улучшить свои результаты. Мы больше не ограничены луком.
У нас также есть Китти! Новый подмодуль, который можно использовать для создания классификатора человека в петле, для быстрого классификации ваших документов и создания именованных кластеров.
Вы можете посмотреть на наш средний пост в блоге или начать с одного из наших учебных пособий Colab:
| Имя | Связь |
|---|---|
| Комбинированный TM на данных Википедии (Prepsroc+Saving+Viz) (стабильный V2.3.0 ) | |
| Моделирование с нулевым выстрелом по кроссовым темам (Prepsroc+Viz) (стабильный V2.3.0 ) | |
| Китти: Человек в классификаторе петли (использование высокого уровня) (стабильный v2.2.0 ) | |
| SuperCTM и β-CTM (использование высокого уровня) (стабильный V2.2.0 ) |
Важно : если вы хотите использовать CUDA, вам нужно установить правильную версию систем CUDA, которая соответствует вашему распространению, см. Pytorch.
Установите пакет с помощью PIP
pip install -U contextualized_topic_modelsВажным аспектом следует учитывать, какую сеть вы хотите использовать: та, которая объединяет контекстуализированные встраивания и лук (комбинированное т.
Но помните, что вы можете сделать с нулевым выстрелом кросс-лингальные темы моделировать только с помощью модели ZeroShottm.
Контекстуализированные тематические модели также поддерживают надзор (SuperCTM). Вы можете прочитать больше об этом в документации.
У нас также есть Китти: утилита, которую вы можете использовать, чтобы сделать более простого человека в классификации цикла ваших документов. Это может быть очень полезно для фильтрации документов. Он также работает в кросс-лингвальной настройке, и, таким образом, вы сможете отфильтровать документы на языке, которого вы не знаете!
Если вы найдете это полезным, вы можете процитировать следующие документы :)
ZeroShottm
@inproceedings {bianchi-etal-2021-cross,
title = "Crosslyling Contextailized Topic Models с нулевым обучением",
Автор = "Бьянки, Федерико и Террагни, Сильвия и Хови, Дирк и
Сопла, Дебора и Ферсини, Элизабетта ",
BookTitle = "Труды 16 -й конференции Европейской главы Ассоциации вычислительной лингвистики: основной том",
месяц = апрель,
Год = "2021",
Address = "Online",
Publisher = "Ассоциация вычислительной лингвистики",
url = "https://www.aclweb.org/anthology/2021.eacl-main.143",
Страницы = "1676-1683",
}
Комбинированная
@inproceedings {bianchi-etal-2021-pre,
title = «Предварительное обучение-горячая тема: контекстуализированные встроенные документы улучшают когерентность темы»,
Автор = "Бьянки, Федерико и
Террагни, Сильвия и
Хови, Дирк ",
BookTitle = «Труды 59 -го ежегодного собрания Ассоциации вычислительной лингвистики и 11 -й Международной совместной конференции по обработке естественного языка (том 2: короткие документы)»,
месяц = август,
Год = "2021",
Address = "Online",
Publisher = "Ассоциация вычислительной лингвистики",
url = "https://aclanthology.org/2021.acl-hort.96",
doi = "10.18653/v1/2021.Acl-short.96",
страницы = "759--766",
}
В некоторых из приведенных ниже примеров используются многоязычная модель встраивания paraphrase-multilingual-mpnet-base-v2 . Это означает, что представления, которые вы собираетесь использовать, являются mudlingual. Однако вам может понадобиться более широкий охват языков или только один конкретный язык. Обратитесь к странице в документации, чтобы увидеть, как выбрать модель для другого языка. В этом случае вы можете проверить Sbert, чтобы найти идеальную модель для использования.
Здесь вы можете прочитать больше о языковом специфическом и мулингальном.
Вы обязательно должны взглянуть на документацию, чтобы лучше понять, как работают эти тематические модели.
Вот как вы можете использовать Combinedtm. Это стандартная тематическая модель, которая также использует контекстуализированные встраивания. Хорошая вещь о комбинированном ткани заключается в том, что она делает вашу тему гораздо более последовательной (см. Документ https://arxiv.org/abs/2004.03974). n_components = 50 Указывает количество тем.
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 )Усовершенствованные примечания: комбинированный TM объединяет лук с Sbert, процесс, который, по -видимому, увеличивает когерентность прогнозируемых тем (https://arxiv.org/pdf/2004.03974.pdf).
Наш ZeroShottm может быть использован для моделирования темы с нулевым выстрелом. Он может обрабатывать слова, которые не используются на этапе обучения. Более интересно, что эта модель может быть использована для кросс-лингального моделирования темы (см. Следующие разделы)! См. Документ (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 )Как видите, API высокого уровня для обработки текста довольно прост в использовании; TEXT_FOR_BERT следует использовать для перехода к модели A Список документов, которые не предварительно обработаны. Вместо этого, toxt_for_bow вы должны передать предварительно обработанный текст, используемый для построения лука.
Усовершенствованные примечания: Таким образом, Sbert может использовать всю информацию в тексте для создания представлений.
Как только модель обучена, очень легко получить темы!
ctm . get_topics ()Метод преобразования будет позаботиться о большинстве вещей для вас, например, генерации соответствующего лука, рассматривая только те слова, которые модель видела на тренировке. Тем не менее, это связано с некоторыми ударами при работе с ZeroShottm, как мы будем в следующем разделе.
Вы можете, однако, вручную загрузить встраиваемые вторжения, если хотите (см. Дополнительную часть этой документации).
Если вы используете CombiNedTM , вам нужно включить тестовый текст для лука:
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 documentЕсли вы используете ZeroShottm , вам не нужно использовать testing_text_for_bow, потому что если вы используете другой набор тестовых документов, это создаст лук другого размера. Таким образом, лучший способ сделать это - передать только текст, который будет приведен при вводе в контексу -модель:
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 )После того, как вы обучили модель ZeroShottm с многоязычными встроениями, вы можете использовать этот простой конвейер, чтобы предсказать темы для документов на другом языке (если этот язык покрывается перефразом-мультингвизионным-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 documentУсовершенствованные примечания: Нам не нужно проходить испанское мешок с словом: мешок с словами двух языков не будет сопоставим! Мы передаем его в модель по причинам совместимости, но вы не можете получить результаты модели (то есть прогнозируемый лук обученного языка) и сравнить ее с языком тестирования.
Вам нужен быстрый сценарий для запуска трубопровода предварительной обработки? Мы вас прикрыли! Загрузите свои документы, а затем используйте наш класс простого процесса процесса. Он автоматически фильтровал бы нечастые слова и удаляет пустые документы после обучения. Метод предварительной обработки вернет предварительно обработанные и неподготовленные документы. Как правило, мы используем непредоставленный для BERT и предварительно обработаны для пакета слова.
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 ()У вас есть пользовательские встроения и вы хотите использовать их для более быстрых результатов? Просто дай их Китти!
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 ())Примечание. Пользовательские встроения должны быть Numpy.arrays.
Этот пакет был создан с помощью шаблона проекта CookieCutter и проекта Audreyr/CookieCutter-Pypackage. Чтобы облегчить использование библиотеки, мы также включили пакет RBO, все права защищены автору этого пакета.
Помните, что это инструмент исследования :)