考虑word to vector的intuition.
给定两个词,如果存在某种意义的相似性的话.
那么,这两个词对应的vector representation就具有某种意义上的近似.
tensorflow里给的example实现对这个近似的定义是cosin值.
直觉上来说,就是给定两个向量在某些维度的方向指向上有着某种趋同性.
从embedding的角度来说,假设对一组词有着某种未知的词性/词义等的归类方式的话.
这种cosin趋向性实际上就是指向的这个embedding的某些维度了.
考虑如果用L2 distance来定义similarity.
那么它表示的则是这些词对应的点具有一些cluster性质.
而这些性质有什么含义,则是相对拟合过程所用的loss function的意义有关的.
因为从结果上来说,它对应的是embedding的各个维度之间都要求只有细微的差别.
如果出来的结果对应的vector不是一个稀疏表示的话,可能并不能收敛地很好.
或者说结果有意义.
所以,从这个侧面上来说,可能logistics regression比较合适.
变成类似多label的classification,从而达到类似一个binary encode的vector形式.
对应的1/0则表示相应embedding的dimension是否具有对应特征的一种标识.
这样的话,对于结果的一种可能直觉上的解释就是类似某种词性划分.
因为在这种情况下,对于不同的词可能会对于到同一个vector形式.
或者在某些维度具有重合性.
于是反观cosin形式.
cosin形式除了维度指向之外,还有另外一个信息就是长度.
直觉上来说,类似长度但维度指向不同的vector,实际上是处在一个hypersphere上面的.
也就是说,理论上,如果构造合适的loss function的话,是可以让最终的vector包含更多的信息的.
比如cosin similarity作为词性,长度作为词义或者对应的使用场景等.
实际上来说,这个vector对应的就是个2-D的离散feature组合了.
然后考虑loss的构造.
tensorflow的example实现使用nce loss,noise contrastive estimation.
大致就是在minimize原本的cosin的时候,加入一个negative sample项,做类似adversarial的目的.
因为如果没有这个negative的话,一个可能的最终解就是所有vector具有同样的值.
所以某种程度上来说,是一个既要overfit,又不要overfit的过程.
直觉上来说,就是把一些vector move together的时候,separate the other.
大致看了下tensorflow nce的negative sample应该用的是log uniform distribution.
按照这个概率选取一些作为penalty.
所以,理论上来说,这个adversarial项如果选取的不够好的话,结果可能也就不会很理想.
比如training set里都是些垂直领域的词,从人的角度来说都具有类型的词性词义等.
但可能adversarial的选取大概率的是这些相近的词类.
那么结果自然是一直被penalty,loss收敛不下去结果不理想不stationary.
而tensorflow的恰恰好是高词频的会更容易被作为adversarial.
所以适合的是topic/context比较多样化的场景.
这样才可能比较好地被"cluster".
还有一点就是tensforflow里word pair/skip gram model的生成方式.
predicative pair是通过一个skip window控制的.
也就是选定一个词,然后随机地从前后一定范围内选取一个词作为predicate.
这样的话,考虑长句松散语意和短句紧凑语意风格的training set的话,结果应该也是有很大不同的.
如果行文风格比较短小精悍的话,可能词组配对频率分布会比较平坦.
这样的话按照原有的loss来做的话,结果可能就不太好了.
考虑如果是强行生成所有组合.
那么这些组合实际上暗含的信息就是任意两个词之间co-occurrence的概率.
在最终的vector space里,cluster的vector之间就是彼此具有类似的context的属性.
因为两两之间在共同出现的频率差不多,也就一定程度上地说明在文本的使用场景具有某种长度的相似性.
当然,可能最终还是相当程度地会收到adversarial的选取方式的影响.
有可能避免negative这种不确定因素么?
如果对一个batch的同一个feeding sample多做几次gradient decent的话.
直觉上就是让当场的sample更靠近一下.
期望的是通过这种reinforce变相地离其他sample更远一些.
然后如果是确实高频出现的话,同样的reinforce会及时地回调.
形式上来说,就类似于做了一个基于频率的倍数放大而已.
并不一定有什么用.
考虑下entropy.
对于给定的training set来说p(x)是确定的.
对于定义
entropy = p(x) * log(1/p(x))
对于词x,以及对应的相似词y有
entropy = p(x,y) * log(1/tanh(similarly(x,y)))
通过minimize这个entropy的话,会是什么结果呢?
形式上来说,它可能等价于
entropy = W(p) * similarly(x,y)
一个跟固有概率/频率相关的相似度.
那么对于低频的pair来说,w->0,GD的过程可能改动不大.
但对于高频的pair,GD的过程就可能会做相对幅度的变动.
也就是直觉上的对于低频pair不做改动,而仅仅对高频部分做调整.
当然,实际怎么样就是另外一回事了.
没有评论:
发表评论