texto machine learning español clasificador clasificacion analisis python gensim word2vec

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)

solo echa un vistazo al enlace para información detallada