在固定长度向量中表示文档集合的最佳方法是什么?

What is the best way to represent a collection of documents in a fixed length vector?

我正在尝试构建一个深度神经网络,它接收一组文档并预测它所属的类别。

由于每个集合中的文档数量不固定,我的第一次尝试是从 doc2vec 获取文档映射并使用平均值。

训练准确率高达 90%,但测试准确率低至 60%。

是否有更好的方法将文档集合表示为固定长度的向量,以便捕获它们共有的词?

到目前为止,您对流程的描述有点含糊不清——您可能想为您的问题添加更多细节。

通常,Doc2Vec 会将每个文档转换为向量,而不是 "a collection of documents"。

如果您确实尝试将一个集合折叠成一个向量——例如,通过对许多 doc-vecs 进行平均,或者为包含所有 sub-documents 个词的合成文档计算一个向量——你可能正在失去有价值的 higher-dimensional 结构。

到 "predict the category" 将是一个典型的 "classification" 问题,并且有一堆文档(由它们的 per-doc 向量表示)和 known-labels,您可以尝试各种种类的分类器。

我从你的描述中怀疑,你可能只是将一个类别折叠成一个向量,然后通过检查现有的 category-vector 它们是 closest-to 来对新文档进行分类。这是可行的——它是一种模糊的 K-Nearest-Neighbors 方法,但每个类别都减少到一个摘要向量而不是完整的已知示例集,并且每个分类都是通过仅查看一个 nearest-neighbor 来进行的。这迫使过程变得简单,这可能与真实类别的 "shapes" 以及真正的 KNN 分类器或其他分类器无法实现。

如果测试数据的准确度远低于训练期间观察到的准确度,则表明正在发生重要的 "overfitting":模型本质上是将训练数据的特性记忆到 "cheat"基于任意相关性的答案,而不是学习可概括的规则。让你的模型更小——比如通过降低你的doc-vectors的维数——在这种情况下可能会有所帮助,通过减少模型额外的状态来记住特性的训练数据。更多的数据也有帮助——因为 "noise" 在更多不同的例子中往往会自我抵消,而不是达到可以在较小的数据集中学习的那种被误导的重要性。

还有其他方法可以将 variable-length 文本转换为 fixed-length 向量,包括许多基于深度学习算法的方法。但是,这些可能更多 training-data-hungry,而且在尝试那些 in-lieu-of Doc2Vec 之前,您似乎还有其他需要改进的因素。