Views
No views yet
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.| 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.
Qwen/Qwen2.5-1.5B-Instruct y aplicar los adaptadores con PEFT:1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
3from peft import PeftModel
4
5# Configuración de quantización 4-bit — idéntica a la usada en entrenamiento
6bnb_config = BitsAndBytesConfig(
7 load_in_4bit=True,
8 bnb_4bit_quant_type="nf4",
9 bnb_4bit_compute_dtype=torch.bfloat16,
10 bnb_4bit_use_double_quant=True,
11)
12
13# 1. Cargar modelo base
14modelo_base = AutoModelForCausalLM.from_pretrained(
15 "Qwen/Qwen2.5-1.5B-Instruct",
16 quantization_config=bnb_config,
17 device_map="auto",
18)
19tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct")
20
21# 2. Aplicar adaptadores LoRA
22modelo = PeftModel.from_pretrained(
23 modelo_base,
24 "Jesusrodriguezf90/qwen2.5-1.5b-chemistry-lora",
25 is_trainable=False,
26)
27modelo.eval()
28
29# 3. Inferencia
30mensajes = [
31 {"role": "system", "content": "You are an expert in organometallic chemistry."},
32 {"role": "user", "content": "What metals are used in NHC complexes?"},
33]
34texto = tokenizer.apply_chat_template(
35 mensajes,
36 tokenize=False,
37 add_generation_prompt=True,
38)
39inputs = tokenizer(texto, return_tensors="pt").to(modelo.device)
40
41with torch.no_grad():
42 output = modelo.generate(**inputs, max_new_tokens=300)
43
44respuesta = tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
45print(respuesta)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 |
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.PMC10967698) — el conocimiento especializado está limitado a ese documentoQwen2.5-1.5B-Instruct ya tiene conocimiento químico general suficiente para este dominioQwen3-8B + ChromaDB + BGE-M3