Doc2vec (gensim) - Como posso inferir o rótulo de frases invisíveis?

14

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

Por exemplo, se treinamos o doc2vec com

"aaaaaAAAAAaaaaaa" - "rótulo 1"

"BbbbbbBBBBBbbbb" - "rótulo 2"

podemos inferir que “aaaaAAAAaaaaAA” é o rótulo 1 usando o Doc2vec?

Eu sei que o Doc2vec pode treinar vetores de palavras e rótulos. Usando esses vetores, podemos inferir sentenças invisíveis (combinação de palavras treinadas) em qual rótulo?

Seongho
fonte

Respostas:

11

O título desta pergunta é uma pergunta separada para o seu texto, portanto, responderei ambas separadamente (considerando que uma leva à outra).

  1. Como deduzir frases invisíveis:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

Como é que isso funciona ? Conforme o artigo original ( https://cs.stanford.edu/~quocle/paragraph_vector.pdf ), temos duas matrizes de peso inicializadas aleatoriamente que é a mesma matriz do Word2Vec na qual cada coluna ou linha mapeia para um vetor de palavras e D R M × R, que é a matriz do documento em que cada coluna ou linha é mapeada para uma frase / documento. Durante o treinamento, um classificador softmax de tamanho de janela fixa k se move (de uma maneira que se mova como uma janela), minimizando a seguinte probabilidade de log (entropia cruzada de várias classes):WRN×PDRM×Rk

1MEu=1M1|DEu|t=k|DEu-1|-keuog(p(WtEu|Wt-kEu,...,Wt+kEu,DEu))

Onde corresponde ao vector representando o i t h frase, | D i | o número de palavras que documento e w i t é o t t hDEuEuth|DEu|WtEutth palavra no documento. Tudo o que a propagação de retorno lembra é o documento no qual estamos movendo nosso softmax de janela e atualiza apenas essa linha na matriz D, juntamente com as palavras nessa janela.EuthD

WD

  1. Podemos inferir que uma frase possivelmente invisível corresponde exatamente a uma frase no conjunto de treinamento?

D

Mesmo consertar a semente aleatória pode não funcionar, existem muitas outras variáveis ​​que podem afetar sua convergência. Consulte a primeira resposta em https://github.com/RaRe-Technologies/gensim/issues/374 .

Em qualquer caso, você pode encontrar o rótulo mais semelhante em seu conjunto de dados a uma frase inferida apenas iterando sobre seu conjunto de treinamento e comparando a semelhança com o vetor inferido. Mas por que você deseja fazer uma correspondência exata com algo no conjunto de treinamento? é isso que expressões regulares são para os propósitos dessas incorporações de documentos, para tarefas de aprendizado supervisionadas ou não supervisionadas (ou seja, classificação e agrupamento).

Francisco Vargas
fonte
0

Eu estava tentando resolver esse problema hoje e não encontrou nenhum módulo fornecido pelo gensim.Doc2Vec que calcula a similaridade entre o vetor de documento inferido que não está no modelo treinado e o modelo treinado. Então, basicamente, eu fiz isso.

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]))
Himanshu Rai
fonte
0

Com base no tutorial do Gensim Doc2Vec , você pode fazer algo assim.

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

Isso fornecerá uma lista de tuplas com todos os rótulos e a probabilidade associada ao seu novo documento pertencente a cada rótulo. então você pode simplesmente usar o maior valor como seu rótulo.

Amirhos Imani
fonte