Top2Vec (V1.0.26)主題模擬代碼的改進
1 引言
在目前的工作中,使用了三種主題模擬技術:(1) LDA(LDA Topic Modeling(主題建模): 以Rocscience 2021用戶會議為例); (2) BERTopic(BERTopic(V0.9.0)主題模擬技術); 以及(3)Top2Vec(GeotechSet數據集主題模擬(Topic Modeling); 主題模擬的藝術(The Art of Topic Modeling)---以Step-Path Failure為例). 第一種技術由于性能較差逐漸被淘汰,因此著重點主要放在第二種和第三種技術上,這兩種技術的共同點是利用了BERT模型。本文討論了昨天對Top2Vec-Topic-Modeling代碼的一些改進以及應用時的注意事項,這些改進增強了程序的移植性,計算結果的精確性和均衡性以及后處理的便利性。
2 改進要點
2.1 自動化CPU的核心數
盡管Torch提供了GPU的計算能力,但是在目前Top2Vec的訓練過程中仍然使用的是CPU。在大規模的數值計算中都使用了多線程運算,包括FLAC3D和3DEC,參看《FLAC3D 7.0 新特性簡介(P1)---速度提升》和《確定性模式(model deterministic on)》。workers用來設定訓練模型時要使用的工作線程的數量,雖然我們沒有定量地測試過workers數量對運行速度的影響,但總的來說,較大的數量將導致更快的訓練。使用下面的代碼最大化地使用CPU的core,這樣在不同機器運行代碼時就不必手工改寫數字了。目前我的計算機CPU的核心數是16.
import multiprocessingworkers = multiprocessing.cpu_count()
2.2 同時運行多個模型
Top2Vec(V1.0.26)不像BERTopic一樣,可以任意選擇預訓練模型,目前它只內置了四種模型可供選擇,默認的模型是Gensim的Doc2Vec, 參看 (語義相關的Doc2Vec模型訓練參數優化; 語義相似模型(Doc2Vec)在雙語教學中的應用; Doc2Vec Model---段落相似性查詢)。另外三種模型是:
universal-sentence-encoder (USE)
universal-sentence-encoder-multilingual (USEM)
distiluse-base-multilingual-cased (DBMC)
USE和USEM依賴于Tensorflow,由于庫沖突的原因沒有安裝Tensorflow;DBMC依賴于sentence-transforers模型(聯合6種Transformers預訓練模型), 因此目前只使用Doc2Vec和DBMC兩個模型。Top2Vec原作者對各種模型的應用范圍給出了如下建議:對于大型數據集和具有非常獨特詞匯的數據集,Doc2Vec可以產生更好的結果。這將從頭開始訓練一個Doc2Vec 模型。這種方法是不分語言的。但是多種語言不會對應起來;使用USE運行速度會很快,因為它已經包含了預訓練好的高效模型,這個模型建議用于較小的數據集。對于英語或多語言模型的大型數據集,建議使用USEM模型; 對于多語言數據集和USEM未覆蓋的語言,建議使用DBMC模型,不過DBMC的運行速度比DBMC的運行速度要慢很多。在目前我們自己數據集的測試中,發現DBMC得出的結果比Doc2Vec的結果好,不過Doc2Vec仍然可以得出一些DBMC沒有的結果,因此把這兩個模型聯合在一起,同時運行。
2.3 產生bigram
默認的Top2Vec只能產生單個詞匯,在實際項目中,生成bigram更有意義(使用Trigram獲取文檔的中心思想)。因此在代碼中使用Phraser做了改進。這個改進對Doc2Vec和DBMC都適用, 代碼中所有涉及詞匯的部分假如有的化都以短語出現。下面的詞云顯示得出的結果不再是單個詞匯而是短語。
from gensim.models.phrases import Phraser
本主題Top 5詞匯:
fracture rock
rock bridges
rock fall
unfractured rock
rock fall
本主題Top 5詞匯:
rock mechanics
fractured rock
unfractured rock
intact rock
jointed rock
本主題Top 5詞匯:
rock mass
fractured rock
rock mechanics
intact rock
jointed rock
2.4 Stopwords
盡管Top2Vec聲稱不需要進行stemming/lemmatization等分詞操作,但在實際應用過程中發現在進行詞匯相似性(Similar Keywords)運行時它沒有去掉stopwords, 以前使用手動方法處理,這個方法既笨拙又麻煩,因此引入了cleanDoc子程序過濾掉無意義的stopwords,改進后的代碼,例如"rock bridge"的Top 5相似詞匯得出的結果如下:
fractured rock
rock bridges
unfractured rock
rock fall
rock slopes
2.5 保存成文件
由于我們同時運行Doc2Vec和DBMC兩個模型(以后還要加入USE模型),代碼產生出大量結果,事實上,這些結果已經產生出新的文檔,因此把這些結果直接保存成文件便于進行后處理分析。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















