Googleコラボラトリーでdoc2vecの事前学習データを読み込もうとするとpickle data was truncatedというエラーが出てきてしまいます。解決策を教えていただきたいです。
from
1 model = Doc2Vec.load("model/jawiki.doc2vec.dbow300d.model")
UnpicklingError: pickle data was truncated
容量が大きかったため容量が大きかったため、modelというフォルダを作成しそこに事前学習データを取り込みました
"UnpicklingError: pickle data was truncated"で検索すると色んな情報が出てきますが、この辺は確認して試されたのでしょうか? この辺を試してもダメだったのなら、試したことはすべて質問文に書くようにした方がいいです(質問文は追記が可能です)。回答者がアドバイスしたところで「それはやりました」となると、ただの無駄になりますので。
参考)
https://teratail.com/help/question-tips
これまでの質問もそうですが、的確な回答をお望みであれば、上のリンクをすべて読んでいただき、必要な情報をしっかり記載することをオススメします。
当方のMacで、
https://yag-ays.github.io/project/pretrained_doc2vec_wikipedia/
から「jawiki.doc2vec.dbow300d.tar.bz2」を落として展開し、含まれてた四つのファイルを質問者さんと同じ「model」というディレクトリに置いて、質問のコードを実行しても、エラー出ませんでした
質問者さんがファイルを落とす時か展開する時に不完全で、ファイルが壊れてるのではないですかね
当方の環境
Python 3.7.7
gensim 3.8.3
ありがとうございます。同じディレクトリに入れようとしたのですが、Google colabだと、四つのファイルのうち2つしか同じディレクトリに表示されず、それ以外は同じディレクトリに表示されません。
> 四つのファイルのうち2つしか同じディレクトリに表示されず
googleコラボで下記を実行したら、どうなりますか?
二つしかありませんか?
!ls -l model
「model」に「jawiki.doc2vec.dbow300d.model」しか無い場合は、
No such file or directory: 'model/jawiki.doc2vec.dbow300d.model.trainables.syn1neg.npy'
というエラーが出ました
そこで、「model」に「jawiki.doc2vec.dbow300d.model.trainables.syn1neg.npy」だけ追加したら、
No such file or directory: 'model/jawiki.doc2vec.dbow300d.model.wv.vectors.npy'
というエラーが出ました
そこで、「model」に「jawiki.doc2vec.dbow300d.model.wv.vectors.npy」も追加したら、
No such file or directory: 'model/jawiki.doc2vec.dbow300d.model.docvecs.vectors_docs.npy'
というエラーが出ました
そこで、「model」に「jawiki.doc2vec.dbow300d.model.docvecs.vectors_docs.npy」も追加したら、すなわち、「model」に四つのファイルがある状態に戻したら、エラーが出なくなりました
ファイルが不足してる場合のエラーは、上記の通りで「pickle data was truncated」ではありませんでしたので、やはり質問者さんが実行してる環境ではファイルが壊れてるのではないですかね
自分はGoogleコラボ内に、modelというフォルダを作って、その中に四つのファイルをドラックアンドドロップで入れようとしたのですが二つしか入れることができませんでした。使っているのはWindowsです。よろしかったら、どのように一つのディレクトリにしたか教えていただいてもよろしいでしょうか?また、どの場所にそのコードも入れるのかも教えていただきたいです。
お手数かけますがよろしくお願いします。
私は、最初のコメントに書いたようにMacで実行して確認してます
Mac内に「jawiki.doc2vec.dbow300d.tar.bz2」を落として、ダブルクリックしたら展開されて「jawiki.doc2vec.dbow300d」というディレクトリができて、その中に四つのファイルがありましたので、ディレクトリ名を「jawiki.doc2vec.dbow300d」から「model」に変えました
こちらでも、それらの四つのファイルをgoogleコラボにアップロードして、どうなるか確認してみます
> どの場所にそのコードも入れるのか
「そのコード」とは、
!ls -l model
のことですか?
もしそうなら、質問に記載のコード(model = Doc2Vec.load(...)のすぐ上に追加してみてください
ありがとうございます。ファイルが以下のjawiki.doc2vec.dbow300d.model、jawiki.doc2vec.dbow300d.model.wv.vectors.npyの 2つしか入れれなかったため、他のファイルがありませんという上記のエラーが実際に出ました。他の2つも同じようにドラックアンドドロップしましたが、入れることができませんでした。
> 他のファイルがありませんという上記のエラーが実際に出ました。
「pickle data was truncated」と、両方出たのですか?
当方でMacで確認した場合は、上に書いた通り「No such file or directory...」しか出ませんでしたが
pickle data was truncatedはもう出なくなりました!
No such file or directory...のみでています
どこにアップロードしました?
googleコラボにですか?
それとも、googleドライブにですか?
Googleコラボにアップロードしました
ソースコードが書けるところの左側にファイルマークがあるので、そこでmodelのフォルダを作りました。そこにファイルをドラックアンドドロップで入れようとしました。
四つのファイルをgoogleコラボにアップロードし始めましたが、サイズが220MBくらいの「jawiki.doc2vec.dbow300d.model」をアップロードするのに20分くらいかかりました
サイズが1.4GBくらいの「jawiki.doc2vec.dbow300d.model.docvecs.vectors_docs.npy」は、20分で1/6くらいしかアップロードできてないので、全部終わるのに2時間くらいかかりそう
他の二つはサイズが2.2GBくらいあるので、それぞれ3時間くらいかかりそう
したがって、四つのファイルを全部アップロードすると、当方の条件では8時間以上かかりそうなので、止めました
ネットワークの速度に依存する話なので、質問者さんの条件ではもっと早く終わるかもしれませんが
jawiki.doc2vec.dbow300d.modelとjawiki.doc2vec.dbow300d.model.docvecs.vectors_docs.npyはおなじディレクトリに入れれたのですが、私の場合は他のがアップロードできないのですが、同じディレクトリに入れれそうですか?
Googleコラボでは、解凍したディレクトリごとアップロードできますか?
ご存じだと思いますが、下記に書かれてるように、googleコラボはセッションが終了(ランタイムがリセット)したら、アップロードしたファイルは全部消えてしまいます
https://kenko-keep.com/12hour-90minit/
もし質問者さんのネットワーク環境が良くて、ファイルのアップロードが当方よりも格段に早く終わって1時間くらいで終わるとしても、セッションが終了して再度実行したいとなったらまた1時間かけてアップロードすることになります
もし当方と同じくらい時間がかかるなら、最アップロードに8時間以上かかります
そんなの時間のムダなので、googleドライブにアップロードして、googleドライブをコラボにマウントして使う方がいいですよ
googleドライブにアップロードしたデータは、コラボとは無関係なので消えません
https://interface.cqpub.co.jp/ail01/
の、「2.ファイルをアップロードする」の「〇 Googleドライブへアップロード」と、「3.ファイルのパスを確認する」の「〇 マイドライブ・フォルダのパス」を見てください
一度ためしてみたいと思います。
協力していただいてありがとうございます!
> Googleコラボでは、解凍したディレクトリごとアップロードできますか?
googleコラボは、たぶんアップロード時にはファイルを指定しないとダメだったような
googleドライブは、ディレクトリ丸ごとアップロードできます
http://one-u.jp/gsuite/2019/08/12/google-drive-howto/#index_id2
の「Googleドライブの基本的な使い方をご紹介!」の「【使い方1】ファイルをアップロードする方法」を見てください
「フォルダのアップロード」がそれです
フォルダをアップロードしたら、model = Doc2Vec.load("model/jawiki.doc2vec.dbow300d.model")はパスを変えるだけで大丈夫ですか?
> model = Doc2Vec.load("model/jawiki.doc2vec.dbow300d.model")はパスを変えるだけで大丈夫ですか?
はい
