Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

324
Vistas
Entrena solo algunas incrustaciones de palabras (Keras)

En mi modelo, uso incrustaciones pre-entrenadas de GloVe. Deseo mantenerlos no entrenables para disminuir la cantidad de parámetros del modelo y evitar el sobreajuste. Sin embargo, tengo un símbolo especial cuya incrustación quiero entrenar.

Usando la capa de incrustación provista, solo puedo usar el parámetro 'entrenable' para establecer la capacidad de entrenamiento de todas las incrustaciones de la siguiente manera:

 embedding_layer = Embedding(voc_size, emb_dim, weights=[embedding_matrix], input_length=MAX_LEN, trainable=False)

¿Existe una solución a nivel de Keras para entrenar solo un subconjunto de incrustaciones?

Tenga en cuenta:

  1. No hay suficientes datos para generar nuevas incrustaciones para todas las palabras.
  2. Estas respuestas solo se relacionan con TensorFlow nativo.
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Encontré una buena solución, inspirada en las dos capas de incrustaciones de Keith.

Idea principal:

Asigne los tokens especiales (y el OOV) con las ID más altas. Genere una 'oración' que contenga solo fichas especiales, rellenada con 0 en cualquier otro lugar. Luego aplique incrustaciones no entrenables a la oración 'normal' e incrustaciones entrenables a los tokens especiales. Por último, agregue ambos.

Funciona bien para mí.

 # Normal embs - '+2' for empty token and OOV token embedding_matrix = np.zeros((vocab_len + 2, emb_dim)) # Special embs special_embedding_matrix = np.zeros((special_tokens_len + 2, emb_dim)) # Here we may apply pre-trained embeddings to embedding_matrix embedding_layer = Embedding(vocab_len + 2, emb_dim, mask_zero = True, weights = [embedding_matrix], input_length = MAX_SENT_LEN, trainable = False) special_embedding_layer = Embedding(special_tokens_len + 2, emb_dim, mask_zero = True, weights = [special_embedding_matrix], input_length = MAX_SENT_LEN, trainable = True) valid_words = vocab_len - special_tokens_len sentence_input = Input(shape=(MAX_SENT_LEN,), dtype='int32') # Create a vector of special tokens, eg: [0,0,1,0,3,0,0] special_tokens_input = Lambda(lambda x: x - valid_words)(sentence_input) special_tokens_input = Activation('relu')(special_tokens_input) # Apply both 'normal' embeddings and special token embeddings embedded_sequences = embedding_layer(sentence_input) embedded_special = special_embedding_layer(special_tokens_input) # Add the matrices embedded_sequences = Add()([embedded_sequences, embedded_special])
over 4 years ago · Santiago Trujillo Denunciar

0

No he encontrado una buena solución como una máscara para la capa de incrustación. Pero esto es lo que he querido probar:

  • Dos capas de incrustación: una entrenable y otra no
  • El que no se puede entrenar tiene todas las incrustaciones de Glove para palabras en el vocabulario y vectores cero para otros
  • El entrenable solo mapea las palabras OOV y símbolos especiales
  • Se agrega la salida de estas dos capas (estaba pensando en esto como ResNet)
  • El Conv/LSTM/etc debajo de la incrustación no se modifica

Eso le daría una solución con una pequeña cantidad de parámetros gratuitos asignados a esas incrustaciones.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda