gpt4 book ai didi

python - Keras 1d 卷积层如何处理词嵌入 - 文本分类问题? (过滤器、内核大小和所有超参数)

转载 作者:太空狗 更新时间:2023-10-30 00:37:44 25 4
gpt4 key购买 nike

我目前正在使用 Keras 开发文本分类工具。它工作正常(工作正常,我得到了高达 98.7 的验证准确率)但我无法完全理解一维卷积层如何与文本数据一起工作。

我应该使用哪些超参数?

我有以下句子(输入数据):

  • 句子中的最大单词数:951(如果少于 - 添加填充)
  • 词汇量:~32000
  • 句子数量(用于训练):9800
  • embedding_vecor_length:32(每个词在词嵌入中有多少关系)
  • batch_size: 37(本题无所谓)
  • 标签数量(类别):4

这是一个非常简单的模型(我制作了更复杂的结构,但奇怪的是它工作得更好 - 即使不使用 LSTM):

model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(labels_count, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())

我的主要问题是:我应该为 Conv1D 层使用哪些超参数?

model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))

如果我有以下输入数据:

  • 最大字数:951
  • 词嵌入维度:32

这是否意味着 filters=32 将只扫描前 32 个单词并完全丢弃其余单词(使用 kernel_size=2)?我应该将过滤器设置为 951(句子中的最大字数)?

图片示例:

例如这是一个输入数据:http://joxi.ru/krDGDBBiEByPJA

这是卷积层的第一步(步幅 2):http://joxi.ru/Y2LB099C9dWkOr

这是第二步(stride 2):http://joxi.ru/brRG699iJ3Ra1m

如果 filters = 32,层会重复 32 次?我对么?所以我不会说出句子中的第 156 个单词,因此这些信息会丢失吗?

最佳答案

我会尝试解释一维卷积如何应用于序列数据。我只是举了一个由单词组成的句子的例子,但显然它不是特定于文本数据的,它与其他序列数据和时间序列相同。

假设我们有一个由 m 组成的句子每个单词都使用单词嵌入表示的单词:

Input data

现在我们想应用一个由 n 组成的一维卷积层内核大小为 k 的不同过滤器在这个数据上。为此,滑动长度为 k 的窗口从数据中提取,然后将每个过滤器应用于每个提取的窗口。这是发生的情况的说明(这里我假设 k=3 并为简单起见删除了每个过滤器的偏差参数):

Filters

如您在上图中所见,每个滤波器的响应等效于其与提取的长度为 k 的窗口进行卷积(即逐元素乘法,然后对所有结果求和)的结果。 (即给定句子中的第 i(i+k-1) 的第几个词)。此外,请注意,每个过滤器的 channel 数与训练样本的特征数(即词嵌入维度)相同(因此可以执行卷积,即逐元素乘法)。本质上,每个过滤器都在检测训练数据的本地窗口中模式的特定特征的存在(例如,该窗口中是否存在几个特定的​​单词)。在所有长度为 k 的窗口上应用所有过滤器之后我们会有这样的输出,这是卷积的结果:

filters response

如你所见,有m-k+1图中的窗口,因为我们假设 padding='valid'stride=1 (Keras 中 Conv1D 层的默认行为)。 stride参数确定窗口应滑动多少(即移动)以提取下一个窗口(例如,在我们上面的示例中,步幅为 2 将提取单词窗口:(1,2,3), (3,4,5), (5,6,7), ...)。 padding参数确定窗口是否应该完全由训练样本中的单词组成,或者应该在开始和结束时进行填充;这样,卷积响应可能具有与训练样本相同的长度(即 m 而不是 m-k+1 )(例如,在我们上面的示例中, padding='same' 将提取单词窗口: (PAD,1,2), (1,2,3), (2,3,4), ..., (m-2,m-1,m), (m-1,m, PAD) )。

您可以使用 Keras 验证我提到的一些事情:

from keras import models
from keras import layers

n = 32 # number of filters
m = 20 # number of words in a sentence
k = 3 # kernel size of filters
emb_dim = 100 # embedding dimension

model = models.Sequential()
model.add(layers.Conv1D(n, k, input_shape=(m, emb_dim)))

model.summary()

模型总结:

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_2 (Conv1D) (None, 18, 32) 9632
=================================================================
Total params: 9,632
Trainable params: 9,632
Non-trainable params: 0
_________________________________________________________________

如您所见,卷积层的输出形状为 (m-k+1,n) = (18, 32)并且卷积层中的参数数量(即过滤器权重)等于:num_filters * (kernel_size * n_features) + one_bias_per_filter = n * (k * emb_dim) + n = 32 * (3 * 100) + 32 = 9632 .

关于python - Keras 1d 卷积层如何处理词嵌入 - 文本分类问题? (过滤器、内核大小和所有超参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52352522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com