我正在尝试为我训练过的doc2vec gensim模型找到最佳超参数,该模型将文档作为输入并创建其文档嵌入。我的训练数据由文本文档组成,但没有任何标签。也就是说,我只有“x”,没有“y”。
我在这里发现了一些与我正在尝试做的事情相关的问题,但所有的解决方案都是针对有监督的模型提出的,但没有一个像我的那样针对无监督模型。
下面是我训练doc2vec模型的代码:
def train_doc2vec(
self,
X: List[List[str]],
epochs: int=10,
learning_rate: float=0.0002) -> gensim.models.doc2vec:
tagged_documents = list()
for idx, w in enumerate(X):
td = TaggedDocument(to_unicode(str.encode(' '.join(w))).split(), [str(idx)])
tagged_documents.append(td)
model = Doc2Vec(**self.params_doc2vec)
model.build_vocab(tagged_documents)
for epoch in range(epochs):
model.train(tagged_documents,
total_examples=model.corpus_count,
epochs=model.epochs)
# decrease the learning rate
model.alpha -= learning_rate
# fix the learning rate, no decay
model.min_alpha = model.alpha
return model我需要关于如何使用GridSearch为我训练的模型找到最佳超参数的建议,或者任何关于其他技术的建议。非常感谢您的帮助。
发布于 2018-10-23 16:00:52
独立于代码的正确性,我将尝试回答您关于如何执行超参数调优的问题。您必须开始定义一组超参数,它们将定义您的超参数网格搜索。对于每组超参数
Hset1=(par1Value1,par2Value1,...,par3Value1)
你在训练集上训练你的模型,并使用一个独立的验证集来测量你的准确性(或者你想使用的任何指标)。您可以存储此值(例如A_Hset1)。当您对所有可能的超参数集执行此操作时,您将拥有一组度量
(A_Hset1,A_Hset2,A_Hset3...A_HsetK)。
这些度量中的每一个都会告诉你,对于每组超参数,你的模型有多好,所以你的一组最优超参数
H_setOptimal= HsetX | A_setX=max(A_Hset1,A_Hset2,A_Hset3...A_HsetK)
为了进行公平的比较,您应该始终在相同的数据上训练模型,并始终使用相同的验证集。
我不是一个高级的Python用户,所以你可能会找到更好的建议,但我要做的是创建一个字典列表,其中每个字典都包含一组要测试的超参数:
grid_search=[{"par1":"val1","par2":"val1","par3":"val1",..., "res"=""},
{"par1":"val2","par2":"val1","par3":"val1",..., "res"=""},
{"par1":"val3","par2":"val1","par3":"val1",..., "res"=""},
,...,
{"par1":"valn","par2":"valn","par3":"valn",..., "res"=""}]这样您就可以将结果存储在相应字典的"res“字段中,并跟踪每组参数的性能。
for set in grid_search:
#insert here your training and accuracy evaluation using the
#parameters in set
set["res"]= the_Accuracy_for_HyperPar_in_set我希望它能帮上忙。
https://stackoverflow.com/questions/52876014
复制相似问题