Encontrar la analogía de palabras a partir de palabras dadas usando incrustaciones de Word2Vec

En muchas rondas de exámenes de ubicación, a menudo nos encontramos con una pregunta básica para encontrar analogías de palabras. En la tarea de analogía de palabras, completamos la oración “ a es a b como c es a ___ ”, que a menudo se representa como a : b::c : dy tenemos que encontrar la palabra ‘d’. Una pregunta de muestra puede ser: ‘ el hombre es a la mujer como el rey es a ___ ‘. 

El cerebro humano puede reconocer que el espacio en blanco debe llenarse con la palabra ‘ reina ‘. Pero para que una máquina entienda este patrón y llene el espacio en blanco con la palabra más apropiada requiere mucho entrenamiento. ¿Qué pasa si podemos usar un algoritmo de aprendizaje automático para automatizar esta tarea de encontrar la palabra analogía? En este tutorial, usaremos el modelo Word2Vec y un modelo preentrenado llamado ‘ GoogleNews-vectors-negative300.bin ‘ que Google entrena en más de 50 mil millones de palabras. Cada palabra dentro del conjunto de datos previamente entrenado se incrusta en un espacio de 300 dimensiones y las palabras que son similares en contexto/significado se colocan más cerca unas de otras en el espacio.

Metodología para encontrar la palabra análoga:

En este problema, nuestro objetivo es encontrar una palabra d , tal que los vectores de palabras asociados va, vb, vc, vd estén relacionados entre sí en la siguiente relación: ‘ vb – va = vd – vc ‘. Mediremos la similitud entre vb-va y vd-vc utilizando la similitud del coseno.

Importación de bibliotecas importantes:

Necesitamos instalar una biblioteca gensim adicional , para usar el modelo word2vec, para instalar gensim use el comando pip install gensim en su terminal/símbolo del sistema.

Python3

import numpy as np
import gensim
from gensim.models import word2vec,KeyedVectors
from sklearn.metrics.pairwise import cosine_similarity

Cargando los vectores de palabras usando el modelo pre-entrenado:

Python3

vector_word_notations = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin',binary=True)

Definición de una función para predecir palabras análogas:

Python3

def analogous_word(word_1,word_2,word_3,vector_word_notations):
    ''' The function accepts a triad of words, word_1, word_2, word_3 and returns word_4 such that word_1:word_2::word_3:word_4 '''
      
    # converting each word to its lowercase
    word_1,word_2,word_3 = word_1.lower(),word_2.lower(),word_3.lower()
      
    # Similarity between |word_2-word_1| = |word_4-word_3| should be maximum
    maximum_similarity = -99999
      
    word_4 = None
      
    words = vector_word_notations.vocab.keys()
      
    va,vb,vc = vector_word_notations[word_1],\
    vector_word_notations[word_2],vector_word_notations[word_3]
      
    # to find word_4 such that similarity
    # (|word_2 - word_1|, |word_4 - word_3|) should be maximum
      
    for i in words:
        if i in [word_1,word_2,word_3]:
            continue
          
        wvec = vector_word_notations[i]
        similarity = cosine_similarity(,[wvec-vc])
          
        if similarity > maximum_similarity:
            maximum_similarity = similarity
            word_4 = i     
  
    return word_4

Probando nuestro modelo:

Python3

triad_1 = ("Man","Woman","King")
# *triad_1 is written to unpack the elements in the tuple
output = analogous_word(*triad_1,word_vectors) 
print(output)
  
# The output will be shown as queen

Publicación traducida automáticamente

Artículo escrito por saurabh48782 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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