2015-11-30 16 views
13

私はこの質問が既に尋ねられていることを知っていますが、それでも解決策を見つけることができませんでした。Python:gensim:RuntimeError:モデルをトレーニングする前に最初に語彙を構築する必要があります

カスタムデータセットでgensimのword2vecを使用したいと思っていますが、今はデータセットがどのようなフォーマットであるかを考えています。私はthis postを見ました。入力は基本的にリストのリストです(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) 

そうでない理由を私は理解していない、私が試してみました何

茶色のコーパスからの文章と同じデータ構造を持っているにもかかわらず、「モック」データを扱う:

単語

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

誰も私が間違ってやっているものを私に教えてくださいことはできますか?

答えて

31

デフォルトのmin_countはgensimのWord2Vecが5に設定されています。あなたのボキャブに4より大きい頻度の単語がない場合、あなたのボキャブは空になるためエラーになります。試してみてください

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

また、イテレータからデータが取得された場合は、データがまだ消費されていないことを確認してください。 – osa

0

gensimのWord2Vecへの入力は、文のリストまたは単語リストまたは文リストのリストです。

など。

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

ビルド単語kamptaによって示唆されるようにトレーニング

model.build_vocab(sentences, update=False) 

just check out the link for detailed info

-1

前に、min_countを減らしたり、単語の繰り返しを高めるためにコーパスを変更します。

関連する問題