【问题标题】:Universal Sentence Encoder, reduce vector dimensionalityUniversal Sentence Encoder,降低向量维数
【发布时间】:2020-01-30 14:48:18
【问题描述】:

我正在使用 TensorFlow hub 上的this 模块成功转换文档。

每个文档的输出是一个 512 维向量,但这对我的应用程序来说太大了,我想减少模块本身不提供的维度。

我可以看到几个选项:

  • 使用另一个具有较低维度输出的包。
  • 使用诸如 PCA 或 tSNE 之类的东西来减小尺寸。

使用 PCA 或 tSNE 的问题在于这需要适合许多示例向量的数据 - 这意味着当新文档到达并已转换为 512 维向量时,我需要继续拟合另一个模型,然后更新旧的文档向量 - 这在我的应用程序中将是一个大问题。

还有其他可以对单个数据点进行操作的降维技术吗?

【问题讨论】:

  • 只是一个想法,可能很愚蠢:您不能使用dense 层将线性(或非线性)映射到较低维度吗?
  • 这涉及到学习层,在我看来类似于 PCA 或 tSNE。
  • 当然,但是您可以在获得 512 个暗淡向量后添加一个dense 层,然后让它沿着整个模型进行训练。相反,在 PCA 中,您将收集所有 512 个文档向量并在其上运行 PCA,但在这里您只需沿着 encoder-decoder 模型训练层。我说得通吗? ://
  • 不确定我明白了——我需要减少暗淡,并为每个文档存储这个向量,以便以后用作其他模型的特征——我不确定这一层会学习什么我们没有什么可优化的。
  • 好的,我刚刚看到您使用的是预训练的编码器。我认为dense 层不需要学习任何东西,它只是一种表示输入数据的方式。你可以用迁移学习的方式来思考这一点,你的所有编码器都已经过训练,最后你只需使用一个具有随机权重的密集层来表示你的数据。

标签: python tensorflow machine-learning vector nlp


【解决方案1】:

“UMAP 支持通过标准 sklearn 变换方法向现有嵌入添加新点。” UMAP 在各个方面、速度、准确性和理论基础上都是降维的赢家。

【讨论】:

  • 感谢@Sam H。但我真的很想找到一种方法,如果可能的话,在不先“学习”数据的情况下减少维度——这有可能吗??
  • 如果有办法将N维空间嵌入D维空间,对于N>D,不丢失任何信息,答案是肯定的。但是没有。这就是降维的事情。有一个模型是因为它必须了解数据存在于哪个低维子流形上。但是,您高估了添加学习模型的成本。如果您在数据的代表性样本上对其进行训练,您可能只需很少对其进行重新训练(或者在 UMAP 的情况下,更新它)。
猜你喜欢
  • 2020-11-19
  • 2021-05-07
  • 2020-05-26
  • 1970-01-01
  • 2019-08-18
  • 2019-03-28
  • 2022-07-23
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多