快速看懂tf2.0-tf.keras.layersEmbedding()使用方法

tf2.0-tf.keras.layersEmbedding()使用方法

一、什么是Embedding

我们可以简单的理解为,将一个特征转换为一个向量。比如最容易理解的one-hot编码。但在实际应用当中,将特征转换为one-hot编码后维度会十分高。所以我们会将one-hot这种稀疏特征转化为稠密特征,通常做法也就是转化为我们常用的embedding。
在NLP领域中,我们需要将文本转化为电脑所能读懂的语言,也就是把文本语句转化为向量,也就是embedding。

二、tf1.x中Embedding的实现

tf1.x中利用embedding_lookup()函数来实现,具体不再赘述,想知道具体原理及实现请看:
链接:link

三、tf2.0中Embedding的实现及操作实例

tf2.0中不再使用embedding_lookup()来实现embedding,转为使用Embedding()函数实现。需要注意的是:tf.keras.layers.Embbedding()只能作为模型第一层使用。
使用方法:

#vocab_size:字典大小
#embedding_dim:本层的输出大小,也就是生成的embedding的维数
#input_length:输入数据的维数,因为输入数据会做padding处理,所以一般是定义的max_length
keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length)

以下是文本分类问题所用到的模型,数据使用了imdb影视评论的数据:

imdb = keras.datasets.imdb
vocab_size = 10000
index_from = 3
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=vocab_size, index_from=index_from)

模型结构:

embedding_dim = 16 
batch_size = 128
model = keras.models.Sequential([
# 定义矩阵(vocab_size * embedding_dim), 输出(batch_size, max_length, embedding_dim), 将词表表示的句子转化为embedding
                                 keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length),
#batch_size*max_length*embedding_dim->batch_size*embedding_dim
                                 keras.layers.GlobalAveragePooling1D(),
                                 keras.layers.Dense(64, activation="relu"),
                                 keras.layers.Dense(1, activation="sigmoid")
])
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

你可能感兴趣的:(自然语言处理,tensorflow,深度学习,机器学习,神经网络)