python - machine - word2vec español
Python: gensim: RuntimeError: primero debes crear vocabulario antes de entrenar el modelo (2)
El min_count
predeterminado de min_count
en Word2Vec de gensim se establece en 5. Si no hay una palabra en su vocabulario con una frecuencia superior a 4, su vocabulario estará vacío y, por tanto, aparecerá el error. Tratar
voc_vec = word2vec.Word2Vec(vocab, min_count=1)
Sé que esta pregunta ya se ha hecho, pero todavía no pude encontrar una solución para ella.
Me gustaría usar el word2vec de word2vec
en un conjunto de datos personalizado, pero ahora todavía estoy pensando en qué formato debe tener el conjunto de datos. Eché un vistazo a este post donde la entrada es básicamente una lista de listas (una lista grande que contiene otras listas que son oraciones con token del corpus de NLTK Brown). Así que pensé que este es el formato de entrada que tengo que usar para el comando word2vec.Word2Vec()
. Sin embargo, no funcionará con mi pequeño conjunto de pruebas y no entiendo por qué.
Lo que he intentado:
Esto funcionó :
from gensim.models import word2vec
from nltk.corpus import brown
import logging
logging.basicConfig(format=''%(asctime)s : %(levelname)s : %(message)s'', level=logging.INFO)
brown_vecs = word2vec.Word2Vec(brown.sents())
Esto no funcionó :
sentences = [ "the quick brown fox jumps over the lazy dogs","yoyoyo you go home now to sleep"]
vocab = [s.encode(''utf-8'').split() for s in sentences]
voc_vec = word2vec.Word2Vec(vocab)
No entiendo por qué no funciona con los datos "simulados", aunque tiene la misma estructura de datos que las oraciones del corpus de Brown:
vocab
[[''the'', ''quick'', ''brown'', ''fox'', ''jumps'', ''over'', ''the'', ''lazy'', ''dogs''], [''yoyoyo'', ''you'', ''go'', ''home'', ''now'', ''to'', ''sleep'']]
brown.sents () : (el principio de ello)
[[''The'', ''Fulton'', ''County'', ''Grand'', ''Jury'', ''said'', ''Friday'', ''an'', ''investigation'', ''of'', "Atlanta''s", ''recent'', ''primary'', ''election'', ''produced'', ''``'', ''no'', ''evidence'', "''''", ''that'', ''any'', ''irregularities'', ''took'', ''place'', ''.''], [''The'', ''jury'', ''further'', ''said'', ''in'', ''term-end'', ''presentments'', ''that'', ''the'', ''City'', ''Executive'', ''Committee'', '','', ''which'', ''had'', ''over-all'', ''charge'', ''of'', ''the'', ''election'', '','', ''``'', ''deserves'', ''the'', ''praise'', ''and'', ''thanks'', ''of'', ''the'', ''City'', ''of'', ''Atlanta'', "''''", ''for'', ''the'', ''manner'', ''in'', ''which'', ''the'', ''election'', ''was'', ''conducted'', ''.''], ...]
¿Alguien por favor me puede decir qué estoy haciendo mal?
La entrada a Word2Vec de gensim puede ser una lista de oraciones o una lista de palabras o una lista de oraciones.
P.ej
1. sentences = [''I love ice-cream'', ''he loves ice-cream'', ''you love ice cream'']
2. words = [''i'',''love'',''ice - cream'', ''like'', ''ice-cream'']
3. sentences = [[''i love ice-cream''], [''he loves ice-cream''], [''you love ice cream'']]
construir el vocabulario antes de entrenar
model.build_vocab(sentences, update=False)