1、引入
word2vector的原本意思即为把词向量化,那么为什么要这么做呢?one-hot也可以表示词袋中的词,但是比如motel可以one-hot为[0,1,0,0,0,0,0],hotel可以one-hot为[0,0,0,0,0,1,0],那么通过one-hot来看,这两个词之间是没有联系的,但实际上这两个词之间是有相似度的,那么就需要我们换一种词的表示方式,将词袋中的词映射到同一个向量空间。
2、原理说明
Mikolov et al.2013年提出的word2vec算法提出使用一个vector来表示一个具体的词。算法通俗来讲为:扫描文档中的每一个位置t,它有一个中心词c和上下文o,计算出给定c时o出现的概率,或者给定o时c出现的概率,计作P(o|c)。如下如所示:我们想要知道into这个词的意思,预测其他出现在中心词into周围词的概率,并不断更新词向量,以便预测的更好,其中t-1和t-2为划窗。
使用vw表示w为中心词,使用uw表示w是上下文词,所以P(o|c)可以通过下式计算出来:
那么,目标函数L即为文档中所有词的预测概率相乘,损失函数为J,然后对J求u和v偏导数,如下图所示:
从最后的表达式中,可以看出斜率的形式为把上下文词的初始值减去上下文的预期值,最后不断接近期望值得过程。
3、后记
以上为word2vector的原理介绍,大家在自己项目中需灵活运用即可,注意在应用时,需要做词向量验证,确保在后续应用词向量时的效果。
个人认为变通主要体现在:①词的变换,②输入到模型里面周围词和label词的构造,而这个其实就是端到端的embedding。
今天在别人blog里面看到很有总结性的一句话,“ 技术是具体的,但技术背后反映出的解决问题的思想却是共通的”。
参考来自:
<u>https://www.youtube.com/watch?v=8rXD5-xhemo&list=PLoROMvodv4rOhcuXMZkNm7j3fVwBBY42z</u>