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

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

ただいまの
回答率

90.61%

  • Python

    7509questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pythonのプログラムが途中で動かなくなる

受付中

回答 1

投稿

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

bigbox267

score 16

以前と同じリンク内容の内容なのですが

#Doc2Vecで文書を学習させるコードを書いていこう。まずは必要ライブラリをimportする。

import sys
import glob
import traceback
from os import listdir, path
from pyknp import Jumanpp
from gensim import models
from gensim.models.doc2vec import LabeledSentence

#次に、記事ファイルをダウンロードしたディレクトリから取得する関数を定義する。

def corpus_files(base_dir):
    findPath = path.join( base_dir, 'text/**/*.txt') # 「text」まで呼出元で指定させるほうがスマートだが
    paths = glob.glob( findPath,recursive=True)

    docs = []
    ignore = ('LICENSE.txt','README.txt','CHANGES.txt')
    for p in paths:
        if path.basename(p) not in ignore:
            docs.append(p)
    return docs

#そして、記事コンテンツをパスから取得する関数を定義する。

def read_document(path):
    with open(path, 'r',encoding="utf-8") as f:
        return f.read()

#先程インストールした、JUMAN++を使って記事を単語リストに変換する関数を定義しよう。

def split_into_words(text):
    result = Jumanpp().analysis(text)
    return [mrph.midasi for mrph in result.mrph_list()]

#次に、記事コンテンツを単語に分割して、Doc2Vecの入力に使うLabeledSentenceに変換する関数を定義しよう。

def doc_to_sentence(doc, name):
    words = split_into_words(doc)
    return LabeledSentence(words=words, tags=[name])

#これらの関数を組み合わせて、記事のパスリストから、記事コンテンツに変換し、単語分割して、センテンスのジェネレーターを返す関数を定義する。

def corpus_to_sentences(corpus):
    docs   = [read_document(x) for x in corpus]
    for idx, (doc, name) in enumerate(zip(docs, corpus)):
        print('\rPreprocessing {}/{}'.format(idx, len(corpus)))
        try:
            yield doc_to_sentence(doc, name)
        except:
            print( traceback.format_exc() )
        finally:
            print( 'end' ) 

#最後に、Doc2Vecパラメータを渡して、学習させよう。

print( corpus_files('./') )
corpus = corpus_files('./')
sentences = corpus_to_sentences(corpus)

model = models.Doc2Vec(sentences, dm=0, size=300, window=15, alpha=.025,
        min_alpha=.025, min_count=1, sample=1e-6)

print('STRART')
for epoch in range(20):
    print('Epoch: {}'.format(epoch + 1))
    model.train(sentences)
    model.alpha -= (0.025 - 0.0001) / 19
    model.min_alpha = model.alpha

#ここで、デフォルトで設定されているdmに1を設定するとdmpvで学習されることになる。1以外であれば、DBoWで学習される。

#モデルの保存と読み込みは以下のようにして、saveメソッドとloadメソッドにファイル名を指定する。

model.save(r'C:/cygwin64/home/hoge/doc2vec.model')
model = models.Doc2Vec.load('doc2vec.model')
print('END')

このコードの部分で途中で止まってしまいます。

def corpus_to_sentences(corpus):
    docs   = [read_document(x) for x in corpus]
    for idx, (doc, name) in enumerate(zip(docs, corpus)):
        print('\rPreprocessing {}/{}'.format(idx, len(corpus)))
        try:
            yield doc_to_sentence(doc, name)
        except:
            print( traceback.format_exc() )
        finally:
            print( 'end' ) 

合っているかわかりませんが、一応エラーが出たのかを確認するため、tryで囲んで、printで出力するようにしたのですが、errorは特に出力されずに途中まで実行した後止まって動かなくなります

タスクマネージャーでプロセスが動いているか確認しましたが、CPU使用率やディスク使用率も100%で動かなくなっているということもなく通常の状態でした。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

https://www.sejuku.net/blog/23044

エラーを受け取って書き出してください。

except Exception as e:
    print(e)

エラーがあった場合yieldしていないのですが、sentencesはNoneになりませんか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/04 18:48

    cygwinだと何も出ずにずっと止まったままでしたが、コマンドプロンプトでやるとエラーが表示されました
    しかし、今度はこんな感じのエラーが出ていて結局全部失敗していました

    Preprocessing 5342/7367
    [Errno 32] Broken pipe
    Exception ignored in: <bound method Subprocess.__del__ of <pyknp.juman.juman.Subprocess object at 0x0000000101307F28>>
    Traceback (most recent call last):
    File "C:\Users\hoge\AppData\Local\Programs\Python\Python35\lib\site-packages\pyknp-0.3-py3.5.egg\pyknp\juman\juman.py", line 59, in __del__
    OSError: [Errno 22] Invalid argument

    Preprocessing 7366/7367
    'utf-8' codec can't decode byte 0x82 in position 7: invalid start byte
    end

    Traceback (most recent call last):
    File "main.py", line 62, in <module>
    min_alpha=.025, min_count=1, sample=1e-6)
    File "C:\Users\hoge\AppData\Local\Programs\Python\Python35\lib\site-packages\gensim\models\doc2vec.py", line 660, in __init__
    self.train(documents, total_examples=self.corpus_count, epochs=self.iter)
    File "C:\Users\hoge\AppData\Local\Programs\Python\Python35\lib\site-packages\gensim\models\word2vec.py", line 951, in train
    raise RuntimeError("you must first build vocabulary before training the model")
    RuntimeError: you must first build vocabulary before training the model


    Unicode型をバイト型に変換できなかった?ということなのでしょうか

    def read_document(path):
    with open(path, 'r',encoding="utf-8") as f:
    return f.read()

    このコードutf-8でエンコーディングするという指定をするだけではだめなのですか?

    キャンセル

  • 2018/01/04 18:53

    cygwinということでWindowsのようですが、UTF8で正しいのですか?
    CP932だったりしませんか?

    キャンセル

  • 2018/01/06 12:26

    それは解析するファイルの文字コードが本当にUTF-8なのか?ということでしょうか
    そうだとしたらファイルの文字コードはUTF-8になっています

    キャンセル

  • 2018/01/06 14:57

    https://sp.okwave.jp/qa/q5779228.html?a_open=true#start_q

    UTF8は0x82から始まらなかった気がします。

    キャンセル

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

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

関連した質問

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

  • Python

    7509questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。