madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1
Este modelo fue creado utilizando la biblioteca Python nn_pruning: las capas lineales contienen el 27.0% de los pesos originales. Este modelo NO se puede usar sin la función optimize_model de nn_pruning, ya que utiliza NoNorms en lugar de LayerNorms y esto no es actualmente compatible con la biblioteca Transformers. Utiliza ReLUs en lugar de GeLUs como en la red BERT inicial, para acelerar la inferencia. Esto no necesita manejo especial, ya que es compatible con la biblioteca Transformers y está marcado en la configuración del modelo con la entrada "hidden_act": "relu". El modelo contiene el 43.0% de los pesos originales en total (las incrustaciones representa una parte significativa del modelo y no se podan con este método). Con un simple redimensionamiento de las matrices lineales, corrió 1.96 veces más rápido que bert-base-uncased en la evaluación. Esto es posible porque el método de poda llevó a matrices estructuradas. En términos de precisión, su F1 es 88.33, en comparación con 88.5 para bert-base-uncased, una caída de F1 de 0.17.
Como usar
Instalar nn_pruning: contiene el script de optimización, que simplemente empaqueta las capas lineales en más pequeñas eliminando filas/columnas vacías.
pip install nn_pruning
Luego puedes usar la biblioteca transformers casi como de costumbre: solo tienes que llamar a optimize_model cuando el pipeline se haya cargado.
from transformers import pipeline
from nn_pruning.inference_model_patcher import optimize_model
qa_pipeline = pipeline(
"question-answering",
model="madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1",
tokenizer="madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1")
print("bert-base-uncased parameters: 191.0M")
print(f"Parameters count (includes only head pruning, not feed forward pruning)={int(qa_pipeline.model.num_parameters() / 1E6)}M")
qa_pipeline.model = optimize_model(qa_pipeline.model, "dense")
print(f"Parameters count after complete optimization={int(qa_pipeline.model.num_parameters() / 1E6)}M")
predictions = qa_pipeline({
'context': "Frédéric François Chopin, born Fryderyk Franciszek Chopin (1 March 1810 – 17 October 1849), was a Polish composer and virtuoso pianist of the Romantic era who wrote primarily for solo piano.",
'question': "¿Quién es Frédéric Chopin?",
})
print("Predictions", predictions)
Funcionalidades
- Modelo BERT-base uncased afinado en SQuAD v1
- Las capas lineales contienen el 27.0% de los pesos originales
- Utiliza NoNorms en lugar de LayerNorms
- Utiliza ReLUs en lugar de GeLUs para acelerar inferencia
- El modelo contiene el 43.0% de los pesos originales en total
- Corre 1.96 veces más rápido que bert-base-uncased en la evaluación
- Método de poda resultó en matrices estructuradas
Casos de uso
- Respuestas a preguntas en contexto
- Aplicaciones de procesamiento de lenguaje natural
- Mejora de eficiencia en modelos BERT
- Aceleración de inferencias con modelado eficiente