在NLP學習中,常常用到LDA主題模型對文本進行分類,可視化經常用到的代碼有
import pyLDAvis
import pyLDAvis.sklearnpanel = pyLDAvis.sklearn.prepare(lda, tf_idf, tf_idf_vectorizer)
pyLDAvis.save_html(panel, 'lda_visualization.html')
pyLDAvis.display(panel)
-
import pyLDAvis
- 這行代碼導入了?
pyLDAvis
?庫,這是一個Python庫,用于交互式可視化主題模型的結果,如LDA(Latent Dirichlet Allocation)模型。
- 這行代碼導入了?
-
import pyLDAvis.sklearn
- 這行代碼從?
pyLDAvis
?庫中導入了?sklearn
?模塊。這個模塊提供了與scikit-learn庫(一個廣泛使用的Python機器學習庫)集成的工具,使得?pyLDAvis
?可以與scikit-learn的模型和數據格式兼容。
- 這行代碼從?
-
panel = pyLDAvis.sklearn.prepare(lda, tf_idf, tf_idf_vectorizer)
- 這行代碼使用?
pyLDAvis.sklearn.prepare
?函數來準備數據,以便于可視化。它需要三個參數:lda
: 一個已經訓練好的LDA模型實例。tf_idf
: 一個稀疏矩陣,表示文檔-詞項矩陣(Term Frequency-Inverse Document Frequency),通常是通過?sklearn.feature_extraction.text.TfidfVectorizer
?轉換得到的。tf_idf_vectorizer
: 用于創建?tf_idf
?矩陣的向量化器,它包含了詞匯表等信息。
- 函數返回一個?
pyLDAvis
?面板對象,這個對象包含了所有需要進行可視化的數據。
- 這行代碼使用?
-
pyLDAvis.save_html(panel, 'lda_visualization.html')
- 這行代碼將?
pyLDAvis
?面板對象保存為一個HTML文件。這個HTML文件可以被任何現代瀏覽器打開,用于展示LDA模型的交互式可視化。文件名是?'lda_visualization.html'
。
- 這行代碼將?
-
pyLDAvis.display(panel)
- 這行代碼使用?
pyLDAvis.display
?函數在Jupyter筆記本中直接顯示LDA模型的交互式可視化。如果你在Jupyter環境中工作,這將非常有用,因為它允許你直接在筆記本中查看結果,而不需要打開一個單獨的HTML文件。
- 這行代碼使用?
總的來說,這些代碼是用來準備和展示一個LDA模型的交互式主題模型可視化的。這有助于理解模型如何將文檔分配到不同的主題上,以及每個主題中包含哪些詞項。
但是經常遇到no module named pyLDAvis.sklearn
?解決辦法如下:
錯誤1:使用了import pyLDAvis.sklearn,提示沒有模塊no module named 'pyldavis.sklearn'默認安裝 pyLDAvis==3.4.1,最后降級處理,解決方式:
?pip install pyLDAvis==3.2.2
錯誤2: return vectorizer.get_feature_names()
AttributeError: 'CountVectorizer' object has no attribute 'get_feature_names'
解決方式:進入相關的代碼文件中,找到對應位置,修改為:return vectorizer.get_feature_names_out()
錯誤3:
pyLDAvis\_prepare.py", line 247, in _topic_info
? ? default_term_info = default_term_info.sort_values(
TypeError: drop() takes from 1 to 2 positional arguments but 3 were given
解決方式:
修改_prepare.py文件 ,
將248行代碼改為drop(‘saliency’, 1) ==> drop(‘saliency’, axis=1)
我到這一步就可以展示了,但是如果還有問題的話,可以參照錯誤4
錯誤4:OSError: [Errno 22] Invalid argument: 'https://cdn.jsdelivr.net/gh/bmabey/py
修改報錯處,即_display.py的227.py,local=True改為local=False
最后結果展示: