deep-learning - 在固定长度向量中表示文档集合的最佳方法是什么?
问题描述
我正在尝试构建一个深度神经网络,该网络接收一组文档并预测它所属的类别。
由于每个集合中的文档数量不固定,我的第一次尝试是从 doc2vec 获取文档映射并使用平均值。
训练的准确率高达 90%,但测试的准确率低至 60%。
有没有更好的方法将文档集合表示为固定长度的向量,以便捕获它们共同的单词?
解决方案
到目前为止,对您的流程的描述有点模糊和不清楚——您可能想为您的问题添加更多细节。
通常,Doc2Vec
会将每个文档转换为向量,而不是“文档集合”。
如果您确实尝试将集合折叠为单个向量——例如,通过对多个 doc-vecs 进行平均,或者为包含所有子文档的单词的合成文档计算向量——您可能会丢失有价值的高维结构。
“预测类别”将是一个典型的“分类”问题,并且使用一堆文档(由它们的每个文档向量表示)和已知标签,您可以尝试各种分类器。
我从您的描述中怀疑,您可能只是将一个类别折叠为一个向量,然后通过检查它们最接近哪个现有类别向量来对新文档进行分类。这可以工作——它模糊地是一种 K-Nearest-Neighbors 方法,但是每个类别都减少到一个汇总向量而不是完整的已知示例集,并且每个分类都是通过查看一个最近邻居来进行的。这迫使过程变得简单,这可能与真实类别的“形状”以及真正的 KNN 分类器或其他分类器可以实现的不匹配。
如果测试数据的准确度远低于训练期间观察到的准确度,这可能表明正在发生显着的“过度拟合”:模型本质上是在记忆训练数据的特质,以根据任意相关性“欺骗”答案,而不是学习可概括的规则。让你的模型更小——例如通过减少你的文档向量的维度——在这种情况下可能会有所帮助,因为它可以减少让模型记住训练数据特性的额外状态。更多数据也可以提供帮助——因为更多不同示例中的“噪音”往往会自行抵消,而不是实现可以在较小数据集中学习的那种被误导的重要性。
还有其他方法可以将可变长度的文本转换为固定长度的向量,包括许多基于深度学习算法的方法。但是,这些可能更需要训练数据,而且在尝试替代Doc2Vec
.
推荐阅读
- ruby-on-rails - Rails Axlsx Gem:如何在工作簿中的工作表之间切换
- javascript - 从前端表单限制 ACF 的“acf/validate_save_post”操作
- ruby-on-rails - 订购字母数字字符串的方法
- python - 如何在 Pandas 系列中找到与某个值匹配的最后出现索引?
- r - R调用方法时找不到方法(sma)
- html - 未捕获的错误:您不应该在外部使用
参考导航栏 - django - 如何减少 django 站点地图索引中的结果量
- ios - 如何在没有 CocoaPods 的情况下为 Google Places 获取快速二进制文件?
- react-native - React Native - Derectional Pad 支持 Android TV 应用
- css - Bootstrap 4:验证会破坏内联表单元素的样式?