usar paper min_count medium funciona for español dummies como word2vec

paper - word2vec medium



Cómo usar word2vec para calcular la distancia de similitud al dar 2 palabras (4)

Word2vec es una herramienta de código abierto para calcular la distancia de palabras proporcionada por Google. Se puede usar ingresando una palabra y generando las listas de palabras clasificadas según la similitud. p.ej

Entrada:

france

Salida:

Word Cosine distance spain 0.678515 belgium 0.665923 netherlands 0.652428 italy 0.633130 switzerland 0.622323 luxembourg 0.610033 portugal 0.577154 russia 0.571507 germany 0.563291 catalonia 0.534176

Sin embargo, lo que necesito hacer es calcular la distancia de similitud dando 2 palabras. Si doy ''francia'' y ''españa'', ¿cómo puedo obtener el puntaje 0.678515 sin leer toda la lista de palabras con solo ''francia''?


Como saben, word2vec puede representar una palabra como un vector matemático. Así que una vez que entrenas el modelo, puedes obtener los vectores de las palabras spain y france y calcular la distancia del coseno (producto puntual).

Una forma fácil de hacer esto es usar this envoltorio Python de word2vec. Puedes 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 topé con esto mientras buscaba cómo hacerlo modificando la versión original de distance.c, no utilizando otra biblioteca como gensim.

No encontré una respuesta, así que investigué un poco y lo estoy compartiendo 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 para 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 la misma que el producto de puntos) de esta 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 completa, el valor ''dist'' es la similitud del coseno entre las dos palabras.


gensim tiene una implementación Python de Word2Vec que proporciona una utilidad incorporada para encontrar similitudes entre dos palabras dadas por el usuario. Puede referirse a 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 similitud entre dos palabras es la siguiente:

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