我加载了谷歌的新闻向量 -300 数据集。每个单词用一个 300 点的向量表示。我想在我的神经网络中使用它进行分类。但是一个字300似乎太大了。如何在不影响质量的情况下将向量从 300 减少到 100。
tl;dr 使用降维技术,如 PCA 或 t-SNE。
这不是您正在尝试的微不足道的操作。为了理解原因,您必须了解这些词向量是什么。
词嵌入是一种向量,试图对有关词的含义、如何使用等信息进行编码。让它们有趣的是,它们设法将所有这些信息存储为浮点数的集合,这对于与处理单词的模型进行交互非常有用。我们可以将一个词向量传递给模型,而不是单独将一个词传递给模型,而无需任何指示它的含义、如何使用它等,我们可以向模型传递一个词向量,目的是提供有关自然语言如何工作的额外信息。
我希望我已经说清楚了,词嵌入非常整洁。构建它们是一个活跃的研究领域,尽管有几种方法可以产生有趣的结果。对于这个问题来说,理解所有不同的方式并不是非常重要,但我建议你检查一下。相反,您真正需要知道的是,与一个词相关的 300 维向量中的每个值在某种意义上都是“优化的”,以捕捉该词的含义和用法的不同方面。换句话说,300 个值中的每一个都对应于单词的某个抽象特征。随机删除这些值的任何组合将产生一个向量,该向量可能缺乏有关该词的重要信息,并且可能不再作为该词的良好表示。
因此,选择向量的前 100 个值是不好的。我们需要一种更有原则的方法来降低维度。您真正想要的是对这些值的一个子集进行采样,以便在结果向量中保留尽可能多的有关单词的信息。这就是主成分分析 (PCA) 或 t 分布随机邻域嵌入 (t-SNE) 等降维技术发挥作用的地方。我不会详细描述这些方法是如何工作的,但本质上它们旨在捕捉信息集合的本质,同时减少描述所述信息的向量的大小。例如,PCA 通过从旧向量构建新向量来实现这一点,其中新向量中的条目对应于旧向量的主要“组件”的组合,即。
总而言之,您应该在词向量上运行降维算法,如 PCA 或 t-SNE。有许多 python 库实现了两者(例如 scipy 有一个 PCA 算法)。但是请注意,这些词向量的维数已经相对较低。要了解这是如何正确的,请考虑通过其 one-hot 编码(一个位置为 1,其他位置为 0)来天真地表示一个单词的任务。如果你的词汇量和 google word2vec 模型一样大,那么每个词都会突然与一个包含数十万个条目的向量相关联!如您所见,维数已经显着减少到 300,任何使向量显着变小的减少都可能会丢失大量信息。
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |