【问题标题】:Paragraph Vector or Doc2vec model size段落向量或 Doc2vec 模型大小
【发布时间】:2023-12-12 00:58:01
【问题描述】:

我正在使用 deeplearning4j java 库来构建 100 维的段落向量模型 (doc2vec)。我正​​在使用文本文件。它有大约 1700 万行,文件大小为 330 MB。 我可以训练模型并计算段落向量,得到相当好的结果。

问题是,当我尝试使用 WordVectorSerializer.writeParagraphVectors(dl4j 方法)保存模型(通过写入磁盘)时,它需要大约 20 GB 的空间。当我使用本机 java 序列化程序时,大约 30GB。

我在想可能是模型对于这么多数据来说太大了。对于 300 MB 的文本数据,模型大小 20GB 是否合理?

也欢迎在其他库/语言中使用过 doc2vec/paragraph 向量的人发表评论。

谢谢!

【问题讨论】:

    标签: nlp gensim word-embedding doc2vec deeplearning4j


    【解决方案1】:

    我不熟悉 dl4j 实现,但模型大小主要取决于唯一词向量/文档向量的数量,以及所选的向量大小。

    (330MB / 1700 万)意味着您的每个文档平均只有 20 个字节——对于Doc2Vec 来说非常小!

    但是,例如,如果您正在为每个文档训练一个 300 维的文档向量,并且每个维度(通常)是 4 字节浮点数,那么 (1700 万 * 300 暗淡 * 4 字节/暗淡) = 20.4GB。然后会有更多空间用于词向量和模型内部权重/词汇/等,因此您报告的存储大小并非不可信。

    对于您所描述的大小,过度拟合的风险也很大 - 如果使用 300 维,您会将

    在某种程度上,这使得模型倾向于一个巨大的、记忆输入的查找表,因此不太可能捕获有助于理解训练文档或新文档的通用模式。有效的学习通常看起来有点像压缩:将源材料建模为更小但更突出的东西。

    【讨论】:

    • 非常感谢您的分析。当前的模型维度是 100。现在,您是否建议如果我降低维度,可以降低过度拟合的风险?
    • 是的,缩小向量可能是使整体模型大小更适合数据的一种方式。无论您真正的下游任务是什么——通过相似性检索信息?分类? – 如果您可以创建一个自动评分机制,然后使用保留的测试集,您应该能够检测过拟合并调整向量大小或其他方面来抵消它。
    • 谢谢!将按照您的建议进行尝试。