图神经网络学习一(浅谈embedding)
最近在做图神经网络(GNN)有关的项目,这个图就是数据结构里面的那个图。在学习的过程中接触到了embedding。由于我以前做的比较多的都是卷积神经网络,而embedding常用于自然语言处理(NLP),因此卡在了这个地方,并花了些时间去了解什么是embedding
从词说起
假如我们有6个词:男人,女人,苹果,西瓜,肠粉,螺蛳粉。
如果用one-hot编码来表示,就是六维向量。
男人:(1,0,0,0,0,0)
女人:(0,1,0,0,0,0)
…
螺蛳粉:(0,0,0,0,0,1)
用one-hot表示的话,我们就无法得知这些词之间的关联性,只能得到他们各自的位置。而且每个向量都是6维这么高,当词多的时候,就维度太高了。我们能不能想一个降低维度而且又让词之间有关联性的方法呢?
我们先看下面的表格
男人 女人 苹果 西瓜 肠粉 螺蛳粉
性别 0.99 -0.99 0 0 0 0
甜度 -0.2 0.3 0.7 0.78 0.3 0.1
咸度 0.2 0.1 -0.1 0.2 0.7 0.9
我们可以发现,每一列都有3行,男人的列向量为(0.99,-0.2,0.2),这是个三维向量,同时每列的列向量之间的数值都有联系。这就是一个embedding了!可以粗略地理解为,embedding就是一个类的特征。
那么embedding怎样获得呢?
embedding的获取
方法一:用迁移学习获取别人预训练好的embedding
方法二:自己训练一个embedding
这里将一个最简单的构造embedding算法,skip-gram算法。
假定我们的神经网络是输入一个词,输出一个反面词,比如,输入男人,输出女人,那么我们就构造一个含有embedding层的神经网络。
可以把embedding想象成是神经网络的一层,里面的参数经过不断的前向传播反向传播迭代更新。损失函数可以选用交叉熵函数。
训练完后,我们自己的embeding就构造好啦!
总结
以上是生活随笔为你收集整理的图神经网络学习一(浅谈embedding)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 深入Bert实战(Pytorch)---
- 下一篇: NLP—word2vec词向量简介