"""
确实,网上的很多资料好像并没有在一开始就阐明这个“词向量”到底是怎么来的,也有可能是简短说了一下但是并没有引起我们的注意,导致我们会问“生成的向量到底在哪儿呀”。那么word2vec向量到底在哪儿?其实这些词向量就是神经网络里的参数,生成词向量的过程就是一个参数更新的过程。那么究竟是什么参数呢?就是这个网络的第一层:将one-hot向量转换成低维词向量的这一层(虽然大家都不称之为一层,但在我看来就是一层),因为word2vec的输入是one-hot。one-hot可看成是1N(N是词总数)的矩阵,与这个系数矩阵(NM, M是word2vec词向量维数)相乘之后就可以得到1M的向量,这个向量就是这个词对应的词向量了。那么对于那个NM的矩阵,每一行就对应了每个单词的词向量。接下来就是进入神经网络,然后通过训练不断更新这个矩阵。这个部分在网上的资料里经常被简略的概括,输出层一般是重点解释的对象,所以需要仔细地理清这个思路。有了这个概念之后再去看word2vec网络具体是怎么实现的,就会容易很多。
作者:Kizunasunhy
链接:https://www.zhihu.com/question/44832436/answer/131725613
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
"""
自学NLP,不了解词向量,查找到知乎上的一个解释如上。个人理解如下
以CBOW为例来说,CBOW完成一个从周围词预测中间词的任务,网络如图是一个input--->hidden--->output,input到hidden的这个w1权重是共享的,这个hidden层就是词向量,计算的方式就是通过input乘以训练好的w1,即可。
因为这一个w1可以通过w2完成这样一个预测的任务,从而能代表词与词之间的关联性,从而我们认为hidden layer输出就是这个词对应的词向量。
PS:
-1、我们只需要通过这样一个词与词的任务中学习到词的表示。词的输入可以更复杂,输出也可以更复杂。
-2、这个跟auto-encoder中自编码器可以通过中间层来表示输入一样。
-3、至于为什么只用两层FC层不确定。理论上来说的话deep is better than shallow,需要查找更多的文献。
-4、fc层本身的计算应该可以用1*1的卷积核来代替?
-5、one-hot的表示,让第二个fc层的计算量和softmax的计算量非常复杂,为什么输出任务中的输出词为什么不直接用embedding的向量,而是要用one-hot的量?是不是需要显式任务来表示?
-6、除了FC的简单替换?有没有可能引入更高维度的卷积层?
网友评论