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

Posted

技术标签:

【中文标题】在固定长度向量中表示文档集合的最佳方法是啥?【英文标题】:What is the best way to represent a collection of documents in a fixed length vector?在固定长度向量中表示文档集合的最佳方法是什么? 【发布时间】:2019-10-27 11:14:46 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

通常,Doc2Vec 会将每个文档转换为向量,而不是“文档集合”。

如果您确实尝试将集合折叠为单个向量——例如,通过对多个 doc-vecs 进行平均,或者为包含所有子文档的单词的合成文档计算向量——您可能会失去有价值的更高-维度结构。

“预测类别”将是一个典型的“分类”问题,对于一堆文档(由它们的每个文档向量表示)和已知标签,您可以尝试各种分类器。

根据您的描述,我怀疑您可能只是将一个类别折叠为一个向量,然后通过检查它们最接近哪个现有类别向量来对新文档进行分类。这可以工作——它模糊地是一种 K-Nearest-Neighbors 方法,但是每个类别都减少到一个汇总向量而不是完整的已知示例集,并且每个分类都是通过查看一个最近邻居来进行的。这迫使过程变得简单,这可能与真实类别的“形状”以及真正的 KNN 分类器或其他分类器可以实现的不匹配。

如果测试数据的准确度远低于训练期间观察到的准确度,则可能表明正在发生严重的“过度拟合”:模型本质上是在记忆训练数据的特性,以根据任意相关性“欺骗”答案,而不是学习可概括的规则。让你的模型更小——例如通过降低你的文档向量的维度——在这种情况下可能会有所帮助,因为它可以让模型减少额外的状态来记住训练数据的特性。更多数据也有帮助 - 因为更多不同示例中的“噪音”往往会自行抵消,而不是实现可以在较小数据集中学习的那种被误导的重要性。

还有其他方法可以将可变长度的文本转换为固定长度的向量,包括许多基于深度学习算法的方法。但是,这些可能更需要训练数据,而且在尝试替代Doc2Vec 之前,您似乎还有其他因素需要改进。

【讨论】:

您的回答现在已经足够好了。我最终做了一些其他分类,因为它不是我的主要关注点。我可以分享有关我所拥有的设置的更多详细信息,我的输入数据是一组文档集合,是的,每个集合都来自同一类别。正如你所说,我担心我会丢失一些信息,因为我取 doc2vec 向量的平均值来将集合表示为向量。所以这个问题基本上是在询问以我不会丢失此类信息的方式预处理文档集合的正确方法。

以上是关于在固定长度向量中表示文档集合的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套在 Firestore 文档中的集合中获取数据的最佳方法是啥?

在数据库中表示“重复事件”的最佳方式是啥?

在数据库中表示三选项的最佳方式是啥?

在向量空间模型中表示文档

如何在 Perl 中表示集合?

在 Scheme (R6RS) 中表示代数数据类型构造函数的惯用方式是啥?