已经证明了卷积神经网络(CNN)在文本/文档分类方面非常有用。我想知道如何处理文章长度差异,因为大多数情况下文章的长度是不同的。Keras 中是否有任何示例? 谢谢!
已经证明了卷积神经网络(CNN)在文本/文档分类方面非常有用。我想知道如何处理文章长度差异,因为大多数情况下文章的长度是不同的。Keras 中是否有任何示例? 谢谢!
以下是三个选项:
n_batch = 1
model.fit(X, y, epochs=1, batch_size=n_batch, verbose=1, shuffle=False)
我刚刚使用Keras的LSTM RNN模型创建了一个模型。它强制我填充我的输入(即句子)。然而,我只是添加了一个空字符串到句子中,直到它达到所需的长度。可能等于具有最大长度(以单词计)的特征的长度。然后,我能够使用glove将我的特征转换为向量空间,然后通过我的模型运行。
def getWordVector(X):
global num_words_kept
global word2vec
global word_vec_dim
input_vector = []
for row in X:
words = row.split()
if len(words) > num_words_kept:
words = words[:num_words_kept]
elif len(words) < num_words_kept:
for i in range(num_words_kept - len(words)):
words.append("")
input_to_vector = []
for word in words:
if word in word2vec:
input_to_vector.append(np.array(word2vec[word]).astype(np.float).tolist())#multidimensional wordvecor
else:
input_to_vector.append([5.0] * word_vec_dim)#place a number that is far different than the rest so as not to be to similar
input_vector.append(np.array(input_to_vector).tolist())
input_vector = np.array(input_vector)
return input_vector
其中X是句子列表,该函数将返回每个数组中的特征的长度为num_words_kept的单词向量(使用glove的word_to_vec)。因此,我同时使用填充和截断。(填充用于Keras实现,截断是因为当输入大小差异如此之大时,Keras也会出现问题。我不完全确定原因。当我开始对某些句子进行填充时,有些句子会添加超过100个空字符串,导致出现了问题。)
X = getWordVectors(features)
y = to_categorical(y)# for categorical_crossentropy
model.fit(X, y, batch_size=16, epochs=5, shuffle=False)
Keras 要求在输入数据之前使用 numpy 数组,因此我的特征和标签都是 numpy 数组。