word2vec 如何从二进制文件中检索结果?
How word2vec retrieves result from binary files?
from gensim.models.keyedvectors import KeyedVectors
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True)
print(model['the']) # this prints the 300D vector for the word 'the'
代码将 google_news 二进制文件加载到模型中。
我的问题是,第 3 行如何计算二进制文件的输出(因为二进制文件包含 0 和 1)。
我不确定这里的问题到底是什么,但我假设您是在问如何将二进制文件加载到您的 Python 应用程序中?例如,您可以使用 gensim,它具有 built-in 工具来解码二进制文件:
from gensim.models.keyedvectors import KeyedVectors
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True)
print(model['the']) # this prints the 300D vector for the word 'the'
编辑
我觉得你的问题更多的是关于一般的二进制文件?这似乎与 word2vec 具体无关。无论如何,在 word2vec 二进制文件中,每一行都是二进制格式的一对单词和权重。首先,通过循环字符直到遇到 "space" 的二进制字符,将单词解码为字符串。然后将其余部分从二进制解码为浮点数。我们知道浮点数是因为 word2vec 二进制文件有一个 header,例如“3000000 300”,这告诉我们有 3m 个单词,每个单词是一个 300D 向量。
二进制文件由一系列字节组成,每个字节为 8 位。在 wiki page 上阅读更多关于二进制的信息。
十进制形式的数字0.0056,变成二进制形式:
00111011 10110111 10000000 00110100
所以这里有4个字节组成了一个浮点数。我们怎么知道呢?因为我们假设二进制编码为 32 位浮点数。
如果二进制文件表示 64 位精度浮点数怎么办?那么二进制的十进制0.0056就变成了:
00111111 01110110 11110000 00000110 10001101 10111000 10111010 11000111
是的,两倍的长度是因为两倍的精度。所以当我们解码word2vec文件时,如果权值是300d,64位编码,那么每个数字应该有8个字节来表示。因此,一个词嵌入在文件的每一行中将有 300*64=19,200 个二进制数字。明白了吗?
你可以google"how binary digits"工作,数百万个例子。
from gensim.models.keyedvectors import KeyedVectors
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True)
print(model['the']) # this prints the 300D vector for the word 'the'
代码将 google_news 二进制文件加载到模型中。 我的问题是,第 3 行如何计算二进制文件的输出(因为二进制文件包含 0 和 1)。
我不确定这里的问题到底是什么,但我假设您是在问如何将二进制文件加载到您的 Python 应用程序中?例如,您可以使用 gensim,它具有 built-in 工具来解码二进制文件:
from gensim.models.keyedvectors import KeyedVectors
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True)
print(model['the']) # this prints the 300D vector for the word 'the'
编辑
我觉得你的问题更多的是关于一般的二进制文件?这似乎与 word2vec 具体无关。无论如何,在 word2vec 二进制文件中,每一行都是二进制格式的一对单词和权重。首先,通过循环字符直到遇到 "space" 的二进制字符,将单词解码为字符串。然后将其余部分从二进制解码为浮点数。我们知道浮点数是因为 word2vec 二进制文件有一个 header,例如“3000000 300”,这告诉我们有 3m 个单词,每个单词是一个 300D 向量。
二进制文件由一系列字节组成,每个字节为 8 位。在 wiki page 上阅读更多关于二进制的信息。
十进制形式的数字0.0056,变成二进制形式:
00111011 10110111 10000000 00110100
所以这里有4个字节组成了一个浮点数。我们怎么知道呢?因为我们假设二进制编码为 32 位浮点数。
如果二进制文件表示 64 位精度浮点数怎么办?那么二进制的十进制0.0056就变成了:
00111111 01110110 11110000 00000110 10001101 10111000 10111010 11000111
是的,两倍的长度是因为两倍的精度。所以当我们解码word2vec文件时,如果权值是300d,64位编码,那么每个数字应该有8个字节来表示。因此,一个词嵌入在文件的每一行中将有 300*64=19,200 个二进制数字。明白了吗?
你可以google"how binary digits"工作,数百万个例子。