word2vec模型cbow与skip-gram的比较

转载自 word2vec模型cbow与skip-gram的比较html

 

cbow和skip-gram都是在word2vec中用于将文本进行向量表示的实现方法,具体的算法实现细节能够去看word2vec的原理介绍文章。咱们这里大致讲下二者的区别,尤为注意在使用当中的不一样特色。算法

 

在cbow方法中,是用周围词预测中心词,从而利用中心词的预测结果状况,使用GradientDesent方法,不断的去调整周围词的向量。当训练完成以后,每一个词都会做为中心词,把周围词的词向量进行了调整,这样也就得到了整个文本里面全部词的词向量。学习

  

要注意的是, cbow的对周围词的调整是统一的:求出的gradient的值会一样的做用到每一个周围词的词向量当中去。 spa

 

能够看到,cbow预测行为的次数跟整个文本的词数几乎是相等的(每次预测行为才会进行一次backpropgation, 而每每这也是最耗时的部分),复杂度大概是O(V);htm

 
而skip-gram是用中心词来预测周围的词。在skip-gram中,会利用周围的词的预测结果状况,使用GradientDecent来不断的调整中心词的词向量,最终全部的文本遍历完毕以后,也就获得了文本全部词的词向量。
 

能够看出,skip-gram进行预测的次数是要多于cbow的:由于每一个词在做为中心词时,都要使用周围词进行预测一次。这样至关于比cbow的方法多进行了K次(假设K为窗口大小),所以时间的复杂度为O(KV),训练时间要比cbow要长。blog

 

可是在skip-gram当中,每一个词都要收到周围的词的影响,每一个词在做为中心词的时候,都要进行K次的预测、调整。所以, 当数据量较少,或者词为生僻词出现次数较少时, 这种屡次的调整会使得词向量相对的更加准确。由于尽管cbow从另一个角度来讲,某个词也是会受到屡次周围词的影响(屡次将其包含在内的窗口移动),进行词向量的跳帧,可是他的调整是跟周围的词一块儿调整的,grad的值会平均分到该词上, 至关于该生僻词没有收到专门的训练,它只是沾了周围词的光而已。ip

 

所以,从更通俗的角度来讲:get

 
在skip-gram里面,每一个词在做为中心词的时候,其实是 1个学生 VS K个老师,K个老师(周围词)都会对学生(中心词)进行“专业”的训练,这样学生(中心词)的“能力”(向量结果)相对就会扎实(准确)一些,可是这样确定会使用更长的时间;
 

cbow是 1个老师 VS K个学生,K个学生(周围词)都会从老师(中心词)那里学习知识,可是老师(中心词)是一视同仁的,教给你们的同样的知识。至于你学到了多少,还要看下一轮(假如还在窗口内),或者之后的某一轮,你还有机会加入老师的课堂当中(再次出现做为周围词),跟着你们一块儿学习,而后进步一点。所以相对skip-gram,你的业务能力确定没有人家强,可是对于整个训练营(训练过程)来讲,这样确定效率高,速度更快。io

 

因此,这二者的取舍,要看你本身的需求是什么了。class

相关文章
相关标签/搜索