Почему функция most_similar () Word2Vec дает бессмысленные результаты при обучении?

Я запускаю код gensim word2vec в корпусе резюме (стоп-слова удалены), чтобы идентифицировать похожие контекстные слова в корпусе из списка заранее определенных ключевых слов.

Несмотря на несколько итераций с входными параметрами, удалением стоп-слов и т. Д., Похожие контекстные слова вообще не имеют смысла (с точки зрения расстояния или контекста) Например. корреляция и матрица встречаются в одном окне несколько раз, но матрица не попадает в большинство_подобных результатов для корреляции

Ниже приведены подробные сведения о системе и кодах gensim 2.3.0, работающих на Python 2.7. Резюме обучения Anaconda: 55 418 предложений. Среднее количество слов в предложении: 3-4 слова (после удаления игнорируемых слов) Код:

    wordvec_min_count=int()
    size = 50
    window=10
    min_count=5
    iter=50
    sample=0.001
    workers=multiprocessing.cpu_count()
    sg=1
    bigram = gensim.models.Phrases(sentences, min_count=10, threshold=5.0)
    trigram = gensim.models.Phrases(bigram[sentences], min_count=10, threshold=5.0)
    model=gensim.models.Word2Vec(sentences = trigram[sentences], size=size, alpha=0.005, window=window, min_count=min_count,max_vocab_size=None,sample=sample, seed=1, workers=workers, min_alpha=0.0001, sg=sg, hs=1, negative=0, cbow_mean=1,iter=iter)

model.wv.most_similar('correlation')
Out[20]: 
[(u'rankings', 0.5009744167327881),
 (u'salesmen', 0.4948525130748749),
 (u'hackathon', 0.47931140661239624),
 (u'sachin', 0.46358123421669006),
 (u'surveys', 0.4472047984600067),
 (u'anova', 0.44710394740104675),
 (u'bass', 0.4449636936187744),
 (u'goethe', 0.4413239061832428),
 (u'sold', 0.43735259771347046),
 (u'exceptional', 0.4313117265701294)]

Я не понимаю, почему результаты такие случайные? Есть ли способ проверить точность word2vec?

Также есть ли альтернатива word2vec для функции most_similar ()? Я читал о gloVE, но не смог установить пакет.

Любая информация по этому поводу будет полезна


person stack    schedule 11.09.2017    source источник


Ответы (1)


Включите ведение журнала на уровне ИНФОРМАЦИИ и убедитесь, что оно указывает на то, что происходит настоящее обучение. (То есть вы видите постепенный прогресс на протяжении ожидаемого количества текстов и ожидаемого количества итераций.)

Возможно, вы столкнулись с этой открытой проблемой в Phrases, когда запрашиваете Phrase- продвижение (как и trigram[sentences]) предлагает только одну итерацию, а не многократно повторяемый объект коллекции, который нужен Word2Vec.

Word2Vec необходимо пройти через корпус один раз для открытия словарного запаса, а затем еще раз iter для обучения. Если sentences или фразовые оболочки поддерживают только одноразовую итерацию, будет обнаружен только словарь - обучение закончится мгновенно, и модель будет казаться необученной.

Как вы увидите в этой проблеме, обходным путем является выполнение преобразования фраз и сохранение результатов в списке в памяти (если он подходит) или в отдельном корпусе текста на диске (который уже был объединен по фразам). Затем используйте для этого действительно перезапускаемый итеративный объект, который также сэкономит некоторую избыточную обработку.

person gojomo    schedule 11.09.2017