加载.tar格式的word2vec模型

问题描述 投票:0回答:1

我想将之前训练好的 word2vec 模型加载到 gensim 中。问题在于文件格式。它不是 .bin 文件格式,而是 .tar 文件。它是来自莱比锡大学的模型/文件deu-ch_web-public_2019_1M.tar.gz。该模型还列在 HuggingFace 上,其中列出了英语和德语的不同 word2vec 模型。

我首先尝试:

from gensim.models import KeyedVectors
model = KeyedVectors.load_word2vec_format('deu-ch_web-public_2019_1M.tar.gz')

--> ValueError:以 10 为基数的 int() 的文字无效:'deu-ch_web-public_2019_1M

然后我用 7-Zip 解压缩该文件并尝试了以下操作:

from gensim.models import KeyedVectors
model = KeyedVectors.load_word2vec_format('deu-ch_web-public_2019_1M.tar')

--> ValueError:以 10 为基数的 int() 的文字无效:'deu-ch_web-public_2019_1M

from gensim.models import word2vec
model = word2vec.Word2Vec.load('deu-ch_web-public_2019_1M.tar')

--> UnpicklingError: 找不到 MARK

然后我就有点绝望了...

import gensim.downloader
model = gensim.downloader.load('deu-ch_web-public_2019_1M.tar')

--> ValueError:模型/语料库名称不正确

谷歌搜索我发现了如何使用 gensim 加载 .bin 模型的有用信息(参见此处此处)。按照这个thread,用 gensim 加载 .tar 文件似乎很棘手。特别是如果一个人没有一个 .txt 文件,而是有五个 .txt 文件(如本例所示)。我找到了一个如何使用tensorflow读取.tar文件的答案。由于我对tensorflow不熟悉,所以我更喜欢使用gensim。任何如何解决问题的想法都值得赞赏。

python gensim word2vec tar.gz
1个回答
0
投票

.tar
文件是一个或多个目录和文件的捆绑包 - 请参阅 https://en.wikipedia.org/wiki/Tar_(computing) - 因此不是您应该使用的那种单模型文件Gensimn要打开了。

相反,与

.zip
文件一样,您可以使用一些特定用途的软件将
.tar
内的任何文件提取到单独的文件中 - 然后将 Gensim 分别指向这些文件(如果它们是 Gensim 理解的格式)。

.tar.gz
文件(已压缩并压缩)中提取单个文件的典型命令行操作是:

tar -xvzf deu-ch_web-public_2019_1M.tar.gz

这告诉命令使用

x
erbose 报告来提取
v
,同时也取消
z
滑动
f
ile
deu-ch_web-public_2019_1M.tar.gz
。然后您将拥有一个或多个新的本地文件,它们是您感兴趣的实际(未打包)文件。

在某些图形 UI 文件浏览器中,例如 MacOS“Finder”,只需双击

deu-ch_web-public_2019_1M.tar.gz
上执行默认的“打开”即可执行此扩展(无需
tar
命令行)。

但请注意:您链接的利比锡大学页面将这些文件描述为“语料库”(训练文本),而不是经过训练的词向量集或 word2vec 模型。 我查看了你所指的“2019 - 瑞士 - 公共网络文件”,里面是一个目录(文件夹)

deu-ch_web-public_2019_1M

,里面有7个不同格式的

.txt
文件和1个
.sql
文件。但这些都不是任何经过训练的词向量——只是文本和文本统计。
您可以使用它们自己训练模型。 

deu-ch_web-public_2019_1M-sentences.txt

最接近您的需求,即 100 万个纯文本句子。但它仍然不是最佳格式:每行前面都有一个多余的行号,并且尚未被标记为单词标记(这可能会删除标点符号,或将其保留为不同的标记)。而且,由于总共只有 1500 万个单词,对于创建强大的 word2vec 模型来说仍然相当小。

    

© www.soinside.com 2019 - 2024. All rights reserved.