68

word2vec サイトから、GoogleNews -vectors-negative300.bin.gz をダウンロードできます。.bin ファイル (約 3.4GB) は、私には役に立たないバイナリ形式です。Tomas Mikolovは、「バイナリ形式をテキスト形式に変換するのはかなり簡単なはずです (ただし、より多くのディスク容量が必要になります)。距離ツールでコードを確認してください。バイナリ ファイルを読み取るのはかなり簡単です。」残念ながら、私はhttp://word2vec.googlecode.com/svn/trunk/distance.cを理解するのに十分な C を知りません。

おそらくgensimもこれを行うことができますが、私が見つけたすべてのチュートリアルは、テキストからの変換に関するものであり、他の方法ではないようです。

C コードの変更や、gensim がテキストを出力するための指示を誰かが提案できますか?

4

10 に答える 10

8

バイナリ ファイルを word2vec に読み込んで、テキスト バージョンを次のように保存できます。

from gensim.models import word2vec
 model = word2vec.Word2Vec.load_word2vec_format('Path/to/GoogleNews-vectors-negative300.bin', binary=True)
 model.save("file.txt")

`

于 2015-05-12T21:56:25.427 に答える
8

形式は IEEE 754 単精度バイナリ浮動小数点形式です: binary32 http://en.wikipedia.org/wiki/Single-precision_floating-point_format リトルエンディアンを使用します。

例を見てみましょう:

  • 最初の行は文字列形式です: "3000000 300\n" (vocabSize & vecSize, getByte until byte=='\n')
  • 次の行には、最初に語彙が含まれ、次に (300*4 バイトの float 値、各次元に 4 バイト) 含まれます。

    getByte till byte==32 (space). (60 47 115 62 32 => <\s>[space])
    
  • その後、次の 4 バイトごとに 1 つの浮動小数点数が表されます

    次の 4 バイト: 0 0 -108 58 => 0.001129150390625.

ウィキペディアのリンクをチェックして方法を確認できます。例としてこれを実行してみましょう。

(リトルエンディアン→逆順) 00111010 10010100 00000000 00000000

  • 最初は符号ビット => 符号 = 1 (それ以外 = -1)
  • 次の 8 ビット => 117 => exp = 2^(117-127)
  • 次の 23 ビット => 前 = 0*2^(-1) + 0*2^(-2) + 1*2^(-3) + 1*2^(-5)

値 = 符号 * 指数 * 前

于 2015-03-25T09:34:26.250 に答える
2

convertvecは、word2vec ライブラリのさまざまな形式間でベクトルを変換するための小さなツールです。

ベクトルをバイナリからプレーン テキストに変換します。

./convertvec bin2txt 入力.ビン 出力.txt

ベクトルをプレーン テキストからバイナリに変換します。

./convertvec txt2bin 入力.txt 出力.bin

于 2016-09-19T06:22:44.760 に答える
2

私が使用するコードは次のとおりです。

import codecs
from gensim.models import Word2Vec

def main():
    path_to_model = 'GoogleNews-vectors-negative300.bin'
    output_file = 'GoogleNews-vectors-negative300_test.txt'
    export_to_file(path_to_model, output_file)


def export_to_file(path_to_model, output_file):
    output = codecs.open(output_file, 'w' , 'utf-8')
    model = Word2Vec.load_word2vec_format(path_to_model, binary=True)
    print('done loading Word2Vec')
    vocab = model.vocab
    for mid in vocab:
        #print(model[mid])
        #print(mid)
        vector = list()
        for dimension in model[mid]:
            vector.append(str(dimension))
        #line = { "mid": mid, "vector": vector  }
        vector_str = ",".join(vector)
        line = mid + "\t"  + vector_str
        #line = json.dumps(line)
        output.write(line + "\n")
    output.close()

if __name__ == "__main__":
    main()
    #cProfile.run('main()') # if you want to do some profiling
于 2015-09-01T18:34:37.383 に答える
2

私は同様の問題を抱えていました。bin/non-bin(gensim) モデルを CSV として出力したかったのです。

これはpythonでそれを行うコードです。gensimがインストールされていることを前提としています:

https://gist.github.com/dav009/10a742de43246210f3ba

于 2015-02-19T11:32:34.357 に答える
0

今は簡単な方法があるので、簡単な更新です。

https://github.com/dav/word2vecword2vecから使用している場合は、バイナリ ファイルの生成またはテキスト ファイルの生成を受け入れる追加のオプションが呼び出されます。この例は、レポからのものです。-binary10demo-word.sh

time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15

于 2016-10-19T09:31:57.110 に答える