使用Python阅读Mikolov训练过的单词向量

时间:2014-07-25 10:48:43

标签: python c++ word2vec

我正在尝试在here读取二进制文件。此文件包含由Mikolov在word2vec程序中训练过的单词表示,其格式如下:

12个第一个字节包含字符串:" 3000000 300 \ n"

后续字节:"<第一个可变字符串> [空格]< 4 * 300个字节,形成300维浮点矢量> [可能存在] <第二个字> ; ....< 3000000th word> [space]< 4 * 300 bytes>"

使用此C代码:

fscanf(in_file, "%s%c", &buff, &ch);
for (a = 0; a < size; a++) fread(&M[a], sizeof(float), 1, in_file);

我可以阅读buff中的每个字库以及M中的相应矢量存储。但是当我使用此测试代码在Python中尝试相同的策略时:

_f = open("GoogleNews-vectors-negative300.bin")
print _f.read(12)
print _f.read(4), _f.read(1) == ' '
_f.read(4*300)
print _f.read(2), _f.read(1) == ' '
_f.read(4*300)
print _f.read(3), _f.read(1) == ' '
_f.read(4*300)
print _f.read(1), _f.read(1) == ' '

它产生结果:

3000000 300

</s>是的

in True

for True

显然是错误的,因为第三个单词必须是that。我无法弄清楚我在这里做错了什么!

0 个答案:

没有答案