embeding 嵌套
嵌套是一种相对低维的空间,可以将高维矢量映射到这种低维空间中。
通过使用嵌套,可以让在大型输入(比如代表字词的稀疏矢量)上进行机器学习变得更加容易。
在理想情况下,嵌套可以将语义上相似的不同输入映射到嵌套空间里的邻近处,以此来捕获输入的语义。
一个模型学习到的嵌套,也可以被其他模型重用。
嵌套(embeddings)
谷歌定义:
一种分类特征,以连续特征表示。
通常,嵌入是指将高纬度的向量映射到低纬度的空间。
例如,可以采用以下两种方式之一来表示英文句子中的单词:
1、表示成包含百万个元素(高纬度)的稀疏向量,其中所有元素都是整数。向量中的每个单元格都表示一个单独的英文单词,单元格中的值表示相应单词在句子中出现的次数。由于单个英文句子包含一个非常小的整数(通常为1),该整数表示相应单词在句子中出现的次数。
2、表示成包含数百个元素(低纬度)的密集向量,其中每个元素都存储一个介于0到1之间的浮点值。这就是一种嵌套。
在TensorFlow中,会按反向传播损失训练嵌套,和训练神经网络中的任何其他参数一样。
嵌套本质上是降维,是化稀疏为密集
分布式表示方法
Embedding是一种分布式表示方法,即把原始输入数据分布地表示成一系列特征的线性组合。比如最典型的例子,我们知道颜色可以使用RGB表示法,这就是一种分布式表示:
而具体到NLP中,词的Embedding,实际上也是一样的——每一个词都被表示成指定维度(比如300或者768)的向量,每一个维度对应词的一种语义特征。不过有一点跟颜色不同,我们很明确地知道RGB表示法中三个特征的物理意义(对应三原色),但是在NLP中,我们显然不可能从语言学角度先验地知道每一个维度具体表示哪一种语义特征,也没法知道一个Token对应的特征值具体是多少,所以这就需要通过语言模型训练来得到对应的值。无论是早期的w2v还是现在的BERT家族,本质都是通过设计任务在海量语料上自监督学习来学到对应的特征值,区别无非就是模型容量罢了——BERT的模型容量远远大于w2v使用的网络层(w2v能不能算深度神经网络都得打个问号),所以可以学到完整的上下文信息。