
OCTIS(優化和比較主題模型很簡單)旨在培訓,分析和比較主題模型,主題模型的最佳超參數是通過貝葉斯優化方法估算的。這項工作已被接受了EACL2021的演示軌道。單擊以閱讀論文!
目錄
您可以使用以下命令安裝OCTIS:
PIP安裝八桿
您可以在需求中找到要求。 txt文件。
要輕鬆了解如何使用八張,我們邀請您嘗試我們的教程:)
| 姓名 | 關聯 |
|---|---|
| 如何構建主題模型並評估結果(20newSgroups上的LDA) | |
| 如何優化神經主題模型的超參數(M10上的CTM) |
有關如何使用八派的兩種指南,以實踐:
關於歌曲歌詞的主題建模的教程:
為了加載已經預處理的數據集之一,如下所示:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . fetch_dataset ( "20NewsGroup" )只需使用下面列出的數據集名稱之一即可。注意:這很敏感!
| 八環 | 來源 | #文件 | # 字 | #標籤 | 語言 |
|---|---|---|---|---|---|
| 20newsgroup | 20newsgroup | 16309 | 1612 | 20 | 英語 |
| BBC_News | BBC新聞 | 2225 | 2949 | 5 | 英語 |
| DBLP | DBLP | 54595 | 1513年 | 4 | 英語 |
| M10 | M10 | 8355 | 1696年 | 10 | 英語 |
| dbpedia_it | dbpedia_it | 4251 | 2047 | 5 | 意大利人 |
| EUROPARL_IT | EUROPARL_IT | 3613 | 2000 | na | 意大利人 |
否則,您可以通過以下方式加載自定義預處理數據集:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "../path/to/the/dataset/folder" )該分區可以是用於培訓分區的“訓練”,“測試”用於測試分區的測試,也可以是驗證分區的“ Val”。可以在此處找到數據集的示例:sample_dataset。
與TensorFlow數據集和HuggingFace的NLP庫類似,我們剛剛下載並準備了公共數據集。我們不託管或分發這些數據集,保證其質量或公平性,或聲稱您已有使用該數據集的許可證。您有責任確定您是否有權使用數據集許可證下的數據集並引用數據集的正確所有者。
如果您是數據集所有者,並希望更新其任何部分,或者不希望您的數據集包含在此庫中,請通過GitHub問題與您聯繫。
如果您是數據集所有者,並希望將您的數據集包括在此庫中,請通過GitHub問題取得聯繫。
要預處理數據集,請導入預處理類,並使用Preprocess_dataset方法。
import os
import string
from octis . preprocessing . preprocessing import Preprocessing
os . chdir ( os . path . pardir )
# Initialize preprocessing
preprocessor = Preprocessing ( vocabulary = None , max_features = None ,
remove_punctuation = True , punctuation = string . punctuation ,
lemmatize = True , stopword_list = 'english' ,
min_chars = 1 , min_words_docs = 0 )
# preprocess
dataset = preprocessor . preprocess_dataset ( documents_path = r'..corpus.txt' , labels_path = r'..labels.txt' )
# save the preprocessed dataset
dataset . save ( 'hello_dataset' )有關預處理的更多詳細信息,請參見示例文件夾中的預處理演示示例。
要構建模型,請加載預處理的數據集,設置模型超參數並使用train_model()訓練模型。
from octis . dataset . dataset import Dataset
from octis . models . LDA import LDA
# Load a dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "dataset_folder" )
model = LDA ( num_topics = 25 ) # Create model
model_output = model . train_model ( dataset ) # Train the model如果數據集被分區,則可以:
| 姓名 | 執行 |
|---|---|
| CTM(Bianchi等,2021) | https://github.com/milanlproc/contextualized-topic-models |
| ETM(Dieng等,2020) | https://github.com/adjidieng/etm |
| HDP(Blei等,2004) | https://radimrehurek.com/gensim/ |
| LDA(Blei等,2003) | https://radimrehurek.com/gensim/ |
| LSI(Landauer等,1998) | https://radimrehurek.com/gensim/ |
| NMF(Lee and Seung 2000) | https://radimrehurek.com/gensim/ |
| Neurallda(Srivastava和Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
| Prodlda(Srivastava和Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
如果您使用其中一種實現,請確保引用正確的紙張。
如果您實現了一個模型並希望更新其任何部分,或者不希望您的模型包含在此庫中,請通過GitHub問題取得聯繫。
如果您實現了一個模型並希望將您的模型包括在此庫中,請通過GitHub問題取得聯繫。否則,如果您想自己包含該模型,請參見以下部分。
要評估模型,請選擇一個度量標準並使用度量類別的score()方法。
from octis . evaluation_metrics . diversity_metrics import TopicDiversity
metric = TopicDiversity ( topk = 10 ) # Initialize metric
topic_diversity_score = metric . score ( model_output ) # Compute score of the metric分類指標:
- F1得分:
F1Score(dataset)- 精確:
PrecisionScore(dataset)- 召回:
RecallScore(dataset)- 精度:
AccuracyScore(dataset)
連貫指標:
- UMASS連貫性:
Coherence(measure='u_mass')- C_V連貫:
Coherence(measure='c_v')- UCI連貫性:
Coherence(measure='c_uci')- NPMI連貫性:
Coherence(measure='c_npmi')- 基於單詞嵌入的連貫性成對:
WECoherencePairwise()- 基於單詞嵌入的相干質心:
WECoherenceCentroid()
多樣性指標:
- 主題多樣性:
TopicDiversity()- Invertedrbo:
InvertedRBO()- 基於單詞嵌入的invertedrbo匹配:
WordEmbeddingsInvertedRBO()- 基於單詞嵌入的Invertedrbo Centroid:
WordEmbeddingsInvertedRBOCentroid()- 日誌賠率比:
LogOddsRatio()- kullback-liebler Divergence:
KLDivergence()
相似性指標:
- 排名偏見的重疊:
RBO()- 基於單詞嵌入的RBO匹配:
WordEmbeddingsRBOMatch()- 基於單詞嵌入的RBO Centroid:
WordEmbeddingsRBOCentroid()- 基於單詞嵌入的成對相似性:
WordEmbeddingsPairwiseSimilarity()- 基於單詞嵌入的質心相似性:
WordEmbeddingsCentroidSimilarity()- 基於單詞嵌入的加權總和相似性:
WordEmbeddingsWeightedSumSimilarity()- 成對的jaccard相似性:
PairwiseJaccardSimilarity()
主題意義指標:
- KL制服:
KL_uniform()- kl空置:
KL_vacuous()- KL背景:
KL_background()
模型從八八桿/型號/model.py中定義的類摘要模型繼承。要構建自己的模型,您的類必須覆蓋train_model(self,dataset,hyperparameters)方法,該方法始終需要至少一個數據集對象和超參數的字典作為輸入,並應返回具有模型輸出的輸出的字典。
為了更好地了解模型的工作原理,讓我們看看LDA實現。開發自定義模型的第一步是定義默認超參數值的字典:
hyperparameters = { 'corpus' : None , 'num_topics' : 100 , 'id2word' : None , 'alpha' : 'symmetric' ,
'eta' : None , # ...
'callbacks' : None }定義默認的超參數值允許用戶在其子集上工作,而無需為每個參數分配一個值。
以下步驟是train_model()覆蓋:
def train_model ( self , dataset , hyperparameters = {}, top_words = 10 ):LDA方法需要一個數據集,超參數字典和一個額外的(可選)參數,用於選擇每個主題的最有意義的單詞跟踪。
使用超參數默認器,輸入和數據集中的默認值您應該能夠編寫自己的代碼並返回為輸出至少3個條目的詞典:
如果您的模型支持培訓/測試分區,則還應返回:
要優化模型,您需要選擇數據集,指標和超參數的搜索空間才能優化。對於超參數的類型,我們使用scikit-optimize類型(https://scikit-optimize.github.io/stable/modules/space.html)
from octis . optimization . optimizer import Optimizer
from skopt . space . space import Real
# Define the search space. To see which hyperparameters to optimize, see the topic model's initialization signature
search_space = { "alpha" : Real ( low = 0.001 , high = 5.0 ), "eta" : Real ( low = 0.001 , high = 5.0 )}
# Initialize an optimizer object and start the optimization.
optimizer = Optimizer ()
optResult = optimizer . optimize ( model , dataset , eval_metric , search_space , save_path = "../results" # path to store the results
number_of_call = 30 , # number of optimization iterations
model_runs = 5 ) # number of runs of the topic model
#save the results of th optimization in a csv file
optResult . save_to_csv ( "results.csv" )結果將通過相應的超參數配置提供公制的最佳價值,以及優化的每次迭代的超參數和度量值。要可視化此信息,您必須將貝葉斯_optimization的“繪圖”屬性設置為true。
您可以在這裡找到更多:優化器讀數
OCTIS包括一個用戶友好的圖形接口,用於創建,監視和查看實驗。遵循數據集,模型和指標的實現標準,儀表板將自動更新,並允許您使用自己的自定義實現。
要運行儀表板,您需要克隆回購。在項目目錄中運行以下命令:
python OCTIS/dashboard/server.py瀏覽器將打開,您將被重定向到儀表板。在儀表板中,您可以:
這項工作已在EACL 2021的演示曲目中接受!單擊以閱讀論文!如果您決定使用此資源,請引用:
@inproceedings {terragni2020octis,
title = {{octis}:比較和優化主題模型很簡單! },
作者= {Terragni,Silvia和Fersini,Elisabetta和Galuzzi,Bruno Giovanni和Tropeano,Pietro和Candelieri,Antonio},Antonio},
年= {2021},
BookTitle = {{計算語言學協會歐洲分會第16屆會議論文集:系統演示},
月= APR,
年=“ 2021”,
發布者=“計算語言學協會”,
url =“ https://www.aclweb.org/anthology/2021.eacl-demos.31”,
頁=“ 263--270”,
}
@inproceedings {dblp:conf/clic-it/terragnif21,
作者= {Silvia Terragni和Elisabetta Fersini},
編輯= {Elisabetta Fersini和Marco Passarotti和Viviana Patti},
title = {{octis 2.0:優化和比較意大利語中的主題模型甚至是
更簡單! }},
BookTitle = {八次意大利計算語言學會議會議錄,
Clic-it 2021,意大利米蘭,1月26日至28日,2022年},
系列= {{CEUR}研討會程序},
音量= {3033},
Publisher = {CEUR-WS.org},
年= {2021},
url = {http://ceur-ws.org/vol-3033/paper55.pdf},
}
此包是由CookieCutter和Audreyr/CookieCutter-Pypackage項目模板創建的。感謝所有發布其主題模型實現的開發人員。特別感謝Tenggaard,他幫助我們在Octis早期發行中找到了許多錯誤,並感謝Emil Rijcken,他們友好地寫了兩種有關如何使用Octis的指南:)