Q&A
前提
word2vecでレビューの名詞を学習させて,その名詞の分散表現を取得したいと考えています.実装はできているのですが,期待通りに動きません.
実現したいこと
- word2vecコーパスを学習させる.
- コーパスの全単語を学習させる.
発生している問題
ソースコード1のword_listにはレビュー文の名詞が二次元リストの形式で格納されています.len(c)では,そのリストに格納されている名詞を重複なしでカウントしています.その結果は2728と出力されています.
しかし,ソースコード2では,452件の単語しか学習できていないことが確認できます.また,「昼過ぎ」という単語の分散表現を取得しようとしたところ,該当する単語がないとエラーが出力されます.もちろん,word_listの中に「昼過ぎ」があることは確認済みです.
この問題を解決したく,2728件の単語を学習させたいです.また,エラーメッセージ1の警告も気になります.batch_wordsを小さくすることを推奨されているようですが,このbatch_wordsがどこに該当するのかもわかりません.
どなたかわかる方,お教えいただければ幸いです.
該当のソースコード1
python
1# Word2Vecライブラリのロード 2from gensim.models import word2vec 3from collections import Counter 4import collections 5 6# size: 圧縮次元数 7# min_count: 出現頻度の低いものをカットする 8# window: 前後の単語を拾う際の窓の広さを決める 9# iter: 機械学習の繰り返し回数(デフォルト:5)十分学習できていないときにこの値を調整する 10# model.wv.most_similarの結果が1に近いものばかりで、model.dict['wv']のベクトル値が小さい値ばかりの 11# ときは、学習回数が少ないと考えられます。 12# その場合、iterの値を大きくして、再度学習を行います。 13 14# 事前準備したword_listを使ってWord2Vecの学習実施 15 16#docs = word2vec.LineSentence("/content/test1.txt") 17 18 19for words in word_list: 20 for word in words: 21 new_word.append(word) 22c = collections.Counter(new_word) 23print(len(c)) 24 25 26model = word2vec.Word2Vec(word_list, sg = 1, size=100, min_count=5, window=5, iter=10) 27 28 29model.save("kokoro.model")
エラーメッセージ1
2728 WARNING:gensim.models.base_any2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay
該当のソースコード2
python
1print("分散表現の形状:\n{}".format(model.wv.vectors.shape)) 2 3 4 5分散表現の形状: 6(452, 100)
エラーメッセージ1
KeyError Traceback (most recent call last) <ipython-input-71-703caa5902ad> in <module> ----> 1 print(model.__dict__['wv']['昼過ぎ']) 2 frames /usr/local/lib/python3.8/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm) 450 return result 451 else: --> 452 raise KeyError("word '%s' not in vocabulary" % word) 453 454 def get_vector(self, word): KeyError: "word '昼過ぎ' not in vocabulary"
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/01/12 09:15