http://www.hankcs.com/nlp/word-vector-representations-word2vec.html
https://zh.gluon.ai/chapter_natural-language-processing/word2vec.html
https://www.cnblogs.com/pinard/p/7243513.html
常见面试问题
问题 1,介绍一下 word2vec
word2vec 的两个模型分别是 CBOW 和 Skip-gram,两个加快训练的 Loss 是 HS(Hierarchical Softmax )和负采样。
假设一个训练样本是又核心词 w和其上下文 context(w) 组成,那么 CBOW 就是用 context(w)去预测 w;而 Skip-gram 则反过来,是用 w去预测 context(w) 里的所有词。
HS 是试图用词频建立一棵哈夫曼树,那么经常出现的词路径会比较短。树的叶子节点表示词,共词典大小多个,而非叶子结点是模型的参数,比词典个数少一个。要预测的词,转化成预测从根节点到该词所在叶子节点的路径,是多个二分类问题。
对于负采样,则是把原来的 Softmax 多分类问题,直接转化成一个正例和多个负例的二分类问题。让正例预测 1,负例预测 0,这样子更新局部的参数。
问题 2,对比 Skip-gram 和 CBOW
训练速度上 CBOW 应该会更快一点,因为每次会更新 context(w) 的词向量,而 Skip-gram 只更新核心词的词向量。
Skip-gram 对低频词效果比 CBOW,因为是尝试用当前词去预测上下文,当前词是低频词还是高频词没有区别。但是 CBOW 相当于是完形填空,会选择最常见或者说概率最大的词来补全,因此不太会选择低频词。
Skip-gram 在大一点的数据集可以提取更多的信息。总体比 CBOW 要好一些。
问题 3,对比 HS 和 负采样
负采样更快一些,特别是词表很大的时候。
问题 4,负采样为什么要用词频来做采样概率?
因为这样可以让频率高的词先学习,然后带动其他词的学习。
问题 5,为什么训练完有两套词向量,为什么一般只用前一套?
对于 Hierarchical Softmax 来说,哈夫曼树中的参数是不能拿来做词向量的,因为没办法和词典里的词对应。负采样中的参数其实可以考虑做词向量,因为中间是和前一套词向量做内积,应该也是有意义的。但是考虑负样本采样是根据词频来的,可能有些词会采不到,也就学的不好。
问题 6,对比字向量和词向量
字向量其实可以解决一些问题,比如未登陆词,还有做一些任务的时候还可以避免分词带来的误差。
而词向量它的语义空间更大,更加丰富,语料足够的情况下,词向量是能够学到更多的语义的。