Saltar al contenido

SpaCy: ¿cómo cargar vectores word2vec de noticias de Google?

Este equipo de expertos luego de varios días de trabajo y de recopilar de información, han obtenido los datos necesarios, esperamos que todo este artículo sea de utilidad para tu proyecto.

Para spacy 1.x, cargue vectores de noticias de Google en gensim y conviértalos a un nuevo formato (cada línea en .txt contiene un solo vector: stringvec):

from gensim.models.word2vec import Word2Vec
from gensim.models import KeyedVectors
model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
model.wv.save_word2vec_format('googlenews.txt')

Elimina la primera línea del .txt:

tail -n +2 googlenews.txt > googlenews.new && mv -f googlenews.new googlenews.txt

Comprima el txt como .bz2:

bzip2 googlenews.txt

Cree un archivo binario compatible con SpaCy:

spacy.vocab.write_binary_vectors('googlenews.txt.bz2','googlenews.bin')

Mueva googlenews.bin a /lib/python/site-packages/spacy/data/en_google-1.0.0/vocab/googlenews.bin de su entorno de python.

Luego carga los vectores de palabras:

import spacy
nlp = spacy.load('en',vectors='en_google')

o cargarlos después más tarde:

nlp.vocab.load_vectors_from_bin_loc('googlenews.bin')

Sé que esta pregunta ya ha sido respondida, pero voy a ofrecer una solución más simple. Esta solución cargará vectores de noticias de Google en un objeto nlp espacioso en blanco.

import gensim
import spacy

# Path to google news vectors
google_news_path = "pathtogooglenews\GoogleNews-vectors-negative300.bin.gz"

# Load google news vecs in gensim
model = gensim.models.KeyedVectors.load_word2vec_format(gn_path, binary=True)

# Init blank english spacy nlp object
nlp = spacy.blank('en')

# Loop through range of all indexes, get words associated with each index.
# The words in the keys list will correspond to the order of the google embed matrix
keys = []
for idx in range(3000000):
    keys.append(model.index2word[idx])

# Set the vectors for our nlp object to the google news vectors
nlp.vocab.vectors = spacy.vocab.Vectors(data=model.syn0, keys=keys)

>>> nlp.vocab.vectors.shape
(3000000, 300)

Estoy usando spaCy v2.0.10.

Cree un archivo binario compatible con SpaCy:

spacy.vocab.write_binary_vectors('googlenews.txt.bz2','googlenews.bin')

Quiero resaltar que el código específico en la respuesta aceptada no funciona ahora. Encontré “AttributeError: …” cuando ejecuto el código.

Esto ha cambiado en spaCy v2. write_binary_vectors fue eliminado en v2. A partir de la documentación de spaCy, la forma actual de hacerlo es la siguiente:

$ python -m spacy init-model en /path/to/output -v /path/to/vectors.bin.tar.gz

¡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 *