【发布时间】:2017-11-15 09:07:58
【问题描述】:
当使用 keras 构建类似下面代码的简单 cnn 时,以及将其用于文档分类等基于文本的问题时,我理解这就像我们从文本中提取 4-gram(kernel_size of 4 ) 并将它们用作特征。
model = Sequential()
model.add(embedding_layer)
model.add(Conv1D(filters=100, kernel_size=4, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(Dense(4, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
在这种情况下,conv1D 层中的内核大小就像一个大小为 4 的滑动窗口,它遍历文本中的标记序列以发出 4-gram。
我想知道这里是否有一种方法可以让我们在卷积中创建“非连续滑动窗口”,即生成“skip-gram”等价物。例如,给定以下一维向量:
[a, b, c, d, e, f]
kernel_size=3 skip=1 的 conv1d 将扫描以下序列:
[(a,c,d),(b,d,e),(c,e,f),(d,f,padding),(e,padding,padding)] union [(a,b,d),(b,c,e),(c,d,f),(d,e,padding),(e,f,padding),(f,padding,padding)]
我说“联合”的原因仅仅是因为我认为从实现的角度来看,生成第 1 部分或第 2 部分可能更容易,为修改后的 conv1d 层提供另一个参数。如果是这种情况并且可行,我可以通过连接多个层来解决这个问题。但最低限度实际上是拥有一个扩展的 conv1d 层,该层将采用额外的参数,以便它执行扫描的第一部分或第二部分。
这个想法并不新鲜,因为本文已经对此进行了实验:http://www.aclweb.org/anthology/D/D16/D16-1085.pdf
但是请原谅我对 keras 缺乏深入的了解,我不知道如何实现它。有什么好的建议,
在此先感谢
【问题讨论】:
-
这是定期以固定步骤跳过令牌吗?还是您正在定义要跳过的特定标记?
-
你的意思是跳过1,阅读3,跳过1,阅读3,跳过1,阅读3....?
-
是的,它经常跳过,但与您在第二个回复中描述的不太一样。我用一个详细的例子修改了这个问题。所以就像你有一个窗口,有一定大小的间隙来忽略某些元素
-
根据您的更新(不同的频道跳过不同的克数),我在下面更新了我的答案。
标签: machine-learning deep-learning keras convolution