Doc2vec (gensim) - Как я могу вывести ярлык невидимых предложений?

14

https://radimrehurek.com/gensim/models/doc2vec.html

Например, если мы обучили doc2vec с

"aaaaaAAAAAaaaaaa" - "ярлык 1"

«BbbbbbBBBBBbbbb» - «метка 2»

мы можем сделать вывод, что «aaaaAAAAaaaaAA» - это метка 1 с использованием Doc2vec?

Я знаю, что Doc2vec может обучать векторы слов и метить векторы. Используя эти векторы, можем ли мы вывести невидимые предложения (комбинацию обученных слов) в каком ярлыке?

Seongho
источник

Ответы:

11

Название этого вопроса является отдельным вопросом к его тексту, поэтому я отвечу на оба по отдельности (учитывая, что один ведет в другой).

  1. Как я могу вывести невидимые предложения:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

Как это работает ? Согласно исходной статье ( https://cs.stanford.edu/~quocle/paragraph_vector.pdf ) у нас есть две весовые матрицы, инициализированные случайным образом которые являются той же самой матрицей из Word2Vec, в которой каждый столбец или строка отображается на слово vector и D R M × R, который является матрицей документа, где каждый столбец или строка отображается на предложение / документ. Во время обучения классификатор softmax фиксированного размера окна k перемещается (в движущемся окне по типу моды), сводя к минимуму следующую логарифмическую вероятность (мультиклассовая кросс-энтропия):WрN×пDрM×рК

1MΣязнак равно1M1|Dя|ΣTзнак равноК|Dя-1|-КLограмм(п(весTя|весT-Кя,,,,,весT+Кя,Dя))

Где соответствует вектору, представляющему i t h предложение, | D я | его количество слов в этом документе , и ш я т является т т ч слово в я т ч документа. Все, что запоминает обратное распространение, - это документ, по которому мы сейчас перемещаем наш оконный softmax, и обновляет только эту строку в матрице D вместе со словами в этом окне.DяяTчас|Dя|весTяTTчасяTчасD

WD

  1. Можем ли мы сделать вывод, что возможно невидимое предложение точно соответствует предложению в обучающем наборе?

D

Даже исправление случайного начального числа может не сработать, так как существует множество других переменных, которые могут повлиять на его сходимость, см. Первый ответ на https://github.com/RaRe-Technologies/gensim/issues/374 .

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

Франсиско Варгас
источник
0

Сегодня я пытался решить эту проблему, и я не нашел ни одного модуля, предоставленного gensim.Doc2Vec, который вычислял бы сходство между выведенным вектором документа, который не в обученной модели, и тем, что в обученной модели. В общем, я сделал это.

from scipy import spatial
inferred_vector=model.infer_vector(sentence.split())
for labels in labelled_documents:
    print (1-  spatial.distance.cosine(inferred_vector,model.docvecs[labels]))
Химаншу Рай
источник
0

На основе Gensim Doc2Vec учебник , вы можете сделать что - то вроде этого.

inferred_vector = model_dmm.infer_vector(sentence.split())
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

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

Амирхос Имани
источник