全局向量的词嵌入(GloVe) 讨论区

http://zh.diveintodeeplearning.org/chapter_natural-language-processing/glove.html

谢谢老师上课辛苦的讲解~~想问一下之后NLP的课程里会安排观点、情绪、情感分析的内容吗?跪求……

用cnn效果不错,也可以用词向量

https://arxiv.org/abs/1408.5882

1赞

另外,你也可以看一下fasttext的第二篇论文,
https://arxiv.org/abs/1607.01759

2赞

收到!十分感谢!! 哈哈,想到一句话:“没有什么是一篇论文解决不了的问题,如果有,那就两篇~”

1赞

对于词典中一个索引为i的词,它在作为中心词和背景词时的向量表示分别u,v

  1. 为什么一个词要用2个向量来表达,只用一个向量会有什么问题吗?影响优化或者效果?

  2. 我看word2vec论文(Distributed Representations of Words and Phrasesand their Compositionality)也没有提这个细节?

  3. glove里面也是先用u,v,再假设u=v?那么直接每个词只用一个向量是否达到等价效果?
    谢谢回答讨论@astonzhang

这是个很好的问题。

word2vec是因为u和v不等价。不过word2vec论文里好像没讨论选择u还是v?(我这里抛砖引玉一下:第十六课:词向量(word2vec)

GloVe中u和v等价,最后是求u和v之和。我的理解是:u和v初始化不同得出结果不同,求和(本质是求平均)有降低variance的作用。

欢迎指正。

word2vec是因为u和v不等价

不等价的意义是什么?

链接里解释了

谢谢回答。
那个链接解释的是为什么u和v不等价。
我好奇的是,为什么作为中心词和contex的时候,一个词需要用2个向量u,v分别表示?假如在word2vec代码中让 v:=u,对模型收敛或者结果有什么影响?
不知道aston有没有尝试过,或者方便告诉我一个试验的途径?
多谢讨论~

word2vec中u和v不等价(固定其他变量,相互交换u和v会引起损失函数值变化),当成两个变量在我看来是合理的,而且比设为同一个变量更通用,因为有学成u=v的可能。

如果在多个不同的很大的训练数据集上,发现u和v使用相同参数比分别使用不同参数效果显著提高,那我觉得是个surprising的工作,因为用的参数少了一半还更有效。我目前持怀疑态度,还没花过这个时间。

谢谢回答。
但是我觉得应该辩证看待“两个变量”。虽然更general而且有学成u=v的可能,但是同一个词w的u,v之间并没有直接相互作用,也就是说我们在w作为contex学习的信息u并没有传递给v,但是我们在word2vec里面只用v。
但是这也只是猜想,还是得实验说话~

1赞

一个猜想(不严谨的讨论~):

如果训练时觉得v和u不该相互作用,就把v和u学的不一样。v和u因为不该相互作用(观点分歧,假设一对一错),那就二者选一吧。以使用负采样的跳字模型为例,损失函数分母里的u词来自的采样分布只是近似,而v词一直来自真实训练数据的当前窗口。不严谨地二选一,我更可能选v。

如果训练时发现应该让v和u相互作用,把v学的和u一样或者差不多就好,这样哪怕还是用v也是和用u差不多。

以层序softmax为例,就不用纠结用u还是v了。

请问以前的课程视频回放有吗?

https://discuss.gluon.ai/c/5-category

请问老师,如果是一个自己的文档,想训练自己的词向量,就比如用 fasttext 吧,用gluon有对应的接口或者示例可以参考一下吧,其实我问题的背景是我有一些日志文件,我想找出某些文件路径之间的关系(我把文件路径当作词来处理),不知道老师有没有对应的这方面的参考。

Thanks Aston, this word embedding lesson is brilliant and help me a lots, and make me learn it much faster.

During the study, I am wondering
Should both vectors U and V be normalized to 1 in initialization and training iteration?

Not necessary.

You may refer to
http://zh.gluon.ai/chapter_natural-language-processing/embedding-training.html

Thanks , but I don’t understand why,

because in most loss function we just use two word vectors dot product output value, but the real measure it represent is vector cosine similarity which is normalized.

so in calculating loss function, dot product value is larger not mean two words are more similar, that is my concern.

Well, we should use cosine similarity instead of dot product:
http://zh.gluon.ai/chapter_natural-language-processing/similarity-analogy.html

In other words, we don’t need to normalize embedding value. For instance, refer to GloVe paper Section 4.2:

https://www.aclweb.org/anthology/D14-1162

The model generates two sets of word vectors,
W and W˜ . When X is symmetric, W and W˜ are
equivalent and differ only as a result of their random
initializations; the two sets of vectors should
perform equivalently. On the other hand, there is
evidence that for certain types of neural networks,
training multiple instances of the network and then
combining the results can help reduce overfitting
and noise and generally improve results (Ciresan
et al., 2012). With this in mind, we choose to use
the sum W +W˜ as our word vectors. Doing so typically
gives a small boost in performance, with the
biggest increase in the semantic analogy task.

Note that summation (bold text above) does not guarantee normalization.