我在任何地方都找不到关于跳跃-gram模型中隐藏层矩阵的列代表什么的信息。
如果矩阵的行代表词语,那么列应该也代表词语或者像文档这样的上下文吗?有人能告诉我上述说法是否正确吗?因为大多数论文使用“特征”这个术语,我不确定他们所说的特征是什么意思。
我在下面添加了一张图片来说明我所谈论的矩阵。
回答:
简短回答:它们代表您网络中神经元的数量。它们不一定对应于您正在处理的词语或语料库的预定义属性。
稍微深入一些:在机器学习中,特征
一词更像是一个抽象概念。给定一个您想要分类的项目(在这种情况下是词语),您可以说该项目是由其特征模糊定义的。
因此,为了提到一个与您的问题无关的例子,如果我们要对一组蘑菇进行分类,并且我们想训练一个模型来学习给定的蘑菇是毒的还是安全食用的,我们可以查看构成蘑菇的各个方面。这些可能是帽子大小、帽子颜色、气味等。我们也可以选择另一组特征,比如鳃大小、柄大小和柄颜色。或者我们可以使用我们可用的所有特征(即我们收集到的关于蘑菇的所有数据)。您可以在这里查看这个特定示例的更多信息这里。
在某些情况下,我们甚至可能不知道定义我们想要分类的对象的特征是什么。我们怎么知道应该考虑这组还是那组特征呢?好吧,我们可以采取不同的方法,训练一个模型来学习特征是什么。
这种方法在这里是相关的。给定一个词语,我们如何知道如何预测该词语的邻居?词语的哪些属性,或词语的上下文对我们来说是相关的?我们如何才能学习这些属性是什么呢?好吧,我们可以设置一个具有足够多的神经元(300个应该足够了!)的神经网络,并训练该网络。这就是我们在这里所做的,我们网络中的节点不一定对应于您正在处理的词语或语料库的预定义属性。我们不知道相关具体特征是什么,这就是我们使用神经网络的原因之一。我们希望网络为我们做脏活,学习特征是什么。
我们的最终目标是,给定一个词语,我们将得到与该词语相关联的一个向量。该向量应该被解释为在n维空间中的坐标,其中n
是我们选择使用的特征数量。请注意,考虑多少特征,即我们的网络中有多少神经元是一个选择。我们可以使用300个神经元,但我们可以使用任何我们想要的任意数量,比如3个、100个,甚至1000个。
那么… 我们为什么要这么做呢?
- 首先,如果我们的语料库有10,000个不同的词语,那么任何给定的词语都由长度为10,000的向量描述。这并不高效!
- 其次,请记住,最终我们想要得到一些可以用来比较词语的东西。我们想知道任意两个词语(比如
France
和Paris
)是否相似,如果可能的话,还想有一个衡量它们相似程度的指标。将我们所有的词语放在一个向量空间中非常方便,因为这样,我们只需测量两点之间的距离,就可以找出任意两个词语的相似程度。
说了这么多,让我们举个例子。假设我们想使用一个三维空间来表示我们的词语。这意味着我们选择(同样,这是一个选择)使用3个特征。所以我们希望将语料库中的每个词语映射到三维空间中的一个点。如果我们有一个包含词语如Batman、Joker、Spiderman和Thanos的语料库;最终我们可能会得到这样的结果(这个例子取自这里):
‘Batman’ = [0.9, 0.8, 0.2]‘Joker’ = [0.8, 0.3, 0.1]‘Spiderman’ = [0.2, .9, 0.8]‘Thanos’ = [0.3, 0.1, 0.9]
重要的是要理解这些数字可能不代表任何具体的东西。我们选择使用一个具有3个特征的模型,但不知道这3个特征是什么。我们只是将词语输入神经网络,然后它输出了向量,由我们来解释它们(如果我们能解释的话,您可以想象在一个具有300个特征的模型中,我们将得到长度为300的向量,因此对于人类来说,看看它们并从中学到东西将非常困难)。
那么,如果我们试图理解我们得到的向量呢?第一个特征代表什么?直接引用我上面链接的文章:
- 似乎第1个特征代表属于DC宇宙。请注意,‘Batman’和‘Joker’在它们的第1个特征上具有较高的值,因为它们确实属于DC宇宙。
- 也许这里的word2vec表示中的第2个元素捕捉了英雄/反派特征。这就是为什么‘Batman’和‘Spiderman’具有较高的值,而‘Joker’和‘Thanos’具有较小的值。
- 有人可能会说,词向量的第3个成分代表超自然能力/能力。我们都知道‘Batman’和‘Joker’没有这样的超能力,这就是为什么他们的向量在第3个位置上的数字很小。