BERTopic:NLP主题模型的未来!
文| ZenMoore
編| 小軼
以前我一直以為,主題建模(提取文檔的主題詞)這種機器學習時代就開始研究的基礎工具,現在肯定已經到頭了,雖然...有時效果可能不是那么讓人滿意。
但突然看到一則推文:“徹底瘋了!不需要預先清洗數據,就能夠快速拿到質量難以置信的主題!” “NLP 主題模型的未來!”
好家伙!讓人又愛又恨又離不開的主題模型,終于要升華了嗎?!!
看了論文之后,恍然大悟,完全沒有想到現在主流主題模型的問題竟然出在這么細節的地方:基于密度聚類和基于中心采樣(主題詞)之間的 gap ! 而且這個問題也竟然可以通過非常簡單的方式解決......
回顧一下之前的主題建模的方式,可以簡單地分成兩種:
基于詞袋的模型:比如 LDA(潛在狄利克雷分配)、NMF(非負矩陣分解) 等。
基于預訓練詞嵌入的聚類方法:比如 Top2Vec[1], CTM[2], Sia et al., 2020[3]等。
基于詞袋的方法主要是基于文檔-單詞的共現頻率特征來抽取主題。其缺點在于:沒有充分考慮每個單詞的上下文語義 。例如 LDA 算法,假定主題的先驗分布和單詞的先驗分布都服從狄利克雷分布,又假定每個主題的單詞分布、每個文檔的主題分布均服從多項分布,然后再在“文檔-單詞”共現數據上通過 EM 等算法去求解得到主題。
在深度學習時代,我們更偏好使用基于預訓練詞嵌入的方式。一般而言,這類方法首先通過一個預訓練的模型(比如 Doc2Vec、Word2Vec、GloVe、BERT)計算出文檔的向量表示以及單詞的向量表示,然后把它們嵌入到同一個語義空間中。假定主題相似的文檔在嵌入空間中的位置也是相近的(聚類),然后從這個嵌入空間的簇中去采樣主題詞。
通常這些簇以基于密度的方式聚類[5]形成。這樣聚類后形成的簇不一定是“球狀”的(sphere-like),每個簇的邊界形狀可以千奇百怪(如下圖)。
基于質心的聚類:假定每個簇是一個球狀結構(sphere-like) (其實是一個并不太合理的約束...)
基于層次的聚類:假定數據點存在層次關系,例如“國家”-“省份”-“城市”這種。
基于密度的聚類:挨在一起的就是一類的,不一定必須是 sphere-like 所以,基于層次和密度的聚類是最合理的方式。
然而,此前的方法是怎么做的呢?例如 Top2Vec[1],它會先將簇的質心(centroid) 作為主題向量, 然后認為:對于一個給定的詞語,其詞向量與主題向量距離越近,則它越能代表這一主題。
這就出現問題了朋友們:聚類時是基于密度的,采詞卻是基于與質心的距離!(盲生發現了華點!)
舉個栗子。在下圖中有一個長條狀的簇,其質心用紅色“X”標記。按照 Top2Vec 的做法,采詞空間如紅色圓周所示。可以看到,采詞空間中有一部分并不在簇,就很容易誤采到其他簇的單詞。
▲紅色的圓圈就是所謂的“采詞空間”,很明顯超出了簇的范圍而今天要介紹的這篇 BERTopic, 使用一種基于類別的 TF-IDF 變體,解決了這個問題:聚類和采詞之間的不一致不兼容問題(gap)。
論文標題:
BERTopic: Neural topic modeling with a class-based TF-IDF procedure
論文作者:
Maarten Grootendorst
論文鏈接:
https://arxiv.org/pdf/2203.05794.pdf
原理
BERTopic 方法的步驟如下:
首先使用預訓練模型計算 document embeddings (比如常用的 Sentence-BERT 等)
因為 document embeddings 維度很高,在嵌入空間中就非常稀疏,不容易進行聚類,所以需要先進行降維,比如 PCA 或者 t-SNE 等方法,這里用的是 UMAP[4]
基于層次和密度進行聚類,這里用的是典型的 HDBSCAN[5] 算法
? 劃重點:使用 class-based TF-IDF 變體提取每個簇的主題詞
因為上文所說的這個 gap 產生的原因,本質上就是“采詞空間”沒有收束到對應的簇上。所以只要想辦法把候選集合定在簇里面就好了!😋
當然可以通過縮小 sphere 來約束,但是這樣肯定會漏掉不少候選詞...
靜態主題建模
靜態主題建模假定時間是靜止的當下,不考慮文檔主題分布隨著時間的變化。
回顧一下 TF-IDF 算法 :
式子中,t 代表單詞(term), d 代表文檔(document), 這個值的意思是 t 在 d 中的詞頻乘以 log(語料總文檔數量 比 包含t的文檔的數量)。
BERTopic 使用的是相同的策略,只不過文檔 d 做了一些改變:將一個 cluster (也就是一個類 class) 中的所有文檔拼接起來作為新的單個文檔 d. 這樣 TF-IDF 公式就變成了 c-TF-IDF:
402 Payment Required
其中,c 表示 class, A 表示每個 class 的平均單詞數量, 表示 class c 中 t 的頻率, 表示所有 class 中 t 的頻率。
就這樣,簇 c 里的每個單詞 t 都有了一個分數,分數越高,越能代表這個簇的主題~ 顯然這個候選集合是收束在簇 c 的范圍里面的。
動態主題建模
和靜態主題建模不同,動態主題建模考慮到了文檔本身隨時間的變化特征,即2022年的文檔和2012年的文檔主題分布是不一樣的,2022年大家在討論的主題是“三體”即將上映,而2012年大家討論的主題是“2012世界末日”.
針對這種情況,本文引入了新的 TF-IDF 公式:
402 Payment Required
這里的 i 表示第 i 個 timestep.
平滑化
對于動態主題建模另外一個可能有用的假設是,不同 timestep 的 topic 可能是線性相關的,因此作者引入了平滑技巧(optional):
首先進行 L1-normalization (即除以 L1-norm), for each topic and timestep.
然后對 normalized vector 進行 average 平滑操作:將第 i 時刻的值與第 i-1 時刻的值進行一個平均作為新的第 i 時刻的值。
效果
作者使用 "all-mpnetbase-v2" SBERT model 作為 embedding model, 在 20 NewsGroups、BBC News、Trump 等數據集上進行了實驗,對比結果如下圖:
▲可見,BERTopic 有更好的綜合能力然后不同的 embedding model 對效果也會有影響:
對于動態主題建模,BERTopic 也有很好的綜合效果:
▲Evolve 表示使用了上文介紹的平滑技巧總結下來就是:
BERTopic 優點:彌合了基于密度聚類和基于中心采樣之間的 gap;適用于各種語言模型,從而可以根據需要與實際資源量靈活選擇可用模型;嵌入聚類和主題生成(采詞)是解耦的兩個階段;靜態、動態主題建模用的是同一套框架, minimal change.
缺點:沒有考慮單文檔多主題;因為僅僅考慮了文檔的上下文表示而主題詞仍然來源于詞袋,所以主題當中的單詞可能高度相似從而具有一定的冗余性。
寫在最后
看完這篇文章之后,最大的感覺就是:細心!太細心了!
密度聚類和中心采樣之間的 gap, 這個盲點,真的需要一番好眼力才能發現 😂!所以,做科研,不一定必須追快打新,把 picture 定得多么多么大,能敏銳地發現一些別人發現不了的“小”問題,也是不小的成果。
Finally, 貼一段 BERTopic 的使用示例代碼:
from?bertopic?import?BERTopic from?sklearn.feature_extraction.text?import?CountVectorizer#?we?add?this?to?remove?stopwords vectorizer_model?=?CountVectorizer(ngram_range=(1,?2),?stop_words="english")model?=?BERTopic(vectorizer_model=vectorizer_model,language='english',?calculate_probabilities=True,verbose=True ) topics,?probs?=?model.fit_transform(text)代碼來源于:https://www.pinecone.io/learn/bertopic/
然后去更新你的常備 toolkit 吧~ (😉)
萌屋作者:ZenMoore
智源實習生🧐,愛數學愛物理愛 AI🌸 想從 NLP 出發探索人工認知人工情感的奧秘🧠🤖!個人主頁🌎 zenmoore.github.io 知乎🤔 ZenMoore, 微信📩 zen1057398161 嚶其鳴矣,求其友聲?!
作品推薦
一文跟進Prompt進展!綜述+15篇最新論文逐一梳理
圖靈獎大佬+谷歌團隊,為通用人工智能背書!CV 任務也能用 LM 建模!
以4%參數量比肩GPT-3!Deepmind 發布檢索型 LM,或將成為 LM 發展新趨勢!?
后臺回復關鍵詞【入群】
加入賣萌屋NLP、CV、搜推廣與求職討論群
?
[1] Dimo Angelov. 2020. Top2vec: Distributed representations of topics. arXiv preprint arXiv:2008.09470.
[2] Federico Bianchi, Silvia Terragni, and Dirk Hovy. 2020a. Pre-training is a hot topic: Contextualized document embeddings improve topic coherence. arXiv preprint arXiv:2004.03974.
[3] Suzanna Sia, Ayush Dalmia, and Sabrina J Mielke. 2020. Tired of topic models? clusters of pretrained word embeddings make for fast and good topics too! arXiv preprint arXiv:2004.14914.
[4] Leland McInnes, John Healy, Nathaniel Saul, and Lukas Grossberger. 2018. Umap: Uniform manifold approximation and projection. The Journal of Open Source Software, 3(29):861.
[5] Leland McInnes, John Healy, and Steve Astels. 2017. hdbscan: Hierarchical density based clustering. The Journal of Open Source Software, 2(11):205.
總結
以上是生活随笔為你收集整理的BERTopic:NLP主题模型的未来!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盘古分词 - 多元分词算法
- 下一篇: cv算法(cv算法题笔试题库)