我的问题有两方面,但希望不要太复杂。这两个部分都特别适用于Word2Vec中的Skip-Gram模型:
第一部分是关于结构:据我所知,Skip-Gram模型基于一个神经网络,一个输入权重矩阵 W ,一个隐藏的大小层N和C输出权重矩阵 W'各自用于产生C输出向量之一。这是对的吗?
第二部分是关于输出向量:据我所知,每个输出向量的大小为V,是Softmax函数的结果。每个输出向量节点对应于词汇表中单词的索引,并且每个节点的值是对应单词出现在该上下文位置(对于给定输入单词)的概率。然而,即使训练实例是,目标输出矢量也不是单热编码的。这是对的吗?
我想象的方式是以下几行(构成示例):
假设词汇['quick','fox','jumped','lazy','dog']和C = 1的上下文,并假设对于输入词'jumped',我看到两个输出看起来像这样的矢量:
[0.2 0.6 0.01 0.1 0.09]
[0.2 0.2 0.01 0.16 0.43 ]
我认为这是'狐狸'是最有可能在'跳跃'之前出现的词(p = 0.6),而'狗'最有可能出现在它之后(p = 0.43)。
我有这个权利吗?还是我完全脱了?任何帮助表示赞赏。
答案 0 :(得分:3)
这是我在SO的第一个答案,所以在这里......
根据这篇论文,你对这两个部分的理解似乎是正确的:
http://arxiv.org/abs/1411.2738
本文详细解释了word2vec,同时保持了它非常简单 - 值得阅读,以便全面了解word2vec中使用的神经网络架构。
参考你提到的例子, C = 1,词汇为['quick','fox','jumped','lazy','dog']
如果skip-gram的输出为[0.2 0.6 0.01 0.1 0.09],正确的目标词为'fox',则错误计算为 -
[0 1 0 0 0] - [0.2 0.6 0.01 0.1 0.09] = [-0.2 0.4 -0.01 -0.1 -0.09]
并更新权重矩阵以最小化此错误。
希望这有帮助!
答案 1 :(得分:0)
没有。 您可以自由设置矢量的长度。
然后,矢量是什么?
它是该词含义的分布式表示。
我不确切地知道如何训练它。但是,受过训练的人的意思如下。
如果有一个这样的矢量表示,
[0.2 0.6 0.2]
比[0.7 0.2 0.5]更接近[0.2 0.7 0.2]。
这是另一个例子。
CRY [0.5 0.7 0.2]
HAPPY [-0.4 0.3 0.1]
SAD [0.4 0.6 0.2]
' CRY'更接近SAD'比起快乐'因为当词的含义(或句法位置)相似时,方法(CBOW或SKIP-GRAM等)可以使向量更紧密。
实际上,准确性取决于很多事情。选择方法也很重要。还有大量的好数据(语料库)。
如果你想检查一些单词的相似性,你先制作单词的向量,然后检查单词的余弦相似度。
论文(https://arxiv.org/pdf/1301.3781.pdf)解释了一些方法并列出了准确性。
你可以理解c代码,word2vec程序(https://code.google.com/archive/p/word2vec/)很有用。它实现了CBOW(Continuous Bag-Of-Words)和SKIP-gram。
ps)请纠正我的坏英语。 ps)评论,如果你有问题,那么。