one_hot
apple=[0,0,0,…,1,0,0,0]
oriange=[0,0,1,0,…,0,0,0]
这种方法首先对进行单词进行词频排序,让后对每个单词建立一个和词库大小的向量,这种犯法无法表达单词的重要程度,并且每个维度很大,与词库大小相等。

tfidf

tf:文档中词出现的词频

idf:词在所有文旦中出现的频率的倒数,主要用于降低所有文档中一些常见词对文档影响的作用,比如(a,an,the)

这种方法在通过词频计算的方式定义每个词的向量,某种程度上给与词一个权重,可以用作关键词提取。但是tfidf的向量维度也是与词库大小有关。

深度学习构建词向量Vectorizer 词向量模型_词频


word2vec

one_hot和tfidf存在维度大,并且不能表达词和词之间的关系,如(man,king),(woman,queen)

word2vec通过embedding的方式将高维的one_hot映射到一个低维度的空间。

深度学习构建词向量Vectorizer 词向量模型_中心词_02


embedding层的权重对应的就是每个词的词向量字典,one_hot相当于索引。比如我想知道apple对应的词向量,就是用apple的one_hot与embedding层的权值做点积。

CBOW

使用周围词预测中心词

Skip_gram

使用中心词预测周围词,使用窗口确定正样本,使用负采样确定负样本

在论文中,作者指出指出对于小规模数据集,选择5-20个negative words会比较好,对于大规模数据集可以仅选择2-5个negative words

缺点:
上面的模型,没有包含contextualize信息,不能解决一词多义的问题,窗口太小不能捕捉词之间长期依赖关系,仅仅是一层神经网络结构。
cbow和skipgram 虽然也是通过周围词预测中心词,来得到embedding向量但是窗口较小没上下文语境,其次没有位置信息。

对比:
skip gram的训练时间更长,但是对于一些出现频率不高的词,在CBOW中的学习效果就不如skipgram,cbow会将context word 加起来, 在遇到生僻词是,预测效果将会大大降低。skip-gram则会预测生僻字的使用环境。