使用 BerTopic 在 Python 中進行主題建模
譯文【51CTO.com快譯】通過主題建模,你可以收集非結構化數據集,分析文檔,并獲得相關和所需的信息,這些信息能幫你做出更好的決策。
執行主題建模有不同的技術(如LDA),但是在本NLP教程中,你將學習如何使用Maarten Grootendorst開發的BerTopic技術。
什么是 BerTopic?
BerTopic是一種主題建模技術,它使用轉換器(BERT嵌入)和基于類的TF-IDF來創建密集集群。它還允許您輕松地解釋和可視化生成的主題。
BerTopic算法包含三個階段:
1.嵌入文本數據(文檔):此步驟中,算法使用BERT提取文檔嵌入,也可以使用其他任何嵌入技術。
默認情況下,它使用下面的句子轉換器
- “ paraphrase-MiniLM-L6-v2” - 這是一個基于英語 BERT 的模型,專門針對語義相似性任務進行訓練。
- “ paraphrase-multilingual-MiniLM-L12-v2 ” - 這與第一個類似,一個主要區別是 xlm 模型適用于 50 多種語言。
2.Cluster文檔:使用UMAP降低嵌入的維數,使用HDBSCAN技術聚類減少嵌入并創建語義相似文檔的聚類。
3.創建主題表示:利用基于類的TF-IDF進行主題提取和精簡,提高最大邊緣關聯詞的一致性。
如何安裝 BerTopic
可以通過 pip 安裝軟件包:
pip install bertopic
如果你對可視化選項感興趣,你需要按照如下方式安裝它們。
pip install bertopic[visualization]
BerTopic支持不同的轉換器和語言后端,你可以使用它們來創建模型。你可以根據下面可用的選項安裝一個。
- pip install bertopic[天賦]
- pip install bertopic[gensim]
- pip install bertopic[spacy]
- pip install bertopic[使用]
庫
我們將使用以下庫來幫助我們加載數據并從BerTopic創建模型。
#import packages
import pandas as pd
import numpy as np
from bertopic import BERTopic
步驟1:加載數據
在本NLP教程中,我們將使用2020年東京奧運會推文,目標是創建一個模型,該模型可以根據推文的主題自動分類。
#load data
import pandas as pd
df = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/data/tokyo_2020_tweets.csv", engine='python')
# select only 6000 tweets
dfdf = df[0:6000]
注:出于計算原因,我們只選擇了6000條推文。
步驟2:創建模型
要使用BERTopic創建模型,需要將推文作為列表加載,然后將其傳遞給fit_transform方法。這個方法將做以下工作:
- 在推文集合上擬合模型;
- 生成話題;
- 返回帶有主題的推文。
# create model
model = BERTopic(verbose=True)
#convert to list
docs = df.text.to_list()
topics, probabilities = model.fit_transform(docs)
步驟3:選擇高級主題
訓練模型后,可以按降序訪問主題的大小。
model.get_topic_freq().head(11)
注:Topic -1是最大的,它指的是沒有分配給生成的任何主題的離群推文。在本例中,我們將忽略Topic -1。
步驟4:選擇一個主題
你可以選擇一個特定的主題,并得到該主題的前n個單詞和他們的c-TF-IDF分數。
model.get_topic(6)
對于這個選定的話題,常用詞是瑞典,目標,羅爾夫,瑞典人,目標,足球。很明顯,這個話題的重點是“瑞典隊的足球”。
步驟5:主題建??梢暬?/h3>
BerTopic允許您以非常類似于LDAvis的方式可視化生成的主題。這會讓你對主題的質量有更多的了解。在本文中,我們將介紹三種可視化主題的方法。
可視化的話題
visualize_topics方法可以幫助您可視化生成的主題及其大小和相應的單詞。視覺化的靈感來自于LDavis。
model.visualize_topics()
可視化術語
visualize_barchart方法將通過創建c-TF-IDF分數的條形圖來顯示選定的幾個主題術語。然后,您可以比較彼此的主題表示,并從生成的主題中獲得更多的見解。
model.visualize_barchart()
上面的圖表中,你可以看到話題4的熱門詞是proud, thank, cheer4india, cheer和congrats。
可視化主題相似性
你還可以可視化某些主題之間的相似程度。要可視化熱圖,只需調用。
model.visualize_heatmap()
在上圖中,你可以看到topic 93與topic 102相似,相似度為0.933。
主題減少
有時您可能會生成過多或過少的主題,BerTopic為您提供了一種選擇,以不同的方式控制這種行為。
(a)你可以通過設置參數nr_topics來設置你想要的主題數量。BerTopic將找到類似的主題并合并它們。
model = BERTopic(nr_topics=20)
在上面的代碼中,將要生成的主題的數量是20。
(b)另一種選擇是自動減少專題的數目。要使用這個選項,你需要在訓練模型之前將"nr_topics"設置為"auto"。
model = BERTopic(nr_topics="auto")
(c)最后一種選擇是減少模型訓練后的主題數量。這是一個很好的選擇,如果重新培訓模型將花費許多小時。
new_topics, new_probs = model.reduce_topics(docs, topics, probabilities, nr_topics=15)
在上面的示例中,在訓練模型之后,您將主題的數量減少到15個。
步驟6:做出預測
要預測新文檔的主題,需要在轉換方法上添加一個(或多個)新實例。
topics, probs = model.transform(new_docs)
步驟7:保存模型
你以使用save方法保存訓練過的模型。
model.save("my_topics_model")
步驟8:加載模型
你可以使用load方法來加載模型。
BerTopic_model = BERTopic.load("my_topics_model")
最后
在創建模型時,BerTopic提供了許多特性。例如,如果您有一個特定語言的數據集(默認情況下,它支持英語模型),您可以通過在配置模型時設置語言參數來選擇語言。
model = BERTopic(language="German")
注意:請選擇其嵌入模型存在的語言。
如果你的文檔中混合了多種語言,你可以設置language="multilingual"以支持超過50種語言。
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】