Cómo encontrar la palabra más cercana a un vector usando word2vec

Acabo de empezar a usar Word2vec y me preguntaba cómo podemos encontrar la palabra más cercana a un vector, supongamos. Tengo este vector, que es el vector promedio para un conjunto de vectores:

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) 

¿Hay una forma directa de encontrar la palabra más similar en mis datos de entrenamiento a este vector?

¿O la única solución es calcular la similitud del coseno entre este vector y los vectores de cada palabra en mis datos de entrenamiento, luego seleccionar el más cercano?

Gracias.

Para la implementación gensim de word2vec, existe la función most_similar() que le permite encontrar palabras semánticamente cerca de una palabra dada:

 >>> model.most_similar(positive=['woman', 'king'], negative=['man']) [('queen', 0.50882536), ...] 

O a su representación vectorial:

 >>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) >>> model.most_similar(positive=[your_word_vector], topn=1)) 

donde topn define el número deseado de resultados devueltos.

Sin embargo, mi intuición es que la función hace exactamente lo mismo que usted propuso, es decir, calcula la similitud de coseno para el vector dado y para cada otro vector en el diccionario (lo cual es bastante ineficaz …)

No olvide agregar una matriz vacía con palabras negativas en la función most_similar :

 import numpy as np model_word_vector = np.array( my_vector, dtype='f') topn = 20; most_similar_words = model.most_similar( [ model_word_vector ], [], topn) 

Alternativamente, model.wv. similar_by_vector (vector, topn = 10, restrict_vocab = None) también está disponible en el paquete gensim .

Encuentra las palabras top-n más similares por vector.

Parámetros:

  • vector (numpy.array) – Vector a partir del cual se deben calcular las similitudes.

  • topn ({int, False}, opcional) – Número de palabras similares a la N superior a devolver. Si topn es False, similar_by_vector devuelve el vector de puntuaciones de similitud.

  • restrict_vocab (int, opcional) – Entero opcional que limita el rango de vectores en los que se buscan los valores más similares. Por ejemplo, restrict_vocab = 10000 solo verificará los primeros 10000 vectores de palabras en el orden de vocabulario. (Esto puede ser significativo si ha ordenado el vocabulario por frecuencia descendente).

Devoluciones: Secuencia de (palabra, similitud).

Tipo de retorno: lista de (str, float)