GridSearch для модели doc2vec, построенной с использованием gensim - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь найти лучшие гиперпараметры для моей обученной модели 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, или любые предложения о какой-либо другой технике.,Помощь очень ценится.

1 Ответ

0 голосов
/ 23 октября 2018

Независимо от правильности кода, я постараюсь ответить на ваш вопрос о том, как выполнить настройку гиперпараметров.Вы должны начать определять набор гиперпараметров, которые будут определять ваш поиск по сетке гиперпараметров.Для каждого набора гиперпараметров

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

Надеюсь, это поможет.

...