web-dev-qa-db-de.com

Python: gensim: RuntimeError: Sie müssen zuerst Vokabeln erstellen, bevor Sie das Modell trainieren

Ich weiß, dass diese Frage bereits gestellt wurde, aber ich konnte immer noch keine Lösung dafür finden. 

Ich möchte gerne den Word2vec von gensim für einen benutzerdefinierten Datensatz verwenden, aber jetzt finde ich immer noch heraus, in welchem ​​Format der Datensatz sein muss. Ich habe einen Blick auf diesen Beitrag geworfen, bei dem die Eingabe im Wesentlichen eine Liste von Listen ist (eine große Liste, die andere Listen enthält, die aus dem NLTK-Brown-Corpus Token-Sätze sind). Also dachte ich, dass dies das Eingabeformat ist, das ich für den Befehl Word2vec.Word2Vec() verwenden muss. Es funktioniert jedoch nicht mit meinem kleinen Test-Set und ich verstehe nicht warum.

Was ich versucht habe:

Das funktionierte:

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

Das hat nicht funktioniert:

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)

Ich verstehe nicht, warum es mit den "Schein" -Daten nicht funktioniert, obwohl es dieselbe Datenstruktur wie die Sätze aus dem Brown-Corpus hat:

Vokabeln:

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

brown.sents (): (der Anfang davon)

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

Kann mir bitte jemand sagen, was ich falsch mache? 

16
user56591

Die Standardeinstellung min_count in Word2Vec von gensim ist auf 5 gesetzt. Wenn sich in Ihrem Vokabular kein Wort mit einer Häufigkeit von mehr als 4 befindet, ist Ihr Vokabular leer und daher der Fehler. Versuchen

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

Die Eingabe in das Word2Vec des Gensims kann eine Liste von Sätzen oder eine Liste von Wörtern oder eine Liste von Sätzen sein.

Z.B. 

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

Vokabeln vor dem Training aufbauen

model.build_vocab(sentences, update=False)

schau einfach auf den Link für detaillierte Informationen

0
Akson