SCDVでのメモリ使用量ではまった

ここら辺にひきつづき、SCDVではまった点を書きます。

ここでリンクを貼った記事を参考に試しているのですが、中身を理解しないで使っていたらメモリ消費がとんでもないことになった、という話です。

    def make_gwbowv(self, corpus, train=True):
       # gwbowv is a matrix which contains normalized document vectors.
       gwbowv = np.zeros((len(corpus), self.num_clusters*self.num_features)).astype(np.float32)

ここら辺で、正規化された文書ベクトルを格納するのですが、ここ見てもらえばわかる通り、前回の記事で話していたnum_clustersや、コーパスのサイズによって配列のサイズが決まります。

試していた事例では10,000弱のコーパス、num_clusters=1000弱、num_features=100ぐらいだったので、1.0*10^9ですね。で、float32なので4バイトなのでざっくり4GBです。4GBだったら動きそうなものですが、コーパス増やしたり、前回記事の通り、単語数に従ってnum_featuresを増やしたりするとすぐに10GBとかいっちゃいます。

別の人がDocker環境で試していたのですが、そちらではDocker落ちちゃったみたいです。文書ベクトルを一気に作るのを避ける方法があるなら考えてみたいと思いますー。


この記事が気に入ったらサポートをしてみませんか?