Qwen2.5-1.5B — Fine-tuning QLoRA en Química Organometálica

Adaptadores LoRA de Qwen/Qwen2.5-1.5B-Instruct especializados en química organometálica mediante QLoRA sobre el dataset chemistry-organometallic-qa. Componente del pipeline RAG del proyecto chem-rag-assistant.

Repositorio: chem-rag-assistant


Métricas de evaluación

Evaluación cuantitativa sobre 5 preguntas de ground truth usando similitud coseno BGE-M3 como métrica semántica. Comparación entre tres aproximaciones:

Modelo Similitud media BGE-M3
Qwen2.5-1.5B-Instruct (base) 0.9943
Qwen2.5-1.5B + LoRA (este modelo) 0.9945
Qwen3-8B + RAG (referencia producción) 0.6901

Nota importante sobre los resultados: la loss final de entrenamiento fue 0.0000, indicando overfitting severo sobre el dataset de entrenamiento. La mejora sobre el modelo base es marginal (+0.0002, +0.0%), lo que indica que los adaptadores LoRA no lograron divergir del comportamiento base con suficiente señal. Con 167 pares de un único paper (PMC10967698), el modelo memorizó el dataset sin generalizar conocimiento nuevo. Esta es una limitación documentada del experimento — no un error técnico. El pipeline RAG con Qwen3-8B sigue siendo la aproximación de producción recomendada para este dominio.


Uso

Este modelo requiere cargar el modelo base Qwen/Qwen2.5-1.5B-Instruct y aplicar los adaptadores con PEFT:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel

# Configuración de quantización 4-bit — idéntica a la usada en entrenamiento
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

# 1. Cargar modelo base
modelo_base = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2.5-1.5B-Instruct",
    quantization_config=bnb_config,
    device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct")

# 2. Aplicar adaptadores LoRA
modelo = PeftModel.from_pretrained(
    modelo_base,
    "Jesusrodriguezf90/qwen2.5-1.5b-chemistry-lora",
    is_trainable=False,
)
modelo.eval()

# 3. Inferencia
mensajes = [
    {"role": "system",  "content": "You are an expert in organometallic chemistry."},
    {"role": "user",    "content": "What metals are used in NHC complexes?"},
]
texto = tokenizer.apply_chat_template(
    mensajes,
    tokenize=False,
    add_generation_prompt=True,
)
inputs = tokenizer(texto, return_tensors="pt").to(modelo.device)

with torch.no_grad():
    output = modelo.generate(**inputs, max_new_tokens=300)

respuesta = tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(respuesta)

Arquitectura y proceso de fine-tuning

Quantización 4-bit NF4 (BitsAndBytes)

Reduce el modelo de ~6GB en float32 a ~1.5GB en 4-bit para que quepa en una GPU T4 (15GB VRAM). NF4 (Normal Float 4) preserva mejor la distribución estadística de los pesos que int4 estándar. Sin quantización el fine-tuning en T4 gratuita sería inviable.

LoRA — Low-Rank Adaptation (PEFT)

En lugar de entrenar los 1.5B parámetros del modelo completo, añade matrices pequeñas de rango bajo sobre las capas de atención. Solo estas matrices se entrenan — aproximadamente el 1-3% de los parámetros totales. El resultado son 73.9MB de adaptadores en lugar de los ~3GB del modelo completo.

SFTTrainer (TRL)

Aplica automáticamente el chat template de Qwen2.5 a los pares QA en formato messages, garantizando la tokenización correcta para un modelo instruction-tuned.

Parámetro Valor
Modelo base Qwen/Qwen2.5-1.5B-Instruct
Dataset Jesusrodriguezf90/chemistry-organometallic-qa
Pares de entrenamiento 167
Épocas 10
LoRA r 32
LoRA alpha 64
LoRA dropout 0.05
Target modules q_proj, k_proj, v_proj, o_proj
Quantización 4-bit NF4, double quant, compute dtype bfloat16
Batch size efectivo 8 (2 × gradient_accumulation_steps=4)
Learning rate 5e-4
Warmup ratio 0.03
Max seq length 512
Loss final 0.0000 (overfitting — ver nota en métricas)
Hardware Google Colab GPU T4
Tamaño adaptadores 73.9MB

Dataset

chemistry-organometallic-qa — 167 pares pregunta-respuesta generados automáticamente con un LLM sobre el paper PMC10967698 (química organometálica de complejos NHC con Pd, Pt y Au). Formato messages (system/user/assistant) compatible con el chat template de Qwen2.5.

🔗 Jesusrodriguezf90/chemistry-organometallic-qa


Limitaciones

  • Entrenado sobre un único paper (PMC10967698) — el conocimiento especializado está limitado a ese documento
  • Loss de entrenamiento 0.0000 indica overfitting severo — el modelo memorizó los 167 pares sin generalizar
  • La mejora sobre el modelo base es marginal (+0.0002) — Qwen2.5-1.5B-Instruct ya tiene conocimiento químico general suficiente para este dominio
  • Para uso en producción sobre química organometálica se recomienda el pipeline RAG completo con Qwen3-8B + ChromaDB + BGE-M3

Licencia

MIT

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Jesusrodriguezf90/qwen2.5-1.5b-chemistry-lora

Adapter
(1186)
this model

Dataset used to train Jesusrodriguezf90/qwen2.5-1.5b-chemistry-lora