NLP笔记–embedding层
前言
菜鸟要开始做笔记了。。。
之前一直想要做笔记,一直拖拖拖到现在。做笔记的目的是为了和大家分享一下自己的学习过程,希望能够帮到需要的同学;还有一点就是自己发现学过的东西记不住,忘得快,所以也希望通过这种方式重复学习,把自己掌握的东西讲出来。争取从一个菜鸟成为大菜鸟,加油!
Embedding
在NLP中,Embedding可以说是必不可少的;由于计算机并不认识我们所熟知的文字,所以我们必须要进行文字向量化表示。通俗地说,embedding的过程是用一个低维的向量表示一个词(或句子或其他,毕竟万物皆可embedding)。word2vec是embedding中的一个重要角色,即是将词进行vector,例如在embedding后,vector(中国)-vector(北京) = vector(法国)-vector(巴黎)。我认为一个好的embedding可以让任务事半功倍。
Keras中的Embedding层
Embedding能够用低维向量对物体进行编码还能保留其含义的特点非常适合深度学习。
word embedding即单词嵌入,Keras提供了一个嵌入层,将正整数(下标)转换为具有固定大小的向量。
keras.layers.embeddings.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
参数意义如下
- input_dim:大或等于0的整数,字典长度,即输入数据最大下标+1;即词可能的取值数,如下标为0-9,input_dim为10。
- output_dim:大于0的整数,代表全连接嵌入的维度;即输出向量维度,是一个超参数,如设置为50则该层输出为50。
- input_length:当输入序列的长度固定时,该值为其长度;可以理解为一个文档(输入序列)的长度,如输入的句子长度为20,input_length即设为20。
需要注意的是,若直接在Embedding层后接Dense层,必须使用Flatten层将Embedding层的2D输出矩阵平铺为一维矢量。
Embedding例子
embedding层使用较为灵活,在此可分为加载预训练模型和不加载预训练模型。
- 不加载预训练模型时,word embedding是随机初始化的,我们可以将其视为深度学习模型的一部分,在模型学习的过程中对其也进行调整、学习。
- 加载预训练模型时,如加载预训练的GloVE模型,其可视为迁移学习;如果我们不希望更新预训练模型中的word embedding值,可设置参数trainable=False,反正则trainable=True。
1.未加载预训练模型
假设输入长度为20的句子,词向量设置为300维,词数量为1000
from keras.layers import Embedding
max_len = 20
vocab_size = 1000
input_ = Input(shape = (max_len, ))
emd = Embedding(input_dim = vocab_size , output_dim = 300, input_length = max_len)(input_)
2.加载预训练模型
假设输入长度为20的句子,预训练的词向量维度为150,词数量为1000
from keras.layers import Embedding
max_len = 20
vocab_size = 1000
#embedding_matri为预训练单词的权重矩阵
input_ = Input(shape = (max_len, ))
emd = Embedding(input_dim=vocab_size , output_dim=150, input_length=max_len, weights=[embedding_matrix], trainable=False)(input_)
参考
https://keras-cn.readthedocs.io/en/latest/layers/embedding_layer/#embedding_1
https://zhuanlan.zhihu.com/p/53194407
https://zhuanlan.zhihu.com/p/49271699
http://frankchen.xyz/2017/12/18/How-to-Use-Word-Embedding-Layers-for-Deep-Learning-with-Keras/