Dit project implementeert een systeem dat LoRA adapters selecteert en gebruikt op basis van fine-tuned embeddings en een TinyLlama taalmodel. Het systeem is specifiek ontworpen om te differentiëren tussen verschillende onderwerpen, zoals steden en geschiedenis.
Het systeem werkt als volgt:
- Fine-tuned embeddings model categoriseert input in onderwerpen (als voorbeeld steden of geschiedenis).
- Op basis van de hoogste embeddings waarde wordt de beste LoRA adapter geselecteerd.
- De geselecteerde LoRA wordt toegepast op het TinyLlama model voor gespecialiseerde inferentie.
- Clone de repository en navigeer naar de projectmap:
git clone https://github.com/s-smits/lora-selector
cd lora-selector
- Maak een virtuele omgeving aan met de naam
venv_lora_selector
en activeer deze:
Voor macOS en Linux:
python3 -m venv venv_lora_selector
source venv_lora_selector/bin/activate
Voor Windows:
python -m venv venv_lora_selector
venv_lora_selector\Scripts\activate
- Installeer de vereiste dependencies:
pip install -r requirements.txt
- Pas het
training_data.json
bestand aan (momenteel voorbeelden van steden- en geschiedenisvragen):
{
"text": [
{"question": "Wat is de hoofdstad van Nederland?", "answer": "Amsterdam", "subject": "cities"},
{"question": "In welk jaar vond de Franse Revolutie plaats?", "answer": "1789", "subject": "history"}
]
}
- Start het main script:
python main.py
Dit script zal:
- Het embeddings model fine-tunen om onderscheid te maken tussen steden- en geschiedenisvragen.
- LoRA adapters trainen voor zowel steden als geschiedenis.
- Inference met de beste LoRA adapter te kiezen op basis van de hoogste embeddings waarde.
Input: "Welke stad staat bekend om zijn scheve toren?"
- Embeddings model categoriseert dit als een stedenvraag.
- Steden-LoRA wordt geselecteerd vanwege de hoogste embeddings waarde.
- TinyLlama met steden-LoRA genereert een antwoord: "De stad die bekend staat om zijn scheve toren is Pisa, Italië."
Input: "Wie was de eerste president van de Verenigde Staten?"
- Embeddings model categoriseert dit als een geschiedenisvraag.
- Geschiedenis-LoRA wordt geselecteerd vanwege de hoogste embeddings waarde.
- TinyLlama met geschiedenis-LoRA genereert een antwoord: "De eerste president van de Verenigde Staten was George Washington."
Het project bestaat uit twee hoofdbestanden:
main.py
: Bevat de logica voor het trainen van LoRA adapters en inference.finetune_embeddings_model.py
: Bevat de code voor het fine-tunen van het embeddings model om onderscheid te maken tussen onderwerpen.
- Voeg zelf onderwerpen toe via
training_data.json
. - Pas de
base_language_model_name
enbase_embeddings_model_name
variabelen aan inmain.py
voor andere modellen. - Optimaliseer de LoRA training door de hyperparameters in de
LoraConfig
inmain.py
aan te passen.
- Dit project maakt met name gebruik van PyTorch en Transformers.
- Zorg voor voldoende GPU/CPU-geheugen, vooral bij het toevoegen van meer onderwerpen (16GB).
- Back-end
device
wordt automatisch gekozen (Cuda > MPS > CPU).