--- license: apache-2.0 language: - en library_name: transformers pipeline_tag: text-generation tags: - biomedical - infectious-disease - vaccine-adjuvant - information-extraction - evidence-grounded base_model: Qwen/Qwen2.5-7B-Instruct --- # qwen2.5-7b-instruct-adjuvant-extractor This model is a task-specific fine-tuned version of **Qwen/Qwen2.5-7B-Instruct** for extracting **vaccine adjuvant concepts** and associated **evidence snippets** from infectious disease biomedical abstracts. ## Model Summary - **Model name:** `qwen2.5-7b-instruct-adjuvant-extractor` - **Base model:** `Qwen/Qwen2.5-7B-Instruct` - **Fine-tuning method:** LoRA adapter training, merged into full model weights - **Primary task:** Evidence-linked adjuvant extraction from title+abstract text ## Prompt Used for Inference ### System prompt ```text You are a biomedical information extraction assistant. ``` ### User instruction template ```text Extract infectious-disease adjuvants from the text and provide evidence snippets. Return ONLY valid JSON in this format: [{"adjuvant": "", "evidence": ""}, ...] Do not include any extra keys or explanation. ``` ### Input format ```text Title: Abstract: ``` The model receives the user instruction template followed by the title/abstract text. ## Actual Output Format Target The model is prompted to return a JSON array of objects with exactly two keys: ```json [ { "adjuvant": "", "evidence": "" } ] ``` Expected behavior: - Return a JSON array (can be empty: `[]`). - Each object must contain: - `adjuvant`: normalized or near-normalized adjuvant name - `evidence`: supporting text snippet from the same input abstract - No extra keys and no explanatory text outside JSON. ## Input/Output Example ### Example Input ```text Title: Intranasal vaccination study using alum and MPLA adjuvants in a murine influenza model. Abstract: Mice immunized with antigen formulated with alum showed increased IgG titers. A separate group receiving MPLA-adjuvanted vaccine demonstrated stronger IFN-gamma responses and reduced viral load after challenge. ``` ### Expected Output ```json [ { "adjuvant": "alum", "evidence": "Mice immunized with antigen formulated with alum showed increased IgG titers." }, { "adjuvant": "MPLA", "evidence": "A separate group receiving MPLA-adjuvanted vaccine demonstrated stronger IFN-gamma responses and reduced viral load after challenge." } ] ``` ### Notes on Output Validity - Output must be valid JSON. - Output must be a JSON array (use `[]` if no supported adjuvant is found). - Each item should include only `adjuvant` and `evidence`. - Evidence text should come from the provided input abstract. ## Working Inference Code (Validated) ```python import torch import json from transformers import AutoTokenizer, AutoModelForCausalLM repo_id = "RehanaHasin/Qwen2.5-7B-Instruct-adjuvant-extractor" SYS_PROMPT = "You are a biomedical information extraction assistant." PROMPT_INSTRUCTION = ( "Extract infectious-disease adjuvants from the text and provide evidence snippets.\n" "Return ONLY valid JSON in this format:\n" "[{\"adjuvant\": \"\", \"evidence\": \"\"}, ...]\n" "Do not include any extra keys or explanation." ) title = "Protective immune response against Streptococcus pyogenes in mice after intranasal vaccination with the fibronectin-binding protein SfbI." abstract = ( "Despite the significant impact on human health caused by Streptococcus pyogenes, " "there is currently no vaccine available. Intranasal immunization of mice with either " "SfbI alone or coupled to cholera toxin B subunit (CTB) triggered efficient SfbI-specific responses." ) user_input = f"{PROMPT_INSTRUCTION}\n\nTitle: {title}\nAbstract: {abstract}" tokenizer = AutoTokenizer.from_pretrained(repo_id, use_fast=True) model = AutoModelForCausalLM.from_pretrained( repo_id, dtype=torch.float16, device_map="auto", ) model.eval() chat = tokenizer.apply_chat_template( [ {"role": "system", "content": SYS_PROMPT}, {"role": "user", "content": user_input}, ], tokenize=False, add_generation_prompt=True, ) inputs = tokenizer(chat, return_tensors="pt", truncation=True, max_length=1024) inputs = {k: v.to(model.get_input_embeddings().weight.device) for k, v in inputs.items()} with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=200, do_sample=False, pad_token_id=tokenizer.eos_token_id, ) prediction = tokenizer.decode( outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True ).strip() print(json.dumps(json.loads(prediction), indent=2, ensure_ascii=False)) ``` ## Intended Use This model is intended for research workflows in biomedical literature mining, especially: - infectious disease vaccine literature curation - vaccine adjuvant concept extraction - evidence-linked information extraction for downstream manual review This model is not intended for clinical decision-making. ## Training Data and Split Context The model was trained on a curated infectious disease adjuvant corpus derived from VIOLIN ecosystem resources. - Corpus size used in workflow: 298 abstracts - Fixed split framework used across models: - 256 train - 13 validation - 29 test ## Training Configuration (Fixed Manuscript Setting) - LoRA rank (`r`): 8 - Learning rate: `2e-4` - Epochs: `5` - Quantization during fine-tuning: 4-bit NF4 with double quantization - Compute dtype: float16 - Per-device batch size and gradient accumulation were configured for stable updates across model families. ## Usage ```python from transformers import AutoTokenizer, AutoModelForCausalLM import torch repo_id = "RehanaHasin/Qwen2.5-7B-Instruct-adjuvant-extractor" tokenizer = AutoTokenizer.from_pretrained(repo_id) model = AutoModelForCausalLM.from_pretrained( repo_id, torch_dtype=torch.float16, device_map="auto", ) ``` ## Prompting Recommendation Use prompts that explicitly request structured JSON output containing only: - `adjuvant` - `evidence` and restrict extra commentary to reduce parsing errors. ## Limitations - Evaluated on a focused infectious-disease adjuvant corpus; broader-domain generalization is not guaranteed. - Performance depends on abstract quality and terminology variation. - Structured output may still require post-processing and manual validation. ## Ethical and Safety Notes - Outputs can contain extraction errors or unsupported predictions. - Human review is required before downstream knowledge integration. - Not for diagnosis, treatment, or direct patient-care decisions. ## Reproducibility Resources Code, notebooks, and workflow details are available at: https://github.com/hurlab/Infectious-Disease-Adjuvant-LLM-Fine-tuning ## Citation If you use this model, please cite the associated manuscript and project repository. ## Contact For questions, please contact hasin.rehana@und.edu.