嵌入Keras

时间:2018-07-29 11:17:44

标签: keras nlp data-science word-embedding

哪种算法用于嵌入Keras内置函数中? Word2vec?手套?其他吗?

https://keras.io/layers/embeddings/

2 个答案:

答案 0 :(得分:3)

简短的答案是都不是。本质上,诸如 GloVe Word2Vec 之类的嵌入层只是一个较小的神经网络模块(通常为全连接层),其投影的维数较高,稀疏度较低,为n维向量。

当您在Keras中将新鲜随机嵌入层插入神经网络时,Keras将构建一个[input_dim, output_dim]形状的密集可学习矩阵。

具体来说,假设您要插入一个嵌入层,以将整数标量月信息(12个唯一值)编码为大小为3的浮点向量。 ,您将按照以下方式声明嵌入:

import numpy as np
import keras
from keras.models import Sequential, Model
from keras.layers import Embedding, Input
x = Input(shape=(1000,)) # suppose seq_len=1000
embedding = Embedding(12+1, 3, input_length=1000)(x)
model = Model(inputs=x, outputs= embedding) # Functional API
model.summary()

您的嵌入层的摘要如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 1000)              0         
_________________________________________________________________
embedding_1 (Embedding)      (None, 1000, 3)           39        
=================================================================
Total params: 39
Trainable params: 39
Non-trainable params: 0
_________________________________________________________________

请注意,可学习的参数为39 = 13*3(Keras需要+1来编码不属于12个唯一月份中的任何一个的值-以防万一)。

还要注意,尽管嵌入的输入形状为(None, 1000),嵌入的输出形状为(None, 1000, 3)。这意味着大小为[13, 3]的非常小的密集权重矩阵将应用于1000个输入时间步长中的每个。这意味着,每月0-11的整数输入将转换为大小为(3,)的浮点向量。

这也意味着,当您从最后一层向后传播到嵌入层时,也会产生1000个时间步长嵌入输出中每个 的梯度(在time_distributed中大小为[13,3]的小型神经网络权重(基本上是嵌入层)。

另请参见Keras官方文档的嵌入层:https://keras.io/layers/embeddings/

答案 1 :(得分:1)

以上都不是。默认情况下,它是随机embeddings_initializer='uniform'初始化的。

tutorial关于如何使用现有嵌入的信息。