Saltar al contenido

¿Cómo usar word2vec para calcular la distancia de similitud dando 2 palabras?

Solución:

gensim tiene una implementación Python de Word2Vec que proporciona una utilidad incorporada para encontrar similitudes entre dos palabras dadas como entrada por el usuario. Puede consultar lo siguiente:

  1. Introducción: http://radimrehurek.com/gensim/models/word2vec.html
  2. Tutorial: http://radimrehurek.com/2014/02/word2vec-tutorial/

La sintaxis en Python para encontrar similitudes entre dos palabras es la siguiente:

>> from gensim.models import Word2Vec
>> model = Word2Vec.load(path/to/your/model)
>> model.similarity('france', 'spain')

Como tú sabes word2vec puede representar una palabra como un vector matemático. Entonces, una vez que entrenes el modelo, puedes obtener los vectores de las palabras spain y france y calcular la distancia del coseno (producto escalar).

Una forma fácil de hacer esto es utilizar este contenedor de Python de word2vec. Puede obtener el vector usando esto:

>>> model['computer'] # raw numpy vector of a word
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

Para calcular las distancias entre dos palabras, puede hacer lo siguiente:

>>> import numpy    
>>> cosine_similarity = numpy.dot(model['spain'], model['france'])/(numpy.linalg.norm(model['spain'])* numpy.linalg.norm(model['france']))

Me encontré con esto mientras buscaba cómo hacer esto modificando la versión original de distance.c, no usando otra biblioteca como gensim.

No encontré una respuesta, así que investigué un poco y la comparto aquí para otros que también quieran saber cómo hacerlo en la implementación original.

Después de mirar a través de la fuente de C, encontrará que ‘bi’ es una matriz de índices. Si proporciona dos palabras, el índice de word1 estará en bi[0] y el índice de word2 estará en bi[1].

El modelo ‘M’ es una matriz de vectores. Cada palabra se representa como un vector con dimensión ‘tamaño’.

Usando estos dos índices y el modelo de vectores, búsquelos y calcule la distancia del coseno (que es lo mismo que el producto escalar) de la siguiente manera:

dist = 0;
for (a = 0; a < size; a++) {
    dist += M[a + bi[0] * size] * M[a + bi[1] * size];
}

después de que esto se complete, el valor ‘dist’ es la similitud de coseno entre las dos palabras.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *