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