Вопрос:

Как получить детерминированные результаты в Doc2Vec?

python gensim doc2vec

16 просмотра

1 ответ

23 Репутация автора

Я использую Doc2Vec для анализа некоторых абзацев и хочу получить детерминированное векторное представление данных поезда. Исходя из официальной документации , мне кажется, что мне нужно установить параметры «семя» и «работники», а также переменную среды PYTHONHASHSEED в Python 3. Поэтому я написал скрипт следующим образом.

import os
from gensim.models.doc2vec import TaggedDocument
from gensim.models import Doc2Vec


def main():
    # Check whether the environment variable has been set successfully
    print(os.environ.get('PYTHONHASHSEED'))

    docs = [TaggedDocument(['Apple', 'round', 'apple', 'red', 'Apple', 'juicy', 'apple', 'sweet'], ['A']),
            TaggedDocument(['I', 'have', 'a', 'little', 'frog', 'His', 'name', 'is', 'Tiny', 'Tim'], ['B']),
            TaggedDocument(['On', 'top', 'of', 'spaghetti', 'all', 'covered', 'with', 'cheese'], ['C'])]

    # Loop 3 times to check whether consistent results are produced within each run
    for i in range(3):
        model = Doc2Vec(min_count=1, seed=12345, workers=1)
        model.build_vocab(docs)
        model.train(docs, total_examples=model.corpus_count, epochs=model.epochs)
        print(model.docvecs['B'])


if __name__ == '__main__':
    os.environ['PYTHONHASHSEED'] = '12345'
    main()

Проблема в том, что при каждом запуске он дает детерминированные результаты, но когда я снова запускаю весь скрипт, он дает разные результаты. Есть ли какие-либо проблемы с настройкой переменных среды, или я что-то упускаю?

Я на Python 3.6.5.

Автор: jiao Источник Размещён: 12.06.2019 02:07

Ответы (1)


1 плюс

22709 Репутация автора

Я считаю, что установка PYTHONHASHSEEDвнутри вашего кода слишком запоздалая: его нужно установить в среде ОС , прежде чем интерпретатор Python вообще запустится. Когда Python запускается, он проверяет это, чтобы решить, будут ли все словари во время этого выполнения использовать указанное семя рандомизации. (Это не перепроверяется позже, для каждого последующего создания словаря.)

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

В Q11 и Q12 немного больше ответов на часто задаваемые вопросы по проекту gensim по этим вопросам:

https://github.com/RaRe-Technologies/gensim/wiki/recipes-&-faq#q11-ive-trained-my-word2vecdoc2vecetc-model-repeatedly-using-the-exact-same-text-corpus-but- что векторы-это-разные-каждый-время-это-есть-а-ошибка или иметь-я сделал-а-ошибка-2vec-учебно-недетерминизм

Автор: gojomo Размещён: 12.06.2019 06:08
Вопросы из категории :
32x32