【问题标题】:Gensim Doc2Vec generating huge file for model [closed]Gensim Doc2Vec 为模型生成巨大文件 [关闭]
【发布时间】:2017-12-24 23:56:10
【问题描述】:

我正在尝试从 gensim 包中运行 doc2vec 库。我的问题是,当我训练和保存模型时,模型文件相当大(2.5 GB)我尝试使用这一行:

model.estimate_memory()

但这并没有改变任何东西。我还尝试更改 max_vocab_size 以减少空间。但是没有运气。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 这里没有错,文档嵌入非常庞大。
  • 我投票决定将此问题作为题外话结束,因为这不是一个可以解决的问题,只是对所使用的库的工作方式的误解。 2.5G 在这方面已经是小众了。
  • 我不反对。有人不了解编程任务的资源需求,从而产生问题。解释算法/库的底层操作可以解决误解,还有其他编码选项可以实现底层目标。这些构成了对充分指定的问题的有用答案。

标签: python semantics gensim word2vec doc2vec


【解决方案1】:

Doc2Vec 模型可以很大。特别是,使用中的任何词向量将使用每个维度 4 个字节,乘以模型的两层。因此,具有 200,000 个单词词汇表的 300 维模型将仅用于向量数组本身:

200,000 vectors * 300 dimensions * 4 bytes/float * 2 layers = 480MB

(字典存储词汇信息会有额外的开销。)

任何文档向量也将使用每个维度的 4 个字节。因此,如果您为一百万个 doc-tags 训练一个向量,该模型将仅用于 doc-vectors 数组:

1,000,000 vectors * 300 dimensions * 4 bytes/float = 2.4GB

(如果您使用任意字符串标签来命名文档向量,则会有额外的开销。)

要在加载时使用更少的内存(这也会导致存储文件更小),您可以使用更小的词汇表、训练更少的 doc-vecs 或使用更小的向量大小。

如果您只需要模型用于某些狭隘的目的,那么您可能会在训练后丢弃其他部分 - 但这需要了解模型内部/源代码以及您的特定需求,并且会导致对于许多其他常规操作而言,模型已损坏(并且可能引发错误)。

【讨论】:

  • 我目前尝试为大约 200k 句子的 60k 文档生成 doc2vec 模型,并将其投影到 50 个维度。对应的 word2vec 模型有 22mb,而 doc2vec 分成三个文件加起来 12.6gb。这根本不适合你的数学。还有其他我可能做错的事情吗?
  • @daniel-töws 您是否在初始培训期间提供tags,包括纯整数,但包括远远超出0200000 的大量数字?如果您使用任何普通整数,则假设您希望这些数字作为数组中的直接字面量槽,并且将分配一个足够大以包含最大 int 标记的数组 - 可能会在向量上浪费任意数量的空间,而不是 -使用的标签。如果您可以提供来自0 并通过连续数字上升的文档 ID,则仅使用纯整数标签。否则,字符串标签会更好 - 并且会自动使用将字符串映射到内部插槽的 dict。
  • 我用简单的连续整数替换了我的字符串 ID(对于您的意思是段落向量,对吗?)。它没有改变任何东西
  • 在别人的问题中很难做到这一点。我建议发布一个新问题,显示:(1)您的语料库的大小,以文档计数、原始字数、唯一字数为单位; (2) 您用于在此语料库上训练和保存 Doc2Vec 和 Word2Vec 模型的代码,以及所有模型参数; (3) 磁盘上文件的名称/大小。但归根结底,很可能是:如果您在磁盘上有一个超大模型,那是因为您在参数和语料库中指定了一个包含许多独特单词/标签和向量的模型。
  • 我再次检查了我的代码,结果发现我在标记文档的索引阶段遇到了一个错误。现在它就像一个魅力。很抱歉打扰您...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2021-03-09
  • 1970-01-01
  • 2020-01-31
  • 2010-09-14
  • 2017-02-12
相关资源
最近更新 更多