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

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

ただいまの
回答率

90.51%

  • Python 2.7

    1264questions

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

  • 深層学習

    146questions

  • Chainer

    144questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 611

y2j-riondo

score 15

前提・実現したいこと

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.

該当のソースコード

# coding: utf-8
import os
import numpy as np
from gensim.models import word2vec

def _padding(document_list, max_len):

    new_document_list = []
    for doc in document_list:
        pad_line = ['<pad>' for i in range(max_len - len(doc))] #全ての文書の単語数を合わせる
        new_document_list.append(doc + pad_line)
    return new_document_list

"""
word2vecのモデルまでPATH
"""
bin_filename = 'Result_200.w2v'

def load_data(fname):

    print 'input file name:', fname

    print 'loading word2vec model...'
    model =  word2vec.Word2Vec.load_word2vec_format(bin_filename, binary=True)


    """
    文書リストを作成。
    ex) [[word, word, ... , word], [word, ... , word], ... ]
    """
    target = [] #ラベル
    source = [] #文書ベクトル
    document_list = []
    for l in open(fname, 'r').readlines():
        sample = l.strip().split(' ',  1)
        label = sample[0]
        target.append(label) #ラベル
        document_list.append(sample[1].split()) #文書ごとの単語リスト

    """
    読み込んだword2vec modelに定義されていない単語を<unk>に置換したい。
    """
    max_len = 0
    rev_document_list = [] # 未知語処理後のdocument list
    for doc in document_list:
        rev_doc = []
        for word in doc:
            try:
                word_vec = np.array(model[word]) #未知語の場合, KeyErrorが起きる(わざと起こす)
                rev_doc.append(word)
            except KeyError:
                rev_doc.append('<unk>') #未知語
        rev_document_list.append(rev_doc)
        #文書の最大長を求める(padding用)
        if len(rev_doc) > max_len:
            max_len = len(rev_doc)

    """
    文長をpaddingにより合わせる
    """
    rev_document_list = _padding(rev_document_list, max_len)


    """
    文書をベクトル化する
    """
    vector_length = len(model.seeded_vector('<unk>')) #単語の次元数 (embeddingの次元数)
    for doc in rev_document_list:
        doc_vec = []
        for word in doc:
            try:
                vec = model[word.decode('utf-8')]
            except KeyError:
                vec = model.seeded_vector(word)
            doc_vec.extend(vec)
        source.append(doc_vec)

    dataset = {}
    dataset['target'] = np.array(target)
    dataset['source'] = np.array(source)

    return dataset, max_len, vector_length


def load_data_with_rand_vec(fname):

    print 'input file name:', fname

    print 'loading word2vec model...'
    model =  word2vec.Word2Vec(None, size=300)

    target = [] #ラベル
    source = [] #文書ベクトル

    #文書リストを作成
    document_list = []
    for l in open(fname, 'r').readlines():
        sample = l.strip().split(' ',  1)
        label = sample[0]
        target.append(label) #ラベル
        document_list.append(sample[1].split()) #文書ごとの単語リスト

    max_len = 0
    rev_document_list = [] #未知語処理後のdocument list
    for doc in document_list:
        rev_doc = []
        for word in doc:
            try:
                #word_vec = np.array(model[word]) #未知語の場合, KeyErrorが起きる
                rev_doc.append(word)
            except KeyError:
                rev_doc.append('<unk>') #未知語
        rev_document_list.append(rev_doc)
        #文書の最大長を求める(padding用)
        if len(rev_doc) > max_len:
            max_len = len(rev_doc)

    #文書長をpaddingにより合わせる
    rev_document_list = _padding(rev_document_list, max_len)

    width = 0 #各単語の次元数
    #文書の特徴ベクトル化
    for doc in rev_document_list:
        doc_vec = []
        for word in doc:
            vec = model.seeded_vector(word)
            doc_vec.extend(vec)
            width = len(vec)
        source.append(doc_vec)

    dataset = {}
    dataset['target'] = np.array(target)
    dataset['source'] = np.array(source)

    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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

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

import gensim

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/24 17:37

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    機械学習のCNN

    機械学習のCNNについて GPU無しでCNNを動かすことは可能ですか?

  • 受付中

    TensorFlowを用いた画像認識(CNN法)で用いる画像のサイズが分からない.

    以下のコードでCNNを用いたニューラルネットワークを構築する際,データセットの画像サイズを統一しなければならないか知りたいです. どなたか詳しい方教えて頂けませんでしょうか.

  • 受付中

    CNNで生成したモデルをGradCAMアルゴリズムで可視化したい

    初めまして,深層学習を学んでいる者です。 現在,CNNで画像を学習し,5つの物体の画像認識をしています。 CNNで生成したモデルの可視化を行うために,Grad-CAMアルゴリズムを

  • 解決済

    chainerによるCNN構築時のエラーに対処できません。

    現在、CNNを用いて画像の2値分類を実行しようとしています。 画像は縦5横20チャンネル数3で、それぞれに0か1が割り当てられています。 またそれぞれの画像は1枚ずつあります(訓練

  • 解決済

    CNNの比較、改善点

     知りたいこと cyfer10に使用したCNNでなぜこのような差が出たのか、してはいけないことが含まれていたのか。 aidemyに使われていたCNNと層よりも、より層を増やして適当

  • 解決済

    Tensorflow, kerasで作成したCNNモデルの使い方

     やりたいこと APIで画像分析を今までやってきましたが、もっと深い画像分析をやりたいと思いtensorflowとkerasを使って勉強をはじめました。まずは、イメージを掴むためk

  • 解決済

    KerasでSegnetを行いたい

    https://teratail.com/questions/131885#reply-200116 以前質問させていただいた部分は解決したのですが別の部分でエラーがでてしまいまし

  • 解決済

    CNNのエラーを解決したい

     前提・実現したいこと Pythonを使ってTensorflowでCNNを作ろうとしてましたが、エラーが発生してしまいました。どこのエラーでどういうエラーなのかも分かりません。 C

同じタグがついた質問を見る

  • Python 2.7

    1264questions

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

  • 深層学習

    146questions

  • Chainer

    144questions

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