首页 > 解决方案 > 强制 gensim 的 word2vec 向量为正?

问题描述

在 gensim 中有什么方法可以强制 word2vec 中的学习向量全部为正?(向量的所有元素都是正数)。我正在做一个不同的任务,需要这些向量是积极的(原因真的很复杂,所以不要问为什么)

那么我强迫gensim学习正向量的最简单方法是什么?

标签: gensimword2vec

解决方案


Gensim 没有内置功能允许在训练期间应用这种额外的约束/正则化。

您可能应该尝试解释您对这个特殊要求的“非常复杂”的原因。可能有更好的方法来实现真正的最终目标,而不是将通常在原点周围粗壮平衡的向量硬塞到非负表示中。

值得注意的是,一篇名为“ All-but-the-Top: Simple and Effective Postprocessing for Word Representations ”的论文建议可以通过后处理来改进词向量,以确保它们在原点周围更加平衡,而不是更少(这似乎是一个可靠的典型负采样配置的副作用)。

如果您仍然有兴趣在相反的方向上进行实验——将通常的 word2vec 词向量转换为所有维度均为正的表示形式——我可以想到一些琐碎的、肤浅的方法来实现这一目标。我不知道它们是否真的会保留或破坏向量中的有益特性——但你可以尝试一下,看看。例如:

  • 您可以尝试简单地将所有负尺寸设置为 0.0 - 截断。(丢失了大量信息,但如果一个简单的实验给你带来了你所寻求的任何好处,可能会给出一个快速的指示。)
  • 您可以找到出现在任何向量中的任何位置的最大负维度,然后将其绝对值添加到所有其他维度。瞧!现在没有向量维度低于 0.0。(您也可以按每个维度的方式尝试此操作 - 仅使用具有最低维度 #0 值的正确维度 #0。或者,尝试对每个维度进行其他重新缩放,以使先前高度负的值为 0.0,并且以前的高度正值保持在原处或仅稍微移动。)
  • 您可以尝试将原始词向量中的每个维度转换为转换集中的两个维度:一个是原始正值,或者 0.0 如果它是负数,第二个维度是原始负值的绝对值,或者 0.0如果它是积极的。(或类似地:一维是原始值的绝对值,一维是 0.0 或 1.0,具体取决于原始值是负数还是正数。)

可能还有其他更复杂的因式分解/分解,用于在仅具有非负单个值的变换数组中重新表示完整的词向量集,但我不知道它们,除了认为它可能值得寻找他们。

而且,这些转换中的任何一个是否适用于您的下一步,谁知道呢?但这可能值得一试。(如果其中任何一个提供了令人惊讶的好结果,很高兴在后续评论中听到!)


推荐阅读