web-dev-qa-db-fra.com

Python: gensim: RuntimeError: vous devez d'abord créer du vocabulaire avant de former le modèle

Je sais que cette question a déjà été posée, mais je n’étais toujours pas en mesure de trouver une solution. 

J'aimerais utiliser le Word2vec de gensim sur un ensemble de données personnalisé, mais je suis toujours en train de déterminer dans quel format cet ensemble de données doit être. J'ai jeté un œil à cet article où l'entrée est essentiellement une liste de listes (une grande liste contenant d'autres listes qui sont des phrases symbolisées du corpus NLTK Brown). J'ai donc pensé que c'était le format d'entrée que je devais utiliser pour la commande Word2vec.Word2Vec(). Cependant, cela ne fonctionnera pas avec mon petit ensemble de test et je ne comprends pas pourquoi.

Ce que j'ai essayé

Cela a fonctionné:

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())

Cela n'a pas fonctionné:

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)

Je ne comprends pas pourquoi cela ne fonctionne pas avec les données "fictives", même si elles ont la même structure de données que les phrases du corpus Brown:

vocab:

[['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dogs'], ['yoyoyo', 'you', 'go', 'home', 'now', 'to', 'sleep']]

brown.sents (): (le début de celui-ci)

[['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', '.'], ...]

Quelqu'un peut-il s'il vous plaît me dire ce que je fais mal? 

16
user56591

La valeur par défaut min_count dans Word2Vec de gensim est définie sur 5. S'il n'y a pas de mot dans votre vocabulaire avec une fréquence supérieure à 4, votre vocabulaire sera vide et donc l'erreur. Essayer

voc_vec = Word2vec.Word2Vec(vocab, min_count=1)
40
kampta

La saisie dans Word2Vec du gensim peut être une liste de phrases ou une liste de mots ou une liste de listes de phrases.

Par exemple. 

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']]

construire le vocabulaire avant l'entraînement

model.build_vocab(sentences, update=False)

il suffit de vérifier le lien pour plus d'informations

0
Akson