模型與BigARTM超越LDA:最先進的主題
2022年2月16日 在數據策略
這篇文章是在係列文章主題建模用於文本分析。以前,我們看了LDA(潛在狄利克雷分配)主題建模庫中可用MLlib PySpark。雖然LDA是一個非常有能力的工具,我們看一個叫做BigARTM更加可伸縮的和最先進的技術。LDA是基於兩級貝葉斯生成模型假定狄利克雷分布和詞分布的主題。BigARTM (BigARTM GitHub和https://bigartm.org)是一個開源項目基於添加劑正規化主題模型(ARTM),這是一個non-Bayesian正則化模型,旨在簡化主題推理問題。BigARTM之前出於狄利克雷的前提假設與稀疏的概念衝突在我們的文檔主題,並試圖解釋這個貧乏導致那些過於複雜的模型。在這裏,我們將說明BigARTM背後的基本原則以及如何應用它每日科斯數據集。
為什麼在LDA BigARTM ?
如前所述,BigARTM是一個概率non-Bayesian方法與貝葉斯LDA方法。根據康斯坦丁·沃龍佐夫和安娜Potapenko添加劑正規化的論文LDA的狄利克雷先前的假設不結合現實生活中的文檔的主題分布稀疏。BigARTM並不試圖構建一個完全生成模型的文本,與LDA;相反,它使用regularizers choosesto優化特定標準。這些regularizers不需要任何概率解釋。因此指出,多目標的製定與BigARTM主題模型更容易。
概述BigARTM
問題陳述
我們正在努力學習一套主題從文檔集。主題將包括一組詞的語義意義。這裏的目標是,將總結文檔集的主題。在這方麵,讓我們總結BigARTM紙使用的術語:
D =文本的集合,每個文檔' D ' D是一個元素,每個文檔是“n的集合d的單詞(w0w1w,……d)
W =詞彙的集合
T =一個主題,一個文檔' d '應該是由許多話題
我們樣本概率空間由詞(W),張成文檔(D)和主題(T)。詞和文檔是觀察到,但主題是潛在變量。
這個詞' ndw“指的是這個詞的次數”w”文檔中出現“d”。
有一個假設條件獨立的每個主題生成文檔的單詞獨立。這給了我們
這個問題可以總結為以下方程
隨機分解
通過隨機矩陣分解,我們推斷出的概率產品條款在上麵的方程中。現在的產品條款表示為矩陣。記住,這個過程會導致非唯一解分解的結果;因此,學習主題將取決於所用的初始化的解決方案。
我們創建一個數據矩陣F幾乎等於(Fwd維WxD],每個元素fwd規範化的詞“w”文檔' d '文檔中單詞的數量除以“d”。可以隨機分解為兩個矩陣矩陣F∅和θ,以便:
[∅]對應詞概率矩陣的話題,WxT
(θ)對應的主題概率矩陣文件,TxD
所有三個矩陣隨機和的列:
(∅)t代表在一個主題的話,
(θ)d分別代表一個文檔的主題。
主題的數量通常是遠小於文檔的數量或單詞的數量。
喬治。
在LDA矩陣∅和θ列,[∅]t和(θ)d那些被假定為來自狄利克雷分布與hyperparameters分別由β和α。
β=[βw),這是一個hyperparameter向量對應的單詞的數量
α=ααt),這是一個hyperparameter向量對應主題的數量
可能性和添加劑正規化
對數似我們想最大化獲取解決方案是由以下方程。這是一樣的目標函數在概率潛在語義分析(向量)和將BigARTM的起點。
- 平滑正規化
- 稀疏正則化
在這兩種情況下,我們使用KL散度的功能規範。我們可以把這兩個regualizers來滿足不同的目標。一些其他類型的正則化方法解相關正規化和相幹正規化。(http://machinelearning.ru/wiki/images/4/47/Voron14mlj.pdf,例如34和eq。40。)最終的目標函數就變成了如下:
平滑正規化
平滑正則化應用於消除背景主題,他們有一個均勻分布相對於特定領域的主題。對於平滑正規化,我們
- 最小化KL背離條款[∅]t和固定β分布
- 最小化KL背離條款(θ)dα和固定分布
- 總和的兩項(1)和(2)調整項
這裏我們想最小化KL分歧使我們的主題和詞分布分別接近所需的α和β分布。
稀疏的策略更少的話題
得到更少的話題我們采用稀疏的策略。這幫助我們挑選特定領域的主題文字與背景主題文字。對於稀疏正規化,我們希望:
- 最大化KL術語(∅)之間的分歧t和一個均勻分布
- 最大化KL術語(θ)之間的分歧d和一個均勻分布
- 總和的兩項(1)和(2)調整項
我們正試圖獲得詞和主題分布與最小熵最大化(或更少的不確定性)的KL從均勻分布散度,最高熵可能最高(不確定性)。這給了我們“尖峰的”為我們的主題和詞分布分布。
模型質量
ARTM模型質量評估使用下列措施:
- 困惑:這是成反比的可能性給出的數據模型。困惑模型越好越小,然而一個困惑的價值大約10已經給現實的實驗證明文件。
- 稀疏:這個措施的比例零∅和θ的元素矩陣。
- 比背景詞:高比率的背景詞彙也表明模型退化和是一個很好的停止準則。這可能是由於太多的稀疏或消除的話題。
- 一致性:這是用來測量模型的可解釋性。主題應該是一致的,如果主題往往會出現最頻繁的詞在文檔。使用點態相幹計算互信息(PMI)。主題是測量的一致性:
- 得到最可能的“k”字一個主題(通常設置為10)
- 計算所有的點態互信息(采購經理人指數)對單詞表中的單詞在步驟(一)
- 計算所有的采購經理人指數的平均值
- 內核大小、純度和對比:一個內核子集的定義是在主題和主題分開,(即Wt= {w: p (t | w) >δ},δ在哪裏選擇到0.25)。內核大小設置為20至200。現在的純度和對比被定義為:
概率之和的話題在內核中所有的單詞嗎
對於一個話題模型,更好的純度和高值的對比。
使用BigARTM庫
數據文件
BigARTM圖書館是可用的BigARTM網站並通過皮普包可以安裝。下載示例數據文件並解壓,如下所示。我們將要使用的數據集的每日科斯數據集。
wget https:/ /s3 -歐盟-西方- 1. amazonaws.com/artm/docword.kos.txt.gzwget https:/ /s3 -歐盟-西方- 1. amazonaws.com/artm/vocab.kos.txt
gunzip docword.kos.txt.gz
喬治。
我們將開始通過觀察LDA的實現,這需要更少的參數,因此作為一個良好的基線。使用較小的數據集的“fit_offline”方法和“fit_online”更大的數據集。你可以設置的數量通過集合或通過一個文檔的數量。
進口artmbatch_vectorizer = artm.BatchVectorizer (data_path =“。”data_format =“bow_uci”collection_name =“科斯”target_folder =“kos_batches”)lda = artm.LDA (num_topics =15α=0.01,β=0.001、cache_theta = True num_document_passes =5,字典= batch_vectorizer.dictionary)lda。fit_offline (batch_vectorizer = batch_vectorizer num_collection_passes =10)top_tokens = lda.get_top_tokens (num_tokens =10)為我,token_list在列舉(top_tokens):打印(“話題# {0}:{1}”token_list .format(我))話題#0:【“布什”,“黨”,“稅收”,“總統”,“活動”,“政治”,“狀態”,“法院”,“共和黨人”,“州”]話題#1:【“伊拉克”,“戰爭”,“軍事”,“軍隊”,“伊拉克”,“殺”,“士兵”,“人”,“力量”,“一般”]話題#2:【11月的,“投票”,“總督”,“房子”,“選舉”,“賬戶”,“參議員”,“共和黨人”,“投票”,“接觸”]話題#3:【“參議員”,“共和黨人”,“活動”,“共和黨人”,“種族”,“森”,“共和黨”,“民主”,“辯論”,“俄克拉荷馬”]話題#4:【“選舉”,“布什”,“幽靈”,“一般”,“圖”,“時間”,“投票”,“活動”,“人”,“約翰。”]話題#5:【“嘉裏”,“院長”,“愛德華”,“克拉克”,“主”,“民主”,利伯曼的,格普哈特的,“約翰。”,愛荷華州的]話題#6:【“種族”,“狀態”,“民主黨人”,“民主”,“黨”,“候選人”,“投票”,納德的,“候選人”,“區”]話題#7:【“管理”,“布什”,“總統”,“房子”,“年”,“委員會”,“共和黨人”,“工作”,“白色”,“比爾”]話題#8:【“院長”,“活動”,“民主”,“媒體”,愛荷華州的,“州”,“聯盟”,“國家”,“工會”,“黨”]話題#9:【“房子”,“共和黨人”,“百萬”,“延遲”,“錢”,“選舉”,“委員會”,“共和黨”,“民主黨人”,“共和黨人”]話題#10:【11月的,“投票”,“投票”,“嘉裏”,“參議員”,“共和黨人”,“房子”,“投票”,“投票”,“賬戶”]話題#11:【“伊拉克”,“布什”,“戰爭”,“管理”,“總統”,“美國”,“薩達姆”,“伊拉克”,“情報”,“聯合”]話題#12:【“布什”,“嘉裏”,“投票”,“投票”,“百分比”,“選民”,“一般”,“結果”,“數字”,“投票”]話題#13:【“時間”,“房子”,“布什”,“媒體”,“herseth”,“人”,“約翰。”,“政治”,“白色”,“選舉”]話題#14:【“布什”,“嘉裏”,“一般”,“狀態”,“百分比”,“約翰。”,“州”,“喬治”,“說客”,“選民”]
你可以提取和檢查∅,θ矩陣,如下所示。
φ= lda.phi_#大小數量的單詞詞彙x數量的話題θ= lda.get_theta ()#對應主題的數量的行數打印(φ)topic_0 topic_1……topic_13 topic_14索耶3.505303 e-083.119175 e-08…4.008706 e-083.906855 e-08雄鹿3.315658 e-083.104253 e-08…3.624531 e-088.052595 e-06非晶配電變壓器3.238032 e-083.085947 e-08…4.258088 e-083.873533 e-08津巴布韋3.627813 e-082.476152 e-04…3.621078 e-084.420800 e-08林道市3.455608 e-084.200092 e-08…3.988175 e-083.874783 e-08………………曆史1.298618 e 034.766201 e-04…1.258537 e-045.760234 e-04數據3.393254 e-054.901363 e-04…2.569120 e-042.455046 e-04始終如一地4.986248 e-081.593209 e-05…2.500701 e-052.794474 e-04部分7.890978 e-053.725445 e-05…2.141521 e-054.838135 e-05貸款2.032371 e-069.697820 e-06…6.084746 e-064.030099 e-08打印(θ)1001年1002年1003年…2998年2999年3000年topic_00.0003190.0604010.002734…0.0002680.0345900.000489topic_10.0011160.0008160.142522…0.1793410.0001510.000695topic_20.0001560.4069330.023827…0.0001460.0000690.000234topic_30.0150350.0025090.016867…0.0006540.0004040.000501topic_40.0015360.0001920.021191…0.0011680.0001200.001811topic_50.0007670.0165420.000229…0.0009130.0002190.000681topic_60.0002370.0041380.000271…0.0129120.0279500.001180topic_70.0150310.0717370.001280…0.1537250.0001370.000306topic_80.0096100.0004980.020969…0.0003460.0001830.000508topic_90.0098740.0003740.000575…0.2974710.0730940.000716topic_100.0001880.1577900.000665…0.0001840.0000670.000317topic_110.7202880.1087280.687716…0.1930280.0001280.000472topic_120.2163380.0006350.003797…0.0490710.3920640.382058topic_130.0088480.1583450.007836…0.0005020.0009880.002460topic_140.0006550.0103620.069522…0.1102710.4698370.607572
ARTM
ARTM這個API提供了完整的功能,然而,這種靈活性是需要手動指定指標和參數。
model_artm=artm.ARTM (num_topics=15,cache_theta=真正的,分數=[artm.PerplexityScore(名字=“PerplexityScore”,字典=字典)],regularizers=[artm.SmoothSparseThetaRegularizer(名字=“SparseTheta”,τ=-0.15)))model_plsa.scores.add (artm.TopTokensScore(名字=“TopTokensScore”,num_tokens=6))model_artm.scores.add (artm.SparsityPhiScore(名字=“SparsityPhiScore”))model_artm.scores.add (artm.TopicKernelScore(名字=“TopicKernelScore”,probability_mass_threshold=0.3))model_artm.scores.add (artm.TopTokensScore(名字=“TopTokensScore”,num_tokens=6))model_artm.regularizers.add (artm.SmoothSparsePhiRegularizer(名字=“SparsePhi”,τ=-0.1))model_artm.regularizers.add (artm.DecorrelatorPhiRegularizer(名字=“DecorrelatorPhi”,τ=1.5 e + 5))model_artm.num_document_passes=1model_artm.initialize(字典=字典)model_artm.fit_offline (batch_vectorizer=batch_vectorizer, num_collection_passes=15)在那裏是一個數字的不同指標可用,在在初始化階段指定的是什麼。您可以提取任何的指標使用下麵的語法。model_artm.scores[PerplexityScore, SparsityPhiScore TopicKernelScore TopTokensScore]model_artm.score_tracker [“PerplexityScore”]。價值(6873.0439453125,2589.998779296875,2684.09814453125,2577.944580078125,2601.897216796875,2550.20263671875,2531.996826171875,2475.255126953125,2410.30078125,2319.930908203125,2221.423583984375,2126.115478515625,2051.827880859375,1995.424560546875,1950.71484375]
您可以使用model_artm.get_theta()和model_artm.get_phi()方法分別得到∅和θ矩陣。你可以提取主題在語料庫的主題文件。
為topic_name model_artm.topic_names:打印(topic_name +“:”,model_artm.score_tracker [“TopTokensScore”].last_tokens [topic_name])topic_0:(“黨”,“狀態”,“活動”,“稅收”,“政治”,“共和黨人”]topic_1:(“戰爭”,“軍隊”,“軍事”,“伊拉克”,“人”,“官員”]topic_2:(“總督”,“投票”,“選舉”,“勞動”,11月的,“票”]topic_3:(“民主”,“種族”,“共和黨人”,“共和黨”,“活動”,“錢”]topic_4:(“選舉”,“一般”,“約翰。”,“奔跑”,“國家”,“國家”]topic_5:(“愛德華”,“院長”,“約翰。”,“克拉克”,愛荷華州的,利伯曼的]topic_6:(“百分比”,“種族”,“投票”,納德的,“狀態”,“黨”]topic_7:(“房子”,“比爾”,“管理”,“共和黨人”,“年”,“參議員”]topic_8:(“院長”,“活動”,“州”,“國家”,“克拉克”,“聯盟”]topic_9:(“延遲”,“委員會”,“共和黨人”,“百萬”,“區”,“共和黨”]topic_10:(11月的,“投票”,“投票”,“嘉裏”,“共和黨人”,“參議員”]topic_11:(“伊拉克”,“戰爭”,“美國”,“管理”,“伊拉克”,“安全”]topic_12:(“布什”,“嘉裏”,“說客”,“選民”,“總統”,“投票”]topic_13:(“戰爭”,“時間”,“房子”,“政治”,“民主黨人”,“herseth”]topic_14:(“狀態”,“百分比”,“民主黨人”,“人”,“候選人”,“一般”]
結論
LDA往往是主題的起點為許多用例建模。在這篇文章中,介紹了BigARTM作為一種先進的替代。BigARTM背後的基本原則是隨著圖書館的使用說明。我鼓勵你嚐試BigARTM和是否適合您的需求!
請試一試連接筆記本電腦。