Doc2vec - О получении вектора документа

Я совсем недавно изучаю doc2vec и у меня есть вопросы о векторе документа. Я пытаюсь получить векторную фразу вроде «кошачье млекопитающее». Итак, что я пробовал до сих пор, используя предварительно обученную модель doc2vec, я пробовал код ниже

import gensim.models as g
model = "path/pre-trained doc2vec model.bin"
m = g. Doc2vec.load(model)
oneword = 'cat'
phrase = 'cat like mammal'
oneword_vec = m[oneword]
phrase_vec = m[phrase_vec]

Когда я попробовал этот код, я смог получить вектор для одного слова «кошка», но не «кошачье млекопитающее». Потому что word2vec предоставляет вектор только для одного слова, например «кошка», верно? (Если я ошибаюсь, пожалуйста, поправьте меня) Итак, я поискал и нашел infer_vector () и попробовал код ниже

phrase = phrase.lower().split(' ')
phrase_vec = m.infer_vector(phrase)

Когда я пробовал этот код, я мог получить вектор, но каждый раз я получаю другое значение, когда пробовал строку_vec = m.infer_vector (фраза), потому что infer_vector имеет «шаги».

Когда я устанавливаю step = 0, я всегда получаю один и тот же вектор. фраза_век = m.infer_vector (фраза, шаги = 0)

Однако я также обнаружил, что вектор документа получается из усреднения слов в документе. например, если документ состоит из трех слов, «кошачье млекопитающее», добавьте три вектора «кошка», «подобное», «млекопитающее», а затем усредните их, это будет вектор документа. (Если я ошибаюсь, пожалуйста, поправьте меня)

Итак, вот несколько вопросов.

  1. Правильно ли использовать infer_vector () с 0 шагами для получения вектора фразы?
  2. Если это правильный вектор усреднения слов для получения вектора документа, разве нет необходимости использовать infer_vector ()?
  3. Для чего нужен файл model.docvecs?

person Chhyun    schedule 13.08.2018    source источник


Ответы (1)


Использование 0 шагов означает, что никакого вывода не происходит: вектор остается в своей случайно инициализированной позиции. Так что вы точно этого не хотите. То, что векторы для одного и того же текста немного различаются каждый раз, когда вы запускаете infer_vector(), это нормально: алгоритм использует случайность. Важно то, что они похожи друг на друга с небольшим допуском. Вы с большей вероятностью сделаете их более похожими (но все же не идентичными) с помощью большего steps значения.

Вы также можете увидеть запись об этом недетерминизме в Doc2Vec обучении или выводе в FAQ по gensim.

Усреднение векторов слов для получения вектора документа - один из полезных методов, который может быть хорош в качестве простой основы для многих целей. Но это не то же самое, что делает Doc2Vec.infer_vector(), который включает в себя итеративную настройку вектора-кандидата, чтобы он лучше и лучше предсказывал слова текста, точно так же, как Doc2Vec обучение. Чтобы ваш doc-вектор был сопоставим с другими doc-векторами, созданными во время обучения модели, вы должны использовать infer_vector().

Объект model.docvecs содержит все doc-векторы, которые были изучены во время обучения модели, для поиска (по тегам, указанным в качестве их имен во время обучения) или для других операций, таких как поиск most_similar() N doc-векторов для целевого тега / вектора среди изученных во время тренировки.

person gojomo    schedule 13.08.2018
comment
спасибо за ваше любезное объяснение. это очень полезно! - person Chhyun; 14.08.2018