
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的指南:)