Embedding/嵌入层在深度学习中的用途
Uses of Embedding/ Embedding layer in deep learning
我正在探索深度学习方法,尤其是 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% 的准确率。
我的问题 是如何使用嵌入层解决我的问题。其实我对embedding了解不多(为什么,什么时候,怎么用)[我只知道一个hot vector,携带的信息不多]。我想知道 embedding 是否可以提高准确性。如果有人能在这些方面为我提供指导,那将对我大有裨益。 (至少对于我的情况,嵌入的使用是否合乎逻辑)
What are Embedding layers?
它们是将正整数(可能是字数)转换为固定大小的密集向量的层。他们学习特定文本数据集的所谓嵌入(在 NLP 任务中)。
Why are they useful?
嵌入层慢慢学习单词之间的关系。因此,如果你有足够大的语料库(可能包含所有可能的英语单词),那么像 "king" 和 "queen" 这样的单词的向量将在嵌入的多维 space 中显示出一些相似性.
How are used in 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。
Are they suitable for my use case?
当然,是的。对于情感分析,如果我们可以为特定单词生成上下文(嵌入),那么我们肯定可以提高其效率。
How can I use them in my use case?
按照以下步骤操作:
- 您需要对句子进行分词。也许
keras.preprocessing.text.Tokenizer
.
- 使用
keras.preprocessing.sequence.pad_sequences
将序列填充到固定长度。这将是嵌入层的 input_length
参数。
- 以嵌入层作为第一层初始化模型。
希望这对您有所帮助。
我正在探索深度学习方法,尤其是 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% 的准确率。 我的问题 是如何使用嵌入层解决我的问题。其实我对embedding了解不多(为什么,什么时候,怎么用)[我只知道一个hot vector,携带的信息不多]。我想知道 embedding 是否可以提高准确性。如果有人能在这些方面为我提供指导,那将对我大有裨益。 (至少对于我的情况,嵌入的使用是否合乎逻辑)
What are Embedding layers?
它们是将正整数(可能是字数)转换为固定大小的密集向量的层。他们学习特定文本数据集的所谓嵌入(在 NLP 任务中)。
Why are they useful?
嵌入层慢慢学习单词之间的关系。因此,如果你有足够大的语料库(可能包含所有可能的英语单词),那么像 "king" 和 "queen" 这样的单词的向量将在嵌入的多维 space 中显示出一些相似性.
How are used in 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。
Are they suitable for my use case?
当然,是的。对于情感分析,如果我们可以为特定单词生成上下文(嵌入),那么我们肯定可以提高其效率。
How can I use them in my use case?
按照以下步骤操作:
- 您需要对句子进行分词。也许
keras.preprocessing.text.Tokenizer
. - 使用
keras.preprocessing.sequence.pad_sequences
将序列填充到固定长度。这将是嵌入层的input_length
参数。 - 以嵌入层作为第一层初始化模型。
希望这对您有所帮助。