Doc2vec (gensim) - ¿Cómo puedo inferir la etiqueta de oraciones no vistas?

14

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

Por ejemplo, si hemos entrenado doc2vec con

"aaaaaAAAAAaaaaaa" - "etiqueta 1"

"BbbbbbBBBBBbbbb" - "etiqueta 2"

¿podemos inferir que "aaaaAAAAaaaaAA" ​​es la etiqueta 1 usando Doc2vec?

Sé que Doc2vec puede entrenar vectores de palabras y vectores de etiquetas. Usando estos vectores, ¿podemos inferir oraciones invisibles (combinación de palabras entrenadas) en qué etiqueta?

Seongho
fuente

Respuestas:

11

El título de esta pregunta es una pregunta separada de su texto, por lo que responderé ambas por separado (dado que una lleva a la otra).

  1. ¿Cómo puedo inferir oraciones invisibles?
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

Como funciona esto ? Según el documento original ( https://cs.stanford.edu/~quocle/paragraph_vector.pdf ) tenemos dos matrices de peso inicializadas al azar que es la misma matriz de Word2Vec en la que cada columna o fila se asigna a un vector de palabras y D R M × R, que es la matriz del documento donde cada columna o fila se asigna a una oración / documento. Durante el entrenamiento, un clasificador softmax de ventana fija de tamaño k se mueve (de manera similar a una ventana móvil) minimizando la siguiente probabilidad de registro (entropía cruzada multiclase):WRnorte×PAGreRMETRO×Rk

1METROyo=1METRO1El |reyoEl |t=kEl |reyo-1El |-klosol(pag(wtyoEl |wt-kyo,...,wt+kyo,reyo))

Donde corresponde al vector que representa la oración i t h , | D i | su número de palabras en ese documento y w i t es la palabra t t h en el documento i t h . Todo lo que recuerda la propagación hacia atrás es el documento sobre el que actualmente estamos moviendo nuestro softmax con ventana y solo actualiza esa fila en la matriz D junto con las palabras en esa ventana.reyoyothEl |reyoEl |wtyotthyothre

Wre

  1. ¿Podemos inferir que una oración posiblemente invisible corresponde exactamente a una oración en el conjunto de entrenamiento?

re

Incluso arreglar la semilla aleatoria puede no funcionar, hay tantas otras variables que pueden afectar su convergencia, consulte la primera respuesta en https://github.com/RaRe-Technologies/gensim/issues/374 .

En cualquier caso, puede encontrar la etiqueta más similar en su conjunto de datos a una oración inferida simplemente iterando sobre su conjunto de entrenamiento y comparando la similitud con el vector inferido. Pero, ¿por qué querrías hacer una coincidencia exacta con algo en el conjunto de entrenamiento? eso es lo que las expresiones regulares son para el propósito de la inserción de estos documentos es para tareas de aprendizaje supervisadas o no supervisadas (es decir, clasificación y agrupamiento).

Francisco Vargas
fuente
0

Intenté resolver este problema hoy, y no pude encontrar ningún módulo dado por gensim.Doc2Vec que calcule la similitud entre el vector de documento inferido que no está en el modelo entrenado con los del modelo entrenado. Así que básicamente hice esto.

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
fuente
0

Basado en el tutorial Gensim Doc2Vec , puede hacer algo como esto.

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

Esto le dará una lista de tuplas con todas las etiquetas y la probabilidad asociada con su nuevo documento que pertenece a cada etiqueta. entonces simplemente puede tomar el valor más grande como su etiqueta.

Amirhos Imani
fuente