Подтвердить что ты не робот

Python: gensim: RuntimeError: вы должны сначала создать словарь перед обучением модели

Я знаю, что этот вопрос уже задан, но я все еще не смог найти решение для него.

Я хотел бы использовать gensim word2vec в пользовательском наборе данных, но теперь я все еще выясняю, в каком формате должен располагаться набор данных. Я просмотрел этот пост, где входной файл в основном представляет собой список списков (один большой список, содержащий другие списки, которые являются токенированными предложениями из корпуса NLTK Brown). Поэтому я подумал, что это формат ввода, который я должен использовать для команды word2vec.Word2Vec(). Однако это не сработает с моим небольшим набором тестов, и я не понимаю, почему.

Что я пробовал:

Это сработало:

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

Это не работает:

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)

Я не понимаю, почему он не работает с "макетными" данными, хотя он имеет ту же структуру данных, что и предложения из корпуса Brown:

Словарь

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

brown.sents(): (начало его)

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

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

4b9b3361

Ответ 1

По умолчанию min_count в gensim Word2Vec устанавливается значение 5. Если в вашем vocab нет слова с частотой больше 4, ваш vocab будет пустым и, следовательно, ошибкой. Попробуйте

voc_vec = word2vec.Word2Vec(vocab, min_count=1)