段落向量或 Doc2vec 模型大小
Paragraph Vector or Doc2vec model size
我正在使用 deeplearning4j java 库来构建维度为 100 的段落向量模型 (doc2vec)。我正在使用文本文件。它有大约 1700 万行,文件大小为 330 MB。
我可以训练模型并计算段落向量,从而给出相当不错的结果。
问题是,当我尝试使用 WordVectorSerializer.writeParagraphVectors(dl4j 方法)保存模型(通过写入磁盘)时,它需要大约 20 GB 的 space。当我使用本机 java 序列化程序时大约 30GB。
我想可能是模型对于那么多数据来说太大了。对于 300 MB 的文本数据,模型大小 20GB 是否合理?
也欢迎在其他 library/language 中使用过 doc2vec/paragraph 矢量的人发表评论。
谢谢!
我不熟悉 dl4j 实现,但模型大小主要由唯一 word-vectors/doc-vectors 的数量和所选矢量大小决定。
(330MB / 1700 万) 意味着您的每个文档平均只有 20 个字节——对于 Doc2Vec
来说非常小!
但是,例如,如果您正在为每个文档训练一个 300 维的文档向量,并且每个维度(通常)是一个 4 字节浮点数,那么 (1700 万 * 300 dims * 4 bytes/dim) = 20.4GB。然后会有更多 space 用于词向量和模型 inner-weights/vocabulary/etc,因此您报告的存储大小并非难以置信。
对于您所描述的大小,也存在过度拟合的巨大风险 - 如果使用 300 维,您会将 <20 字节源 material 的文档建模为 (300*4=) 1200 字节的文档向量。
在某种程度上,这使得模型倾向于进行巨大的记忆输入查找 table,因此不太可能捕获有助于理解训练文档或新文档的可概括模式。有效的学习通常看起来有点像压缩:将源 material 建模为更小但更突出的东西。
我正在使用 deeplearning4j java 库来构建维度为 100 的段落向量模型 (doc2vec)。我正在使用文本文件。它有大约 1700 万行,文件大小为 330 MB。 我可以训练模型并计算段落向量,从而给出相当不错的结果。
问题是,当我尝试使用 WordVectorSerializer.writeParagraphVectors(dl4j 方法)保存模型(通过写入磁盘)时,它需要大约 20 GB 的 space。当我使用本机 java 序列化程序时大约 30GB。
我想可能是模型对于那么多数据来说太大了。对于 300 MB 的文本数据,模型大小 20GB 是否合理?
也欢迎在其他 library/language 中使用过 doc2vec/paragraph 矢量的人发表评论。
谢谢!
我不熟悉 dl4j 实现,但模型大小主要由唯一 word-vectors/doc-vectors 的数量和所选矢量大小决定。
(330MB / 1700 万) 意味着您的每个文档平均只有 20 个字节——对于 Doc2Vec
来说非常小!
但是,例如,如果您正在为每个文档训练一个 300 维的文档向量,并且每个维度(通常)是一个 4 字节浮点数,那么 (1700 万 * 300 dims * 4 bytes/dim) = 20.4GB。然后会有更多 space 用于词向量和模型 inner-weights/vocabulary/etc,因此您报告的存储大小并非难以置信。
对于您所描述的大小,也存在过度拟合的巨大风险 - 如果使用 300 维,您会将 <20 字节源 material 的文档建模为 (300*4=) 1200 字节的文档向量。
在某种程度上,这使得模型倾向于进行巨大的记忆输入查找 table,因此不太可能捕获有助于理解训练文档或新文档的可概括模式。有效的学习通常看起来有点像压缩:将源 material 建模为更小但更突出的东西。