Como a camada de convolução Keras 1d funciona com incorporação de palavras - problema de classificação de texto? (Filtros, tamanho do kernel e todos os hiperparâmetros)
Atualmente, estou desenvolvendo uma ferramenta de classificação de texto usando o Keras. Funciona (funciona bem e eu tenho a precisão de validação de 98,7), mas não consigo entender exatamente como a camada de convolução 1D funciona exatamente com dados de texto.
Quais hiperparâmetros devo usar?
Eu tenho as seguintes frases (dados de entrada):
Máximo de palavras na frase: 951 (se for menor - os preenchimentos são adicionados)Tamanho do vocabulário: ~ 32000Quantidade de frases (para treinamento): 9800embedding_vecor_length: 32 (quantas relações cada palavra tem em incorporamentos de palavras)batch_size: 37 (não importa para esta pergunta)Número de etiquetas (classes): 4É um modelo muito simples (criei estruturas mais complicadas, mas, estranhamente, funciona melhor - mesmo sem o uso do 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())
Minha principal pergunta é: Quais hiperparâmetros devo usar para a camada Conv1D?
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
Se eu tiver os seguintes dados de entrada:
Contagem máxima de palavras: 951Dimensão de incorporação de palavras: 32Isso significa quefilters=32
apenas digitalizará as primeiras 32 palavras descartando completamente o restante (comkernel_size=2
)? E devo definir filtros para 951 (quantidade máxima de palavras na frase)?
Exemplos em imagens:
Então, por exemplo, estes são dados de entrada:http://joxi.ru/krDGDBBiEByPJA
É o primeiro passo de uma camada de convulsão (passo 2):http://joxi.ru/Y2LB099C9dWkOr
É o segundo passo (passo 2):http://joxi.ru/brRG699iJ3Ra1m
E sefilters = 32
, camada repete 32 vezes? Estou correcto? Então, eu não vou conseguir dizer 156ª palavra na frase e, portanto, essa informação será perdida?