背景
为什么要embedding
1. Embedding 是一个将离散变量转为连续向量表示的一个方式, 强调是离散。
2. 现实生活中单词(word),类别特征都不好直接输入NN进行训练,需要embedding进行转换
3. 因为它不光可以减少离散变量的空间维数,同时还可以有意义的表示该变量。强调有意义
1) 在 embedding 空间中查找最近邻,这可以很好的用于根据用户的兴趣来进行推荐。
2) 作为监督性学习任务的输入。
3) 用于可视化不同离散变量之间的关系。
主要是可用来计算距离,表示相关性
embedding和one-hot的区别
1. one-hot有大量稀疏元素,假设一个包含2000个词的字典,使用One-hot编码每一个词会被一个包含2000个整数的向量来表示,其中1999个数字是0。
2. 词与词之间的距离用one-hot编码出来计算不符合逻辑,比如010000,000001,100000,假设这3个词都是很接近的,但是编码出来计算距离就千差万别
3. embedding可以自己控制向量维度
embedding概述
主要模型
Word2Vec
非end-to-end的训练方式,先训练好,得到embeding向量,再使用,预训练模式。灵活,但是有损。
Skip-gram训练方式:
样本格式:
模型公式:
目标函数:
整体框架:
- 学习的就是V x N的矩阵
训练优化:
- 主要是针对softmax计算量比较大的情况,有个累加项,需要遍历所有单词计算score mp.weixin.qq.com/s/q8mVupjdH…
- 基本上都是用负采样来优化,NCE和Negative
wide&deep
end-to-end:直接在网络中加一个全连接层来训练得到embedding表示,就相当于一个降维,但是学习出来有语义信息,同时能够计算相似度。
这里面要指定单词量的大小和编码后的维度,具体可参考torch.Embedding()