web-dev-qa-db-ja.com

Python:gensim:RuntimeError:モデルをトレーニングする前に、まず語彙を構築する必要があります

この質問は既に尋ねられていることは知っていますが、それでも解決策を見つけることができませんでした。

カスタムデータセットでgensimの_Word2vec_を使用したいのですが、今でもデータセットの形式を把握しています。私は この投稿 を見て、入力は基本的にリストのリスト(NLTKブラウンコーパスからのトークン化された文である他のリストを含む1つの大きなリスト)です。だから私はこれが私がコマンド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)
_

ブラウンコーパスの文と同じデータ構造を持っているにもかかわらず、「模擬」データで機能しない理由がわかりません。

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

誰かが私が間違っていることを教えてもらえますか?

19
user56591

デフォルト min_count in gensimのWord2Vecは5に設定されています。語彙に4より大きい頻度の語がない場合、語彙は空になり、エラーになります。試す

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

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

トレーニング前に語彙を作成します

model.build_vocab(sentences, update=False)

詳細情報についてはリンクをチェックしてください

2
Akson