每个词表示为一个向量,向量长度为语料库中词的个数,每个向量值只有一个编码为1其余是0
杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]
上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]
宁波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0]
北京 [0,0,0,0,0,0,0,0,0,……,1,0,0,0,0,0,0]
缺点:
将词转化成一种分布式表示,又称词向量。分布式表示将词表示成一个定长的连续的稠密向量。
1、词之间存在相似关系: 是词之间存在“距离”概念,这对很多自然语言处理的任务非常有帮助。
2、包含更多信息: 词向量能够包含更多信息,并且每一维都有特定的含义。在采用one-hot特征时,可以对特征向量进行删减,词向量则不能
通过单词和上下文彼此预测。
v表示one-hot编码长度,d表示设定的输出向量的维度
1v Vd->1d dv ->1v
最后softmax之前1v向量的多少跟窗口大小有关。if窗口大小n=3最后预测的结果(t-3,t-2,t-1,t+1,t+2,t+3)。
Skip-gram是给定词语预测上下文
cbow是给定上下文预测词语
其他类似于skip-gram
例如,有语料如下:
I like deep learning.
I like NLP.
I enjoy flying.
则其共现矩阵如下:
矩阵定义的词向量在一定程度上缓解了one-hot向量相似度为0的问题,但没有解决数据稀疏性和维度灾难的问题。
既然基于co-occurrence矩阵得到的离散词向量存在着高维和稀疏性的问
题,一个自然而然的解决思路是对原始词向量进行降维,从而得到一个稠密的连续词向量。
SVD矩阵分解的方式就能够得到两组向量,分别表示文档的向量(可以用来做文本距离)和单词的向量。
有上面的矩阵进行SVD分解,得到矩阵正交矩阵U,对U进行归一化得到矩阵如下:
SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚至可以一定程度反映word间的线性关系。
word2vector考虑局部上下文关系
共现矩阵考虑到了全局的信息
结合二者的优点提出了一种glove算法
P(j|i)=Xij/Xi
推导过程参考glove学习笔记``
(ps:自己也有点晕,不想误导大家。。。学会的可以在这个上面补充哦!
学的不好,请大家批评指正)