嵌入Keras

ore*_*isp 3 nlp keras data-science word-embedding

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

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

And*_*i D 5

简短的答案都不是。从本质上说,嵌入层如Word2Vec手套只是一个小神经网络模块(通常是完全连接的层),该项目更高,稀疏维度成较低,n维向量。

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

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

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()
Run Code Online (Sandbox Code Playgroud)

您的嵌入层的摘要如下:

_________________________________________________________________
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
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

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

还要注意,虽然嵌入的输入形状是成形的(None, 1000),但嵌入的输出是成形的(None, 1000, 3)。这意味着尺寸的非常小的致密的权重矩阵[13, 3]被施加到每一个的1000个输入的时间的步骤。这意味着,每月的整数输入0-11将被转换为size的浮点向量(3,)

这也意味着,当您从最后一层向后传播到嵌入层时,嵌入输出的1000个时间步长中的每一个的梯度也会(以某种time_distributed方式)流向较小的神经网络权重(本质上嵌入层)的大小[13,3]

另请参阅Keras官方文档以了解嵌入层:https : //keras.io/layers/embeddings/