嵌入/嵌入层在深度学习中的用途

时间:2019-05-28 01:07:48

标签: deep-learning lstm recurrent-neural-network word-embedding

我正在探索深度学习方法,尤其是LSTM,以预测下一个单词。假设我的数据集是这样的:每个数据点包含7个特征(7个不同的词)(此处为A-G),长度不同。

 Group1  Group2............ Group 38
   A        B                   F
   E        C                   A
   B        E                   G
   C        D                   G
   C        F                   F
   D        G                   G
   .        .                   .
   .        .                   . 

我使用一种热编码作为输入层。这是模型

main_input= Input(shape=(None,action_count),name='main_input')
lstm_out= LSTM(units=64,activation='tanh')(main_input)
lstm_out=Dropout(0.2)(lstm_out)
lstm_out=Dense(action_count)(lstm_out)
main_output=Activation('softmax')(lstm_out)
model=Model(inputs=[main_input],outputs=main_output)
print(model.summary())

使用此模型。我的准确率约为60%。 我的问题是如何使用嵌入层解决问题。实际上,我对嵌入不太了解(为什么,何时以及如何工作)[我只知道一个热向量没有太多信息]。我想知道嵌入是否可以提高准确性。如果有人可以在这些方面为我提供指导,那将对我非常有益。 (至少对于我来说,使用嵌入是否合理)

1 个答案:

答案 0 :(得分:1)

  

什么是嵌入层?

它们是将正整数(可能是字数)转换为固定大小的密集向量的层。他们学习特定文本数据集的所谓嵌入(在NLP任务中)。

  

为什么有用?

嵌入层会慢慢学习单词之间的关系。因此,如果您有足够大的语料库(可能包含所有可能的英语单词),则诸如“ king”和“ queen”之类的单词的矢量在嵌入的多维空间中将显示出一些相似性。

  

在Keras中如何使用?

keras.layers.Embedding具有以下配置:

keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None) 

将正整数(索引)转换为固定大小的密集向量。例如。 [[4],[20]]-> [[0.25,0.1],[0.6,-0.2]] 该层只能用作模型的第一层。

input_dim的词汇量为1时。词汇是数据集中使用的所有单词的语料库。 input_length是输入序列的长度,而output_dim是输出向量的维数(特定单词的向量的维数)。

该图层也可以与pretrained word embeddings一起使用,例如Word2Vec或GloVE。

  

它们适合我的用例吗?

当然可以。对于情感分析,如果我们可以为特定单词生成上下文(嵌入),则可以肯定地提高其效率。

  

如何在用例中使用它们?

执行以下步骤:

  1. 您需要标记句子。也许和keras.preprocessing.text.Tokenizer在一起。
  2. 使用keras.preprocessing.sequence.pad_sequences将序列填充到固定长度。这将是嵌入层的input_length参数。
  3. 使用嵌入层作为第一层初始化模型。

希望这会有所帮助。