16_Embedding

151 阅读2分钟

背景

为什么要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的矩阵

训练优化:

  • 基本上都是用负采样来优化,NCE和Negative

wide&deep

end-to-end:直接在网络中加一个全连接层来训练得到embedding表示,就相当于一个降维,但是学习出来有语义信息,同时能够计算相似度。

这里面要指定单词量的大小和编码后的维度,具体可参考torch.Embedding()

GraphEmbedding