首先,明确一下word2vec的目的:做一个比较好的词向量,以便通过该词向量做出的模型参数浮动不是特别大.现在再看看它怎么做的.
首先,将数据进行独热编码,通过独热编码与一个权重相乘获得一个非独热编码的向量,该权重记为:独热权重,所得词向量记为:word2vec词向量
然后,将上述word2vec词向量放入模型中进行训练,得到一个表较好的独热权重和word2vec词向量
上面两步已经诠释的word2vec的全部过程,但是对它的讨论并没有结束.将上述word2vec词向量放入相似任务的模型中进行训练得到数值接近1的权重,只能说是一种微调.到这里发现已经有的Bert的一些雏形,即先通过预训练模型获得比较好的词向量,再将此词向量放入真实的模型中进行微调参数.那么,Bert有哪些改进?word2vec又存在哪些问题呢?从上述我们不难看出,word2vec通过预训练+微调的先进思想实现了,同一类问题可用相似模型处理,将词向量同任务结合起来并隔开模型,改变了传统的词向量与模型在一起的局面,简化模型训练过程,但是,它仅仅从低维的角度去进行word to id ,所以,没有办法解决一词多义,进行词向量化的过程实际上如同对数据进行空间坐标化,word2vec仅仅从平面的角度去解决问题,当时的关注点主要在于如何获得更好的词向量,将任务同向量结合起来,但并没有考虑词向量本身应该是几维的才更精确的描述数据,这也就是为什么word2vec无法解决一词多义问题的原因.而Bert尝试从更高维的角度去解决问题,增加位置嵌入,其实,这个位置嵌入从一维和二维的角度去观察并没有什么特别的地方,一旦将其从三维的角度看,对于词向量来说便产生了极大的影响,即便两个词在前两个维度中几乎一致,但在第三个维度,即位置嵌入维度中一定是不同的,比如 苹果手机和真实的苹果,虽然在前两个维度属性一模一样,但是正是因为有位置嵌入,使得两个同形词:苹果,在不同的语境中产生了不同的意义.
Bert也通过其他的优化手段提高精度,比如多头机制,attention机制,以及transformer等,这些都有很多文章介绍.