J'ai téléchargé un fichier vectoriel de gant non entrainé sur Internet. C'est un fichier .txt. Je suis incapable de charger et d'y accéder. Il est facile de charger et d’accéder à un fichier binaire vectoriel Word à l’aide de gensim mais je ne sais pas comment le faire quand il s’agit d’un format de fichier texte.
Merci d'avance
les fichiers de modèle de gant sont au format Word - vectoriel. Vous pouvez ouvrir le fichier texte pour vérifier cela. Voici un petit extrait de code que vous pouvez utiliser pour charger un fichier de gant pré-entraîné:
import numpy as np
def loadGloveModel(gloveFile):
print "Loading Glove Model"
f = open(gloveFile,'r')
model = {}
for line in f:
splitLine = line.split()
Word = splitLine[0]
embedding = np.array([float(val) for val in splitLine[1:]])
model[Word] = embedding
print "Done.",len(model)," words loaded!"
return model
Vous pouvez ensuite accéder aux vecteurs Word en utilisant simplement la variable de modèle.
print model['hello']
Vous pouvez le faire beaucoup plus vite avec les pandas:
import pandas as pd
import csv
words = pd.read_table(glove_data_file, sep=" ", index_col=0, header=None, quoting=csv.QUOTE_NONE)
Ensuite, pour obtenir le vecteur d'un mot:
def vec(w):
return words.loc[w].as_matrix()
Et pour trouver le mot le plus proche d'un vecteur:
words_matrix = words.as_matrix()
def find_closest_Word(v):
diff = words_matrix - v
delta = np.sum(diff * diff, axis=1)
i = np.argmin(delta)
return words.iloc[i].name
Je suggère d'utiliser gensim pour tout faire. Vous pouvez lire le fichier et bénéficier de nombreuses méthodes déjà implémentées sur cet excellent package.
Supposons que vous ayez généré GloVe vecteur en utilisant le programme C++ et que votre paramètre "-save-file" soit "vecteur". Le gant exécutable vous générera deux fichiers, "vectors.bin" et "vectors.txt".
Utilisez glove2Word2vec pour convertir les vecteurs GloVe au format texte au format texte Word2vec:
from gensim.scripts.glove2Word2vec import glove2Word2vec
glove2Word2vec(glove_input_file="vectors.txt", Word2vec_output_file="gensim_glove_vectors.txt")
Enfin, lisez le texte Word2vec d’un modèle de gensim à l’aide de KeyedVectors :
from gensim.models.keyedvectors import KeyedVectors
glove_model = KeyedVectors.load_Word2vec_format("gensim_glove_vectors.txt", binary=False)
Vous pouvez maintenant utiliser gensim Word2vec méthodes (par exemple, similarité) comme vous le souhaitez.
J'ai trouvé cette approche plus rapidement.
import pandas as pd
df = pd.read_csv('glove.840B.300d.txt', sep=" ", quoting=3, header=None, index_col=0)
glove = {key: val.values for key, val in df.T.items()}
Enregistrez le dictionnaire:
import pickle
with open('glove.840B.300d.pkl', 'wb') as fp:
pickle.dump(glove, fp)
Version Python3 qui gère également les bigrammes et les trigrammes:
import numpy as np
def load_glove_model(glove_file):
print("Loading Glove Model")
f = open(glove_file, 'r')
model = {}
vector_size = 300
for line in f:
split_line = line.split()
Word = " ".join(split_line[0:len(split_line) - vector_size])
embedding = np.array([float(val) for val in split_line[-vector_size:]])
model[Word] = embedding
print("Done.\n" + str(len(model)) + " words loaded!")
return model