質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

3101閲覧

chainerでCNN用いて文書分類をするプログラムを動かしたい

hanpanai-tumi

総合スコア26

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/12/20 00:42

###前提・実現したいこと
https://qiita.com/ichiroex/items/7ff1cff3840520cf2410
を参考にして、CNNを実行した所、以下の警告が発生しました

###発生している問題・エラーメッセージ

File "train_sc-cnn.py", line 213, in <module> main() File "train_sc-cnn.py", line 205, in main model, optimizer = train(args) File "train_sc-cnn.py", line 91, in train dataset, height, width = util.load_data(args.data) File "/home/ikeuchi/chainer-cnn/util.py", line 24, in load_data model = word2vec.Word2Vec.load_word2vec_format(bin_filename, binary=True) File "/home/ikeuchi/anaconda3/envs/py2.7.1/lib/python2.7/site-packages/gensim/utils.py", line 1302, in new_func1 return func(*args, **kwargs) File "/home/ikeuchi/anaconda3/envs/py2.7.1/lib/python2.7/site-packages/gensim/models/word2vec.py", line 1608, in load_word2vec_format raise DeprecationWarning("Deprecated. Use gensim.models.KeyedVectors.load_word2vec_format instead.") DeprecationWarning: Deprecated. Use gensim.models.KeyedVectors.load_word2vec_format instead.

###該当のソースコード

python2.7

1# coding: utf-8 2import os 3import numpy as np 4from gensim.models import word2vec 5 6def _padding(document_list, max_len): 7 8 new_document_list = [] 9 for doc in document_list: 10 pad_line = ['<pad>' for i in range(max_len - len(doc))] #全ての文書の単語数を合わせる 11 new_document_list.append(doc + pad_line) 12 return new_document_list 13 14""" 15word2vecのモデルまでPATH 16""" 17bin_filename = 'Result_200.w2v' 18 19def load_data(fname): 20 21 print 'input file name:', fname 22 23 print 'loading word2vec model...' 24 model = word2vec.Word2Vec.load_word2vec_format(bin_filename, binary=True) 25 26 27 """ 28 文書リストを作成。 29 ex) [[word, word, ... , word], [word, ... , word], ... ] 30 """ 31 target = [] #ラベル 32 source = [] #文書ベクトル 33 document_list = [] 34 for l in open(fname, 'r').readlines(): 35 sample = l.strip().split(' ', 1) 36 label = sample[0] 37 target.append(label) #ラベル 38 document_list.append(sample[1].split()) #文書ごとの単語リスト 39 40 """ 41 読み込んだword2vec modelに定義されていない単語を<unk>に置換したい。 42 """ 43 max_len = 0 44 rev_document_list = [] # 未知語処理後のdocument list 45 for doc in document_list: 46 rev_doc = [] 47 for word in doc: 48 try: 49 word_vec = np.array(model[word]) #未知語の場合, KeyErrorが起きる(わざと起こす) 50 rev_doc.append(word) 51 except KeyError: 52 rev_doc.append('<unk>') #未知語 53 rev_document_list.append(rev_doc) 54 #文書の最大長を求める(padding用) 55 if len(rev_doc) > max_len: 56 max_len = len(rev_doc) 57 58 """ 59 文長をpaddingにより合わせる 60 """ 61 rev_document_list = _padding(rev_document_list, max_len) 62 63 64 """ 65 文書をベクトル化する 66 """ 67 vector_length = len(model.seeded_vector('<unk>')) #単語の次元数 (embeddingの次元数) 68 for doc in rev_document_list: 69 doc_vec = [] 70 for word in doc: 71 try: 72 vec = model[word.decode('utf-8')] 73 except KeyError: 74 vec = model.seeded_vector(word) 75 doc_vec.extend(vec) 76 source.append(doc_vec) 77 78 dataset = {} 79 dataset['target'] = np.array(target) 80 dataset['source'] = np.array(source) 81 82 return dataset, max_len, vector_length 83 84 85def load_data_with_rand_vec(fname): 86 87 print 'input file name:', fname 88 89 print 'loading word2vec model...' 90 model = word2vec.Word2Vec(None, size=300) 91 92 target = [] #ラベル 93 source = [] #文書ベクトル 94 95 #文書リストを作成 96 document_list = [] 97 for l in open(fname, 'r').readlines(): 98 sample = l.strip().split(' ', 1) 99 label = sample[0] 100 target.append(label) #ラベル 101 document_list.append(sample[1].split()) #文書ごとの単語リスト 102 103 max_len = 0 104 rev_document_list = [] #未知語処理後のdocument list 105 for doc in document_list: 106 rev_doc = [] 107 for word in doc: 108 try: 109 #word_vec = np.array(model[word]) #未知語の場合, KeyErrorが起きる 110 rev_doc.append(word) 111 except KeyError: 112 rev_doc.append('<unk>') #未知語 113 rev_document_list.append(rev_doc) 114 #文書の最大長を求める(padding用) 115 if len(rev_doc) > max_len: 116 max_len = len(rev_doc) 117 118 #文書長をpaddingにより合わせる 119 rev_document_list = _padding(rev_document_list, max_len) 120 121 width = 0 #各単語の次元数 122 #文書の特徴ベクトル化 123 for doc in rev_document_list: 124 doc_vec = [] 125 for word in doc: 126 vec = model.seeded_vector(word) 127 doc_vec.extend(vec) 128 width = len(vec) 129 source.append(doc_vec) 130 131 dataset = {} 132 dataset['target'] = np.array(target) 133 dataset['source'] = np.array(source) 134 135 return dataset, max_len, width

###試したこと

model = word2vec.Word2Vec.load_word2vec_format(bin_filename, binary=True)
の部分を
model = gensim.models.KeyedVectors.load_word2vec_format(bin_filename, bina
ry=True)
とした所、読み込みは上手くいくのですが

Traceback (most recent call last):
File "train_sc-cnn.py", line 213, in <module>
main()
File "train_sc-cnn.py", line 205, in main
model, optimizer = train(args)
File "train_sc-cnn.py", line 91, in train
dataset, height, width = util.load_data(args.data)
File "/home/ikeuchi/chainer-cnn/util.py", line 24, in load_data
model = gensim.models.KeyedVectors.load_word2vec_format(bin_filename, binary=True)
NameError: global name 'gensim' is not defined
とエラーが出ました

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

y2j-riondさんが試した修正の方向は正しいと思います。(以下の部分)

model = gensim.models.KeyedVectors.load_word2vec_format(bin_filename, bina\ ry=True)

gensimが見つからないとのことでしたが、単純に以下を冒頭で行えば、読み込めるかなと思います。

import gensim

だめだったら、パスがうまく通ってないか、
実行しているpythonが実は思ってたのと別のpythonだったりするみたいな類と思います。
ひとまず、お試しを。

投稿2017/12/20 01:27

naosk8

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanpanai-tumi

2017/12/24 08:37

ご回答ありがとうございました。 無事に動かす事が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問